ETH Price: $3,384.51 (+4.19%)
Gas: 2 Gwei

Token

SATOSHI 2.0 (SATS2.0)
 

Overview

Max Total Supply

8,204,985.727086804858803678 SATS2.0

Holders

117

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,413.596037216653607844 SATS2.0

Value
$0.00
0x6c972982e8615ff2c788b928b244f3166780066d
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:
Satoshi20

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
 * Satoshi P2P e-cash paper
 *
 * Satoshi Nakamoto
 * [email protected]
 * www.bitcoin.org
 *
 * Abstract:
 *
 * A purely decentralized implementation of an Ethereum contract, inspired by 
 * Bitcoin's peer-to-peer electronic cash system, enables the direct transfer 
 * of tokens from one party to another without a third-party intermediary. 
 * Cryptographic methods provide part of the solution, but primary advantages 
 * are lost if a trusted authority is still needed to manage token supply and 
 * prevent over-spending.
 *
 * We propose a solution to the token supply management using a 
 * contract-level automated feature. The contract manages the token supply by 
 * calculating the rewards from a block and applying the "BlockReward" event, 
 * forming a record that cannot be altered without redoing the reward event. 
 * The reward event not only serves as evidence of the sequence of operations, 
 * but also as evidence of the largest pool of token holders. As long as a 
 * majority of token holders are not cooperating to disrupt the contract, 
 * they'll validate the longest chain of events and outpace potential adversaries.
 *
 * The contract itself requires minimal structure. Transactions are executed 
 * on a first-come-first-serve basis, and addresses can interact with the 
 * contract at will, accepting the outcome of the longest chain of events as 
 * proof of what happened in their absence. In addition, the contract 
 * periodically contributes tokens to the Satoshi Contribution, effectively 
 * removing them from the circulating supply. This contributes to the scarcity 
 * and potentially the value of the token over time, reflecting the spirit of 
 * Satoshi Nakamoto's vision in the context of an Ethereum contract.
 * 
 * https://twitter.com/0xSatoshiETH
 * https://t.me/SATS20_ETH
*/

pragma solidity 0.8.19;

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

interface InterfaceLP {
    function sync() external;
    function mint(address to) external returns (uint liquidity);
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

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

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

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB)
    external
    returns (address pair);
}

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(msg.sender == _owner, "Not owner");
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IWETH {
    function deposit() external payable;
}

contract Satoshi20 is ERC20Detailed, Ownable {

    uint256 public halvingRateNumerator = 810101010;
    uint256 public halvingRateDenominator = 100000000000;

    uint256 public blockRewardInterval = 30 minutes;
    uint256 public nextBlockReward;
    bool public autoBlockReward = true;

    uint256 public maxTxnAmount;
    uint256 public maxWallet;

    uint256 public percentForSatoshi = 50;
    bool public satoshiEnabled = true;
    uint256 public satoshiFrequency = 4 hours;
    uint256 public nextSatoshi;

    uint256 private constant DECIMALS = 18;
    uint256 private constant INITIAL_COINS_SUPPLY = 21_000_000 * 10**DECIMALS;
    uint256 private constant TOTAL_UNITS = type(uint256).max - (type(uint256).max % INITIAL_COINS_SUPPLY);
    uint256 private constant MIN_SUPPLY = 21 * 10**DECIMALS;

    event BlockReward(uint256 indexed time, uint256 totalSupply);
    event RemovedLimits();
    event SatoshiContribution(uint256 indexed amount);

    IWETH public immutable weth;

    IDEXRouter public immutable router;
    address public immutable pair;
    address public satoshi;
    
    bool public limitsInEffect = true;
    bool public lpAdded = false;
    
    uint256 private _totalSupply;
    uint256 private _unitsPerCoin;

    mapping(address => uint256) private _unitBalances;
    mapping(address => mapping(address => uint256)) private _allowedCoins;

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    constructor() ERC20Detailed(block.chainid==1 ? "SATOSHI 2.0" : "SAT", block.chainid==1 ? "SATS2.0" : "SAT", 18) {
        address dexAddress;
        if(block.chainid == 1){
            dexAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            dexAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 97){
            dexAddress = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else {
            revert("Chain not configured");
        }

        router = IDEXRouter(dexAddress);

        _totalSupply = INITIAL_COINS_SUPPLY;
        _unitBalances[address(this)] = TOTAL_UNITS;
        _unitsPerCoin = TOTAL_UNITS/(_totalSupply);

        maxTxnAmount = _totalSupply * 1 / 100;
        maxWallet = _totalSupply * 1 / 100;

        weth = IWETH(router.WETH());
        pair = IDEXFactory(router.factory()).createPair(address(this), router.WETH());

        satoshi = msg.sender;

        emit Transfer(address(0x0), address(this), balanceOf(address(this)));
    }

    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

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

    function allowance(address owner_, address spender) external view override returns (uint256){
        return _allowedCoins[owner_][spender];
    }

    function balanceOf(address who) public view override returns (uint256) {
        return _unitBalances[who]/(_unitsPerCoin);
    }

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

    function approve(address spender, uint256 coins) public override returns (bool) {
        _allowedCoins[_msgSender()][spender] = coins;
        emit Approval(_msgSender(), spender, coins);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override validRecipient(recipient) returns (bool) {
        require(amount <= _allowedCoins[sender][_msgSender()], "Transfer amount exceeds allowance");
        _allowedCoins[sender][_msgSender()] = _allowedCoins[sender][_msgSender()]-amount;
        _transferFrom(sender, recipient, amount);
        return true;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal {
        if(limitsInEffect){
            if (sender == pair || recipient == pair){
                require(amount <= maxTxnAmount, "Max Transaction Amount Exceeded");
            }
            if (recipient != pair){
                require(balanceOf(recipient) + amount <= maxWallet, "Max Wallet Amount Exceeded");
            }
        }

        if(recipient == pair){
            if(autoBlockReward && shouldReward()){
                blockReward();
            }
            if (shouldReward()) {
                autoSatoshi();
            }
        }

        uint256 unitAmount = amount*(_unitsPerCoin);

        _unitBalances[sender] = _unitBalances[sender]-(unitAmount);
        _unitBalances[recipient] = _unitBalances[recipient]+(unitAmount);

        emit Transfer(sender, recipient, unitAmount/(_unitsPerCoin));
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool){
        uint256 oldValue = _allowedCoins[_msgSender()][spender];
        if (subtractedValue >= oldValue) {
            _allowedCoins[_msgSender()][spender] = 0;
        } else {
            _allowedCoins[_msgSender()][spender] = oldValue - subtractedValue;
        }
        emit Approval(_msgSender(), spender, _allowedCoins[_msgSender()][spender]);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool){
        _allowedCoins[_msgSender()][spender] = _allowedCoins[_msgSender()][spender] + addedValue;
        emit Approval(_msgSender(), spender, _allowedCoins[_msgSender()][spender]);
        return true;
    }

    function getSupplyDeltaOnNextBlockReward() external view returns (uint256){
        return (_totalSupply*halvingRateNumerator)/halvingRateDenominator;
    }

    function shouldReward() public view returns (bool) {
        return nextBlockReward <= block.timestamp;
    }

    function lpSync() internal {
        InterfaceLP _pair = InterfaceLP(pair);
        _pair.sync();
    }

    function blockReward() private returns (uint256) {
        uint256 time = block.timestamp;

        uint256 supplyDelta = (_totalSupply*halvingRateNumerator)/halvingRateDenominator;

        nextBlockReward += blockRewardInterval;

        if (supplyDelta == 0) {
            emit BlockReward(time, _totalSupply);
            return _totalSupply;
        }

        _totalSupply = _totalSupply - supplyDelta;

        if (_totalSupply < MIN_SUPPLY) {
            _totalSupply = MIN_SUPPLY;
            autoBlockReward = false;
        }

        _unitsPerCoin = TOTAL_UNITS / _totalSupply;

        lpSync();

        emit BlockReward(time, _totalSupply);
        return _totalSupply;
    }

    function autoSatoshi() internal {
        nextSatoshi = block.timestamp + satoshiFrequency;

        uint256 liquidityPairBalance = balanceOf(pair);

        uint256 amountToContribute = liquidityPairBalance * percentForSatoshi / 10000;

        if (amountToContribute > 0) {
            uint256 unitAmountToContribute = amountToContribute * _unitsPerCoin;
            _unitBalances[pair] -= unitAmountToContribute;
            _unitBalances[address(0xdead)] += unitAmountToContribute;
            emit Transfer(pair, address(0xdead), amountToContribute);
        }

        InterfaceLP _pair = InterfaceLP(pair);
        _pair.sync();
        emit SatoshiContribution(amountToContribute);
    }

    function removeLimits() external {
        require(msg.sender == satoshi, "Satoshi Only");
        require(limitsInEffect, "Limits already removed");
        limitsInEffect = false;
        emit RemovedLimits();
    }

    function updateHalvingRate(uint256 rate) external {
        require(msg.sender == satoshi, "Satoshi Only");
        halvingRateNumerator = rate;
    }

    function updateBlockRewardInterval(uint256 interval) external {
        require(msg.sender == satoshi, "Satoshi Only");
        blockRewardInterval = interval;
    }

    function updateSatoshiFrequency(uint256 interval) external {
        require(msg.sender == satoshi, "Satoshi Only");
        satoshiFrequency = interval;
    }

    function manualBlockReward() external {
        require(msg.sender == satoshi, "Satoshi Only");
        blockReward();
    }

    function manualSatoshi(uint256 _percentForSatoshi) external {
        require(msg.sender == satoshi, "Satoshi Only");
        require(shouldReward(), "Must wait for cooldown to finish");

        nextSatoshi = block.timestamp + satoshiFrequency;

        uint256 liquidityPairBalance = balanceOf(pair);

        uint256 amountToContribute = liquidityPairBalance * _percentForSatoshi / 10000;

        if (amountToContribute > 0) {
            uint256 unitAmountToContribute = amountToContribute * _unitsPerCoin;
            _unitBalances[pair] -= unitAmountToContribute;
            _unitBalances[address(0xdead)] += unitAmountToContribute;
            emit Transfer(pair, address(0xdead), amountToContribute);
        }

        InterfaceLP _pair = InterfaceLP(pair);
        _pair.sync();
        emit SatoshiContribution(amountToContribute);
    }

    function genesisBlock(address[] calldata _to) external payable onlyOwner {
        require(!lpAdded, "LP already added");
        require(address(this).balance > 0 && balanceOf(address(this)) > 0);

        uint256 totalDistribution = (_to.length * (INITIAL_COINS_SUPPLY * 1 / 100));
        uint256 toDistribute = INITIAL_COINS_SUPPLY * 1 / 100 * _unitsPerCoin;

        require(balanceOf(address(this)) >= totalDistribution, "Insufficient balance to distribute");

        for (uint256 i = 0; i < _to.length; i++) {
            _unitBalances[_to[i]] += (toDistribute);
        }

        weth.deposit{value: address(this).balance}();

        uint lpBalance = (_unitBalances[address(this)] - (totalDistribution * _unitsPerCoin));
        _unitBalances[pair] += lpBalance;
        _unitBalances[address(this)] = 0;
        emit Transfer(address(this), pair, _unitBalances[pair] / _unitsPerCoin);

        IERC20(address(weth)).transfer(address(pair), IERC20(address(weth)).balanceOf(address(this)));

        InterfaceLP(pair).mint(owner());
        lpAdded = true;

        nextBlockReward = block.timestamp + blockRewardInterval;
        nextSatoshi = block.timestamp + satoshiFrequency;

        //The NY Times 5/07/2023 The Ukraine War Changed This Company Forever
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BlockReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SatoshiContribution","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":[{"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":"coins","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBlockReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockRewardInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"genesisBlock","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getSupplyDeltaOnNextBlockReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingRateDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingRateNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBlockReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentForSatoshi","type":"uint256"}],"name":"manualSatoshi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextBlockReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextSatoshi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForSatoshi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"satoshi","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"satoshiEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"satoshiFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shouldReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"updateBlockRewardInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"updateHalvingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"updateSatoshiFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60e0604052633049291260035564174876e8006004556107086005556007805460ff1990811660019081179092556032600a55600b80549091169091179055613840600c55600e805461ffff60a01b1916600160a01b1790553480156200006557600080fd5b504660011462000091576040518060400160405280600381526020016214d05560ea1b815250620000b6565b6040518060400160405280600b81526020016a05341544f53484920322e360ac1b8152505b46600114620000e1576040518060400160405280600381526020016214d05560ea1b81525062000102565b60405180604001604052806007815260200166053415453322e360cc1b8152505b6012600062000112848262000619565b50600162000121838262000619565b506002805460ff929092166001600160a81b03199092169190911761010033021790555060009050466001036200016e5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000204565b46600503620001935750737a250d5630b4cf539739df2c5dacb4c659f2488d62000204565b46606103620001b8575073d99d1c33f9fc3444f8101754abc46c52416550d162000204565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e66696775726564000000000000000000000000604482015260640160405180910390fd5b6001600160a01b03811660a0526200021f6012600a620007f8565b6200022f906301406f406200080d565b600f55620002406012600a620007f8565b62000250906301406f406200080d565b6200025e906000196200083d565b6200026c9060001962000854565b30600090815260116020526040902055600f546200028d6012600a620007f8565b6200029d906301406f406200080d565b620002ab906000196200083d565b620002b99060001962000854565b620002c591906200086a565b601055600f54606490620002db9060016200080d565b620002e791906200086a565b600855600f54606490620002fd9060016200080d565b6200030991906200086a565b60098190555060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000376919062000881565b6001600160a01b03166080816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f6919062000881565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000446573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046c919062000881565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e0919062000881565b6001600160a01b031660c052600e80546001600160a01b031916331790553060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200052d8362000545565b60405190815260200160405180910390a350620008ac565b6010546001600160a01b03821660009081526011602052604081205490916200056e916200086a565b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200059f57607f821691505b602082108103620005c057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061457600081815260208120601f850160051c81016020861015620005ef5750805b601f850160051c820191505b818110156200061057828155600101620005fb565b5050505b505050565b81516001600160401b0381111562000635576200063562000574565b6200064d816200064684546200058a565b84620005c6565b602080601f8311600181146200068557600084156200066c5750858301515b600019600386901b1c1916600185901b17855562000610565b600085815260208120601f198616915b82811015620006b65788860151825594840194600190910190840162000695565b5085821015620006d55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200073c578160001904821115620007205762000720620006e5565b808516156200072e57918102915b93841c939080029062000700565b509250929050565b60008262000755575060016200056e565b8162000764575060006200056e565b81600181146200077d57600281146200078857620007a8565b60019150506200056e565b60ff8411156200079c576200079c620006e5565b50506001821b6200056e565b5060208310610133831016604e8410600b8410161715620007cd575081810a6200056e565b620007d98383620006fb565b8060001904821115620007f057620007f0620006e5565b029392505050565b600062000806838362000744565b9392505050565b80820281158282048414176200056e576200056e620006e5565b634e487b7160e01b600052601260045260246000fd5b6000826200084f576200084f62000827565b500690565b818103818111156200056e576200056e620006e5565b6000826200087c576200087c62000827565b500490565b6000602082840312156200089457600080fd5b81516001600160a01b03811681146200080657600080fd5b60805160a05160c0516120ac620009616000396000818161059601528181610e6b01528181610ecb01528181610f6f0152818161104d01528181611354015281816113b501528181611454015281816114960152818161154f0152818161158a01528181611617015281816116b5015281816119d001528181611a3501528181611ad401528181611b160152611bbe015260006106f301526000818161037e01528181610dc50152610f3e01526120ac6000f3fe60806040526004361061023b5760003560e01c80637dc7278f1161012e578063af8deddb116100ab578063dd62ed3e1161006f578063dd62ed3e1461065b578063f2fde38b146106a1578063f5cae6bd146106c1578063f887ea40146106e1578063f8b45b051461071557600080fd5b8063af8deddb146105d8578063bd334d81146105f9578063c3083bf81461060f578063ce4ef10e14610625578063cf46f24c1461064557600080fd5b80639edba7ba116100f25780639edba7ba1461052a578063a457c2d71461054a578063a58c93821461056a578063a8aa1b3114610584578063a9059cbb146105b857600080fd5b80637dc7278f146104af57806381285a0e146104c55780638a9e98c4146104df5780638da5cb5b146104f257806395d89b411461051557600080fd5b806344b0c73f116101bc57806370a082311161018057806370a0823114610439578063715018a61461045957806374fd41a51461046e578063751039fc146104845780637af2c4221461049957600080fd5b806344b0c73f146103b85780634a62bb65146103cd5780634dd813e6146103ee5780635e7dd5361461040e5780636519b5a91461042357600080fd5b8063213953491161020357806321395349146102f257806323b872dd1461030a578063313ce5671461032a578063395093511461034c5780633fc8cef31461036c57600080fd5b806306fdde0314610240578063095ea7b31461026b5780630ab98a701461029b57806318160ddd146102bd57806318d954ef146102dc575b600080fd5b34801561024c57600080fd5b5061025561072b565b6040516102629190611c35565b60405180910390f35b34801561027757600080fd5b5061028b610286366004611c9f565b6107bd565b6040519015158152602001610262565b3480156102a757600080fd5b506102bb6102b6366004611cc9565b610826565b005b3480156102c957600080fd5b50600f545b604051908152602001610262565b3480156102e857600080fd5b506102ce600c5481565b3480156102fe57600080fd5b5060065442101561028b565b34801561031657600080fd5b5061028b610325366004611ce2565b61085e565b34801561033657600080fd5b5060025460405160ff9091168152602001610262565b34801561035857600080fd5b5061028b610367366004611c9f565b61095a565b34801561037857600080fd5b506103a07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610262565b3480156103c457600080fd5b506102bb6109e0565b3480156103d957600080fd5b50600e5461028b90600160a01b900460ff1681565b3480156103fa57600080fd5b506102bb610409366004611cc9565b610a15565b34801561041a57600080fd5b506102ce610a44565b34801561042f57600080fd5b506102ce60035481565b34801561044557600080fd5b506102ce610454366004611d1e565b610a68565b34801561046557600080fd5b506102bb610a8f565b34801561047a57600080fd5b506102ce60045481565b34801561049057600080fd5b506102bb610b0d565b3480156104a557600080fd5b506102ce60065481565b3480156104bb57600080fd5b506102ce600a5481565b3480156104d157600080fd5b5060075461028b9060ff1681565b6102bb6104ed366004611d40565b610bc1565b3480156104fe57600080fd5b5060025461010090046001600160a01b03166103a0565b34801561052157600080fd5b50610255611137565b34801561053657600080fd5b506102bb610545366004611cc9565b611146565b34801561055657600080fd5b5061028b610565366004611c9f565b611175565b34801561057657600080fd5b50600b5461028b9060ff1681565b34801561059057600080fd5b506103a07f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c457600080fd5b5061028b6105d3366004611c9f565b61125e565b3480156105e457600080fd5b50600e5461028b90600160a81b900460ff1681565b34801561060557600080fd5b506102ce60055481565b34801561061b57600080fd5b506102ce600d5481565b34801561063157600080fd5b50600e546103a0906001600160a01b031681565b34801561065157600080fd5b506102ce60085481565b34801561066757600080fd5b506102ce610676366004611db5565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b3480156106ad57600080fd5b506102bb6106bc366004611d1e565b611289565b3480156106cd57600080fd5b506102bb6106dc366004611cc9565b6112c1565b3480156106ed57600080fd5b506103a07f000000000000000000000000000000000000000000000000000000000000000081565b34801561072157600080fd5b506102ce60095481565b60606000805461073a90611de8565b80601f016020809104026020016040519081016040528092919081815260200182805461076690611de8565b80156107b35780601f10610788576101008083540402835291602001916107b3565b820191906000526020600020905b81548152906001019060200180831161079657829003601f168201915b5050505050905090565b3360008181526012602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b600e546001600160a01b031633146108595760405162461bcd60e51b815260040161085090611e22565b60405180910390fd5b600c55565b6000826001600160a01b03811661087457600080fd5b6001600160a01b03851660009081526012602090815260408083203384529091529020548311156108f15760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b6064820152608401610850565b6001600160a01b0385166000908152601260209081526040808320338452909152902054610920908490611e5e565b6001600160a01b038616600090815260126020908152604080832033845290915290205561094f85858561153b565b506001949350505050565b3360009081526012602090815260408083206001600160a01b0386168452909152812054610989908390611e71565b3360008181526012602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610814565b600e546001600160a01b03163314610a0a5760405162461bcd60e51b815260040161085090611e22565b610a126117dc565b50565b600e546001600160a01b03163314610a3f5760405162461bcd60e51b815260040161085090611e22565b600555565b6000600454600354600f54610a599190611e84565b610a639190611eb1565b905090565b6010546001600160a01b038216600090815260116020526040812054909161082091611eb1565b60025461010090046001600160a01b03163314610abe5760405162461bcd60e51b815260040161085090611ec5565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b600e546001600160a01b03163314610b375760405162461bcd60e51b815260040161085090611e22565b600e54600160a01b900460ff16610b895760405162461bcd60e51b8152602060048201526016602482015275131a5b5a5d1cc8185b1c9958591e481c995b5bdd995960521b6044820152606401610850565b600e805460ff60a01b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60025461010090046001600160a01b03163314610bf05760405162461bcd60e51b815260040161085090611ec5565b600e54600160a81b900460ff1615610c3d5760405162461bcd60e51b815260206004820152601060248201526f131408185b1c9958591e48185919195960821b6044820152606401610850565b600047118015610c5557506000610c5330610a68565b115b610c5e57600080fd5b60006064610c6e6012600a611fcc565b610c7c906301406f40611e84565b610c87906001611e84565b610c919190611eb1565b610c9b9083611e84565b9050600060105460646012600a610cb29190611fcc565b610cc0906301406f40611e84565b610ccb906001611e84565b610cd59190611eb1565b610cdf9190611e84565b905081610ceb30610a68565b1015610d445760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e742062616c616e636520746f206469737472696275604482015261746560f01b6064820152608401610850565b60005b83811015610dc2578160116000878785818110610d6657610d66611fd8565b9050602002016020810190610d7b9190611d1e565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610daa9190611e71565b90915550819050610dba81611fee565b915050610d47565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b5050505050600060105483610e479190611e84565b30600090815260116020526040902054610e619190611e5e565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260116020526040812080549293508392909190610eae908490611e71565b9091555050306000818152601160205260408082208290556010547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316808452919092205490929160008051602061205783398151915291610f189190611eb1565b60405190815260200160405180910390a36040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb907f00000000000000000000000000000000000000000000000000000000000000009083906370a0823190602401602060405180830381865afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190612007565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611026573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104a9190612020565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a6278426110926002546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016020604051808303816000875af11580156110d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fc9190612007565b50600e805460ff60a81b1916600160a81b17905560055461111d9042611e71565b600655600c5461112d9042611e71565b600d555050505050565b60606001805461073a90611de8565b600e546001600160a01b031633146111705760405162461bcd60e51b815260040161085090611e22565b600355565b3360009081526012602090815260408083206001600160a01b03861684529091528120548083106111c9573360009081526012602090815260408083206001600160a01b03881684529091528120556111f8565b6111d38382611e5e565b3360009081526012602090815260408083206001600160a01b03891684529091529020555b3360008181526012602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b03811661127457600080fd5b61127f33858561153b565b5060019392505050565b60025461010090046001600160a01b031633146112b85760405162461bcd60e51b815260040161085090611ec5565b610a128161193f565b600e546001600160a01b031633146112eb5760405162461bcd60e51b815260040161085090611e22565b60065442101561133d5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610850565b600c5461134a9042611e71565b600d5560006113787f0000000000000000000000000000000000000000000000000000000000000000610a68565b905060006127106113898484611e84565b6113939190611eb1565b90508015611492576000601054826113ab9190611e84565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152601160205260408120805492935083929091906113f8908490611e5e565b909155505061dead600090815260116020527f97847ee99463795296047093514439c3127772df3715e628aa85601cf8541716805483929061143b908490611e71565b909155505060405182815261dead906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906000805160206120578339815191529060200160405180910390a3505b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156114f257600080fd5b505af1158015611506573d6000803e3d6000fd5b50506040518492507f1685c550ad58388ebb3da9b30d9eec840c8645b16dc2005eee26e1c189eb2a829150600090a250505050565b600e54600160a01b900460ff16156116b3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614806115be57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15611615576008548111156116155760405162461bcd60e51b815260206004820152601f60248201527f4d6178205472616e73616374696f6e20416d6f756e74204578636565646564006044820152606401610850565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146116b3576009548161165b84610a68565b6116659190611e71565b11156116b35760405162461bcd60e51b815260206004820152601a60248201527f4d61782057616c6c657420416d6f756e742045786365656465640000000000006044820152606401610850565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036117205760075460ff16801561170057506006544210155b1561170f5761170d6117dc565b505b6006544210611720576117206119b9565b6000601054826117309190611e84565b6001600160a01b038516600090815260116020526040902054909150611757908290611e5e565b6001600160a01b038086166000908152601160205260408082209390935590851681522054611787908290611e71565b6001600160a01b0380851660008181526011602052604090209290925560105490861690600080516020612057833981519152906117c59085611eb1565b60405190815260200160405180910390a350505050565b6000804290506000600454600354600f546117f79190611e84565b6118019190611eb1565b9050600554600660008282546118179190611e71565b9091555050600081900361186b57817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f5460405161185991815260200190565b60405180910390a2600f549250505090565b80600f546118799190611e5e565b600f556118886012600a611fcc565b611893906015611e84565b600f5410156118c1576118a86012600a611fcc565b6118b3906015611e84565b600f556007805460ff191690555b600f546118d06012600a611fcc565b6118de906301406f40611e84565b6118ea90600019612042565b6118f690600019611e5e565b6119009190611eb1565b60105561190b611bba565b817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f5460405161185991815260200190565b6001600160a01b03811661195257600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600c546119c69042611e71565b600d5560006119f47f0000000000000000000000000000000000000000000000000000000000000000610a68565b90506000612710600a5483611a099190611e84565b611a139190611eb1565b90508015611b1257600060105482611a2b9190611e84565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260116020526040812080549293508392909190611a78908490611e5e565b909155505061dead600090815260116020527f97847ee99463795296047093514439c3127772df3715e628aa85601cf85417168054839290611abb908490611e71565b909155505060405182815261dead906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906000805160206120578339815191529060200160405180910390a3505b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7257600080fd5b505af1158015611b86573d6000803e3d6000fd5b50506040518492507f1685c550ad58388ebb3da9b30d9eec840c8645b16dc2005eee26e1c189eb2a829150600090a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1a57600080fd5b505af1158015611c2e573d6000803e3d6000fd5b5050505050565b600060208083528351808285015260005b81811015611c6257858101830151858201604001528201611c46565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611c9a57600080fd5b919050565b60008060408385031215611cb257600080fd5b611cbb83611c83565b946020939093013593505050565b600060208284031215611cdb57600080fd5b5035919050565b600080600060608486031215611cf757600080fd5b611d0084611c83565b9250611d0e60208501611c83565b9150604084013590509250925092565b600060208284031215611d3057600080fd5b611d3982611c83565b9392505050565b60008060208385031215611d5357600080fd5b823567ffffffffffffffff80821115611d6b57600080fd5b818501915085601f830112611d7f57600080fd5b813581811115611d8e57600080fd5b8660208260051b8501011115611da357600080fd5b60209290920196919550909350505050565b60008060408385031215611dc857600080fd5b611dd183611c83565b9150611ddf60208401611c83565b90509250929050565b600181811c90821680611dfc57607f821691505b602082108103611e1c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b5361746f736869204f6e6c7960a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561082057610820611e48565b8082018082111561082057610820611e48565b808202811582820484141761082057610820611e48565b634e487b7160e01b600052601260045260246000fd5b600082611ec057611ec0611e9b565b500490565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b600181815b80851115611f23578160001904821115611f0957611f09611e48565b80851615611f1657918102915b93841c9390800290611eed565b509250929050565b600082611f3a57506001610820565b81611f4757506000610820565b8160018114611f5d5760028114611f6757611f83565b6001915050610820565b60ff841115611f7857611f78611e48565b50506001821b610820565b5060208310610133831016604e8410600b8410161715611fa6575081810a610820565b611fb08383611ee8565b8060001904821115611fc457611fc4611e48565b029392505050565b6000611d398383611f2b565b634e487b7160e01b600052603260045260246000fd5b60006001820161200057612000611e48565b5060010190565b60006020828403121561201957600080fd5b5051919050565b60006020828403121561203257600080fd5b81518015158114611d3957600080fd5b60008261205157612051611e9b565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209494a487059a6697ec976fcf72e616b5de646e574d1e386f4452751b82f026e064736f6c63430008130033

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80637dc7278f1161012e578063af8deddb116100ab578063dd62ed3e1161006f578063dd62ed3e1461065b578063f2fde38b146106a1578063f5cae6bd146106c1578063f887ea40146106e1578063f8b45b051461071557600080fd5b8063af8deddb146105d8578063bd334d81146105f9578063c3083bf81461060f578063ce4ef10e14610625578063cf46f24c1461064557600080fd5b80639edba7ba116100f25780639edba7ba1461052a578063a457c2d71461054a578063a58c93821461056a578063a8aa1b3114610584578063a9059cbb146105b857600080fd5b80637dc7278f146104af57806381285a0e146104c55780638a9e98c4146104df5780638da5cb5b146104f257806395d89b411461051557600080fd5b806344b0c73f116101bc57806370a082311161018057806370a0823114610439578063715018a61461045957806374fd41a51461046e578063751039fc146104845780637af2c4221461049957600080fd5b806344b0c73f146103b85780634a62bb65146103cd5780634dd813e6146103ee5780635e7dd5361461040e5780636519b5a91461042357600080fd5b8063213953491161020357806321395349146102f257806323b872dd1461030a578063313ce5671461032a578063395093511461034c5780633fc8cef31461036c57600080fd5b806306fdde0314610240578063095ea7b31461026b5780630ab98a701461029b57806318160ddd146102bd57806318d954ef146102dc575b600080fd5b34801561024c57600080fd5b5061025561072b565b6040516102629190611c35565b60405180910390f35b34801561027757600080fd5b5061028b610286366004611c9f565b6107bd565b6040519015158152602001610262565b3480156102a757600080fd5b506102bb6102b6366004611cc9565b610826565b005b3480156102c957600080fd5b50600f545b604051908152602001610262565b3480156102e857600080fd5b506102ce600c5481565b3480156102fe57600080fd5b5060065442101561028b565b34801561031657600080fd5b5061028b610325366004611ce2565b61085e565b34801561033657600080fd5b5060025460405160ff9091168152602001610262565b34801561035857600080fd5b5061028b610367366004611c9f565b61095a565b34801561037857600080fd5b506103a07f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b039091168152602001610262565b3480156103c457600080fd5b506102bb6109e0565b3480156103d957600080fd5b50600e5461028b90600160a01b900460ff1681565b3480156103fa57600080fd5b506102bb610409366004611cc9565b610a15565b34801561041a57600080fd5b506102ce610a44565b34801561042f57600080fd5b506102ce60035481565b34801561044557600080fd5b506102ce610454366004611d1e565b610a68565b34801561046557600080fd5b506102bb610a8f565b34801561047a57600080fd5b506102ce60045481565b34801561049057600080fd5b506102bb610b0d565b3480156104a557600080fd5b506102ce60065481565b3480156104bb57600080fd5b506102ce600a5481565b3480156104d157600080fd5b5060075461028b9060ff1681565b6102bb6104ed366004611d40565b610bc1565b3480156104fe57600080fd5b5060025461010090046001600160a01b03166103a0565b34801561052157600080fd5b50610255611137565b34801561053657600080fd5b506102bb610545366004611cc9565b611146565b34801561055657600080fd5b5061028b610565366004611c9f565b611175565b34801561057657600080fd5b50600b5461028b9060ff1681565b34801561059057600080fd5b506103a07f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc086381565b3480156105c457600080fd5b5061028b6105d3366004611c9f565b61125e565b3480156105e457600080fd5b50600e5461028b90600160a81b900460ff1681565b34801561060557600080fd5b506102ce60055481565b34801561061b57600080fd5b506102ce600d5481565b34801561063157600080fd5b50600e546103a0906001600160a01b031681565b34801561065157600080fd5b506102ce60085481565b34801561066757600080fd5b506102ce610676366004611db5565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b3480156106ad57600080fd5b506102bb6106bc366004611d1e565b611289565b3480156106cd57600080fd5b506102bb6106dc366004611cc9565b6112c1565b3480156106ed57600080fd5b506103a07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561072157600080fd5b506102ce60095481565b60606000805461073a90611de8565b80601f016020809104026020016040519081016040528092919081815260200182805461076690611de8565b80156107b35780601f10610788576101008083540402835291602001916107b3565b820191906000526020600020905b81548152906001019060200180831161079657829003601f168201915b5050505050905090565b3360008181526012602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b600e546001600160a01b031633146108595760405162461bcd60e51b815260040161085090611e22565b60405180910390fd5b600c55565b6000826001600160a01b03811661087457600080fd5b6001600160a01b03851660009081526012602090815260408083203384529091529020548311156108f15760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b6064820152608401610850565b6001600160a01b0385166000908152601260209081526040808320338452909152902054610920908490611e5e565b6001600160a01b038616600090815260126020908152604080832033845290915290205561094f85858561153b565b506001949350505050565b3360009081526012602090815260408083206001600160a01b0386168452909152812054610989908390611e71565b3360008181526012602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610814565b600e546001600160a01b03163314610a0a5760405162461bcd60e51b815260040161085090611e22565b610a126117dc565b50565b600e546001600160a01b03163314610a3f5760405162461bcd60e51b815260040161085090611e22565b600555565b6000600454600354600f54610a599190611e84565b610a639190611eb1565b905090565b6010546001600160a01b038216600090815260116020526040812054909161082091611eb1565b60025461010090046001600160a01b03163314610abe5760405162461bcd60e51b815260040161085090611ec5565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b600e546001600160a01b03163314610b375760405162461bcd60e51b815260040161085090611e22565b600e54600160a01b900460ff16610b895760405162461bcd60e51b8152602060048201526016602482015275131a5b5a5d1cc8185b1c9958591e481c995b5bdd995960521b6044820152606401610850565b600e805460ff60a01b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60025461010090046001600160a01b03163314610bf05760405162461bcd60e51b815260040161085090611ec5565b600e54600160a81b900460ff1615610c3d5760405162461bcd60e51b815260206004820152601060248201526f131408185b1c9958591e48185919195960821b6044820152606401610850565b600047118015610c5557506000610c5330610a68565b115b610c5e57600080fd5b60006064610c6e6012600a611fcc565b610c7c906301406f40611e84565b610c87906001611e84565b610c919190611eb1565b610c9b9083611e84565b9050600060105460646012600a610cb29190611fcc565b610cc0906301406f40611e84565b610ccb906001611e84565b610cd59190611eb1565b610cdf9190611e84565b905081610ceb30610a68565b1015610d445760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e742062616c616e636520746f206469737472696275604482015261746560f01b6064820152608401610850565b60005b83811015610dc2578160116000878785818110610d6657610d66611fd8565b9050602002016020810190610d7b9190611d1e565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610daa9190611e71565b90915550819050610dba81611fee565b915050610d47565b507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b5050505050600060105483610e479190611e84565b30600090815260116020526040902054610e619190611e5e565b6001600160a01b037f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc086316600090815260116020526040812080549293508392909190610eae908490611e71565b9091555050306000818152601160205260408082208290556010547f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08636001600160a01b0316808452919092205490929160008051602061205783398151915291610f189190611eb1565b60405190815260200160405180910390a36040516370a0823160e01b81523060048201527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03169063a9059cbb907f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08639083906370a0823190602401602060405180830381865afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190612007565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611026573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104a9190612020565b507f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08636001600160a01b0316636a6278426110926002546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016020604051808303816000875af11580156110d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fc9190612007565b50600e805460ff60a81b1916600160a81b17905560055461111d9042611e71565b600655600c5461112d9042611e71565b600d555050505050565b60606001805461073a90611de8565b600e546001600160a01b031633146111705760405162461bcd60e51b815260040161085090611e22565b600355565b3360009081526012602090815260408083206001600160a01b03861684529091528120548083106111c9573360009081526012602090815260408083206001600160a01b03881684529091528120556111f8565b6111d38382611e5e565b3360009081526012602090815260408083206001600160a01b03891684529091529020555b3360008181526012602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b03811661127457600080fd5b61127f33858561153b565b5060019392505050565b60025461010090046001600160a01b031633146112b85760405162461bcd60e51b815260040161085090611ec5565b610a128161193f565b600e546001600160a01b031633146112eb5760405162461bcd60e51b815260040161085090611e22565b60065442101561133d5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610850565b600c5461134a9042611e71565b600d5560006113787f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc0863610a68565b905060006127106113898484611e84565b6113939190611eb1565b90508015611492576000601054826113ab9190611e84565b6001600160a01b037f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc0863166000908152601160205260408120805492935083929091906113f8908490611e5e565b909155505061dead600090815260116020527f97847ee99463795296047093514439c3127772df3715e628aa85601cf8541716805483929061143b908490611e71565b909155505060405182815261dead906001600160a01b037f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc086316906000805160206120578339815191529060200160405180910390a3505b60007f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08639050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156114f257600080fd5b505af1158015611506573d6000803e3d6000fd5b50506040518492507f1685c550ad58388ebb3da9b30d9eec840c8645b16dc2005eee26e1c189eb2a829150600090a250505050565b600e54600160a01b900460ff16156116b3577f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08636001600160a01b0316836001600160a01b031614806115be57507f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08636001600160a01b0316826001600160a01b0316145b15611615576008548111156116155760405162461bcd60e51b815260206004820152601f60248201527f4d6178205472616e73616374696f6e20416d6f756e74204578636565646564006044820152606401610850565b7f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08636001600160a01b0316826001600160a01b0316146116b3576009548161165b84610a68565b6116659190611e71565b11156116b35760405162461bcd60e51b815260206004820152601a60248201527f4d61782057616c6c657420416d6f756e742045786365656465640000000000006044820152606401610850565b7f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08636001600160a01b0316826001600160a01b0316036117205760075460ff16801561170057506006544210155b1561170f5761170d6117dc565b505b6006544210611720576117206119b9565b6000601054826117309190611e84565b6001600160a01b038516600090815260116020526040902054909150611757908290611e5e565b6001600160a01b038086166000908152601160205260408082209390935590851681522054611787908290611e71565b6001600160a01b0380851660008181526011602052604090209290925560105490861690600080516020612057833981519152906117c59085611eb1565b60405190815260200160405180910390a350505050565b6000804290506000600454600354600f546117f79190611e84565b6118019190611eb1565b9050600554600660008282546118179190611e71565b9091555050600081900361186b57817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f5460405161185991815260200190565b60405180910390a2600f549250505090565b80600f546118799190611e5e565b600f556118886012600a611fcc565b611893906015611e84565b600f5410156118c1576118a86012600a611fcc565b6118b3906015611e84565b600f556007805460ff191690555b600f546118d06012600a611fcc565b6118de906301406f40611e84565b6118ea90600019612042565b6118f690600019611e5e565b6119009190611eb1565b60105561190b611bba565b817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f5460405161185991815260200190565b6001600160a01b03811661195257600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600c546119c69042611e71565b600d5560006119f47f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc0863610a68565b90506000612710600a5483611a099190611e84565b611a139190611eb1565b90508015611b1257600060105482611a2b9190611e84565b6001600160a01b037f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc086316600090815260116020526040812080549293508392909190611a78908490611e5e565b909155505061dead600090815260116020527f97847ee99463795296047093514439c3127772df3715e628aa85601cf85417168054839290611abb908490611e71565b909155505060405182815261dead906001600160a01b037f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc086316906000805160206120578339815191529060200160405180910390a3505b60007f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08639050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7257600080fd5b505af1158015611b86573d6000803e3d6000fd5b50506040518492507f1685c550ad58388ebb3da9b30d9eec840c8645b16dc2005eee26e1c189eb2a829150600090a2505050565b60007f000000000000000000000000f15fa298930c08066cacdeb9c44983c975bc08639050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1a57600080fd5b505af1158015611c2e573d6000803e3d6000fd5b5050505050565b600060208083528351808285015260005b81811015611c6257858101830151858201604001528201611c46565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611c9a57600080fd5b919050565b60008060408385031215611cb257600080fd5b611cbb83611c83565b946020939093013593505050565b600060208284031215611cdb57600080fd5b5035919050565b600080600060608486031215611cf757600080fd5b611d0084611c83565b9250611d0e60208501611c83565b9150604084013590509250925092565b600060208284031215611d3057600080fd5b611d3982611c83565b9392505050565b60008060208385031215611d5357600080fd5b823567ffffffffffffffff80821115611d6b57600080fd5b818501915085601f830112611d7f57600080fd5b813581811115611d8e57600080fd5b8660208260051b8501011115611da357600080fd5b60209290920196919550909350505050565b60008060408385031215611dc857600080fd5b611dd183611c83565b9150611ddf60208401611c83565b90509250929050565b600181811c90821680611dfc57607f821691505b602082108103611e1c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b5361746f736869204f6e6c7960a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561082057610820611e48565b8082018082111561082057610820611e48565b808202811582820484141761082057610820611e48565b634e487b7160e01b600052601260045260246000fd5b600082611ec057611ec0611e9b565b500490565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b600181815b80851115611f23578160001904821115611f0957611f09611e48565b80851615611f1657918102915b93841c9390800290611eed565b509250929050565b600082611f3a57506001610820565b81611f4757506000610820565b8160018114611f5d5760028114611f6757611f83565b6001915050610820565b60ff841115611f7857611f78611e48565b50506001821b610820565b5060208310610133831016604e8410600b8410161715611fa6575081810a610820565b611fb08383611ee8565b8060001904821115611fc457611fc4611e48565b029392505050565b6000611d398383611f2b565b634e487b7160e01b600052603260045260246000fd5b60006001820161200057612000611e48565b5060010190565b60006020828403121561201957600080fd5b5051919050565b60006020828403121561203257600080fd5b81518015158114611d3957600080fd5b60008261205157612051611e9b565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209494a487059a6697ec976fcf72e616b5de646e574d1e386f4452751b82f026e064736f6c63430008130033

Deployed Bytecode Sourcemap

4591:10625:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3049:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7931:219;;;;;;;;;;-1:-1:-1;7931:219:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;7931:219:0;1004:187:1;12724:162:0;;;;;;;;;;-1:-1:-1;12724:162:0;;;;;:::i;:::-;;:::i;:::-;;7321:102;;;;;;;;;;-1:-1:-1;7403:12:0;;7321:102;;;1527:25:1;;;1515:2;1500:18;7321:102:0;1381:177:1;5045:41:0;;;;;;;;;;;;;;;;10481:111;;;;;;;;;;-1:-1:-1;10550:15:0;;10569;-1:-1:-1;10550:34:0;10481:111;;8158:404;;;;;;;;;;-1:-1:-1;8158:404:0;;;;;:::i;:::-;;:::i;3235:83::-;;;;;;;;;;-1:-1:-1;3301:9:0;;3235:83;;3301:9;;;;2038:36:1;;2026:2;2011:18;3235:83:0;1896:184:1;10006:301:0;;;;;;;;;;-1:-1:-1;10006:301:0;;;;;:::i;:::-;;:::i;5578:27::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2262:32:1;;;2244:51;;2232:2;2217:18;5578:27:0;2085:216:1;12894:127:0;;;;;;;;;;;;;:::i;5726:33::-;;;;;;;;;;-1:-1:-1;5726:33:0;;;;-1:-1:-1;;;5726:33:0;;;;;;12548:168;;;;;;;;;;-1:-1:-1;12548:168:0;;;;;:::i;:::-;;:::i;10315:158::-;;;;;;;;;;;;;:::i;4645:47::-;;;;;;;;;;;;;;;;7587:131;;;;;;;;;;-1:-1:-1;7587:131:0;;;;;:::i;:::-;;:::i;4080:126::-;;;;;;;;;;;;;:::i;4699:52::-;;;;;;;;;;;;;;;;12157:222;;;;;;;;;;;;;:::i;4814:30::-;;;;;;;;;;;;;;;;4961:37;;;;;;;;;;;;;;;;4851:34;;;;;;;;;;-1:-1:-1;4851:34:0;;;;;;;;13907:1304;;;;;;:::i;:::-;;:::i;3891:79::-;;;;;;;;;;-1:-1:-1;3956:6:0;;;;;-1:-1:-1;;;;;3956:6:0;3891:79;;3140:87;;;;;;;;;;;;;:::i;12387:153::-;;;;;;;;;;-1:-1:-1;12387:153:0;;;;;:::i;:::-;;:::i;9517:481::-;;;;;;;;;;-1:-1:-1;9517:481:0;;;;;:::i;:::-;;:::i;5005:33::-;;;;;;;;;;-1:-1:-1;5005:33:0;;;;;;;;5655:29;;;;;;;;;;;;;;;7726:197;;;;;;;;;;-1:-1:-1;7726:197:0;;;;;:::i;:::-;;:::i;5766:27::-;;;;;;;;;;-1:-1:-1;5766:27:0;;;;-1:-1:-1;;;5766:27:0;;;;;;4760:47;;;;;;;;;;;;;;;;5093:26;;;;;;;;;;;;;;;;5691:22;;;;;;;;;;-1:-1:-1;5691:22:0;;;;-1:-1:-1;;;;;5691:22:0;;;4894:27;;;;;;;;;;;;;;;;7431:148;;;;;;;;;;-1:-1:-1;7431:148:0;;;;;:::i;:::-;-1:-1:-1;;;;;7541:21:0;;;7515:7;7541:21;;;:13;:21;;;;;;;;:30;;;;;;;;;;;;;7431:148;4214:109;;;;;;;;;;-1:-1:-1;4214:109:0;;;;;:::i;:::-;;:::i;13029:870::-;;;;;;;;;;-1:-1:-1;13029:870:0;;;;;:::i;:::-;;:::i;5614:34::-;;;;;;;;;;;;;;;4928:24;;;;;;;;;;;;;;;;3049:83;3086:13;3119:5;3112:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3049:83;:::o;7931:219::-;7294:10;8005:4;8022:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;8022:36:0;;;;;;;;;;;:44;;;8082:38;;1527:25:1;;;8005:4:0;;8022:36;;7294:10;;8082:38;;1500:18:1;8082:38:0;;;;;;;;-1:-1:-1;8138:4:0;7931:219;;;;;:::o;12724:162::-;12816:7;;-1:-1:-1;;;;;12816:7:0;12802:10;:21;12794:46;;;;-1:-1:-1;;;12794:46:0;;;;;;;:::i;:::-;;;;;;;;;12851:16;:27;12724:162::o;8158:404::-;8282:4;8262:9;-1:-1:-1;;;;;6068:18:0;;6060:27;;;;;;-1:-1:-1;;;;;8317:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;7294:10;8317:35;;;;;;;;8307:45;::::1;;8299:91;;;::::0;-1:-1:-1;;;8299:91:0;;4744:2:1;8299:91:0::1;::::0;::::1;4726:21:1::0;4783:2;4763:18;;;4756:30;4822:34;4802:18;;;4795:62;-1:-1:-1;;;4873:18:1;;;4866:31;4914:19;;8299:91:0::1;4542:397:1::0;8299:91:0::1;-1:-1:-1::0;;;;;8439:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;7294:10;8439:35;;;;;;;;:42:::1;::::0;8475:6;;8439:42:::1;:::i;:::-;-1:-1:-1::0;;;;;8401:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;7294:10;8401:35;;;;;;;:80;8492:40:::1;8401:21:::0;8514:9;8525:6;8492:13:::1;:40::i;:::-;-1:-1:-1::0;8550:4:0::1;::::0;8158:404;-1:-1:-1;;;;8158:404:0:o;10006:301::-;7294:10;10088:4;10143:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;10143:36:0;;;;;;;;;;:49;;10182:10;;10143:49;:::i;:::-;7294:10;10104:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;10104:36:0;;;;;;;;;;;;:88;;;10208:69;1527:25:1;;;10104:36:0;;10208:69;;1500:18:1;10208:69:0;1381:177:1;12894:127:0;12965:7;;-1:-1:-1;;;;;12965:7:0;12951:10;:21;12943:46;;;;-1:-1:-1;;;12943:46:0;;;;;;;:::i;:::-;13000:13;:11;:13::i;:::-;;12894:127::o;12548:168::-;12643:7;;-1:-1:-1;;;;;12643:7:0;12629:10;:21;12621:46;;;;-1:-1:-1;;;12621:46:0;;;;;;;:::i;:::-;12678:19;:30;12548:168::o;10315:158::-;10381:7;10443:22;;10421:20;;10408:12;;:33;;;;:::i;:::-;10407:58;;;;:::i;:::-;10400:65;;10315:158;:::o;7587:131::-;7696:13;;-1:-1:-1;;;;;7676:18:0;;7649:7;7676:18;;;:13;:18;;;;;;7649:7;;7676:34;;;:::i;4080:126::-;4032:6;;;;;-1:-1:-1;;;;;4032:6:0;4018:10;:20;4010:42;;;;-1:-1:-1;;;4010:42:0;;;;;;;:::i;:::-;4161:6:::1;::::0;4142:26:::1;::::0;4161:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;4161:6:0::1;::::0;4142:26:::1;::::0;;;::::1;4179:6;:19:::0;;-1:-1:-1;;;;;;4179:19:0::1;::::0;;4080:126::o;12157:222::-;12223:7;;-1:-1:-1;;;;;12223:7:0;12209:10;:21;12201:46;;;;-1:-1:-1;;;12201:46:0;;;;;;;:::i;:::-;12266:14;;-1:-1:-1;;;12266:14:0;;;;12258:49;;;;-1:-1:-1;;;12258:49:0;;6308:2:1;12258:49:0;;;6290:21:1;6347:2;6327:18;;;6320:30;-1:-1:-1;;;6366:18:1;;;6359:52;6428:18;;12258:49:0;6106:346:1;12258:49:0;12318:14;:22;;-1:-1:-1;;;;12318:22:0;;;12356:15;;;;12335:5;;12356:15;12157:222::o;13907:1304::-;4032:6;;;;;-1:-1:-1;;;;;4032:6:0;4018:10;:20;4010:42;;;;-1:-1:-1;;;4010:42:0;;;;;;;:::i;:::-;14000:7:::1;::::0;-1:-1:-1;;;14000:7:0;::::1;;;13999:8;13991:37;;;::::0;-1:-1:-1;;;13991:37:0;;6659:2:1;13991:37:0::1;::::0;::::1;6641:21:1::0;6698:2;6678:18;;;6671:30;-1:-1:-1;;;6717:18:1;;;6710:46;6773:18;;13991:37:0::1;6457:340:1::0;13991:37:0::1;14071:1;14047:21;:25;:57;;;;;14103:1;14076:24;14094:4;14076:9;:24::i;:::-;:28;14047:57;14039:66;;;::::0;::::1;;14118:25;14188:3;5234:12;5164:2;5234;:12;:::i;:::-;5221:25;::::0;:10:::1;:25;:::i;:::-;14161:24;::::0;14184:1:::1;14161:24;:::i;:::-;:30;;;;:::i;:::-;14147:45;::::0;:3;:45:::1;:::i;:::-;14118:75;;14204:20;14260:13;;14254:3;5164:2;5234;:12;;;;:::i;:::-;5221:25;::::0;:10:::1;:25;:::i;:::-;14227:24;::::0;14250:1:::1;14227:24;:::i;:::-;:30;;;;:::i;:::-;:46;;;;:::i;:::-;14204:69;;14322:17;14294:24;14312:4;14294:9;:24::i;:::-;:45;;14286:92;;;::::0;-1:-1:-1;;;14286:92:0;;8378:2:1;14286:92:0::1;::::0;::::1;8360:21:1::0;8417:2;8397:18;;;8390:30;8456:34;8436:18;;;8429:62;-1:-1:-1;;;8507:18:1;;;8500:32;8549:19;;14286:92:0::1;8176:398:1::0;14286:92:0::1;14396:9;14391:107;14411:14:::0;;::::1;14391:107;;;14473:12;14447:13;:21;14461:3;;14465:1;14461:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14447:21:0::1;-1:-1:-1::0;;;;;14447:21:0::1;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;14427:3:0;;-1:-1:-1;14427:3:0::1;::::0;::::1;:::i;:::-;;;;14391:107;;;;14510:4;-1:-1:-1::0;;;;;14510:12:0::1;;14530:21;14510:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;14567:14;14637:13;;14617:17;:33;;;;:::i;:::-;14607:4;14585:28;::::0;;;:13:::1;:28;::::0;;;;;:66:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;14677:4:0::1;14663:19;;::::0;;;:13:::1;:19;::::0;;;;:32;;14567:85;;-1:-1:-1;14567:85:0;;14663:19;;;:32:::1;::::0;14567:85;;14663:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;14728:4:0::1;14737:1;14706:28:::0;;;:13:::1;:28;::::0;;;;;:32;;;14806:13:::1;::::0;14778:4:::1;-1:-1:-1::0;;;;;14754:66:0::1;14784:19:::0;;;;;;;;14754:66;;14728:4;-1:-1:-1;;;;;;;;;;;14754:66:0;14784:35:::1;::::0;14806:13;14784:35:::1;:::i;:::-;14754:66;::::0;1527:25:1;;;1515:2;1500:18;14754:66:0::1;;;;;;;14879:46;::::0;-1:-1:-1;;;14879:46:0;;14919:4:::1;14879:46;::::0;::::1;2244:51:1::0;14848:4:0::1;-1:-1:-1::0;;;;;14833:30:0::1;::::0;::::1;::::0;14872:4:::1;::::0;14833:30;;14879:31:::1;::::0;2217:18:1;;14879:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14833:93;::::0;-1:-1:-1;;;;;;14833:93:0::1;::::0;;;;;;-1:-1:-1;;;;;9232:32:1;;;14833:93:0::1;::::0;::::1;9214:51:1::0;9281:18;;;9274:34;9187:18;;14833:93:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14951:4;-1:-1:-1::0;;;;;14939:22:0::1;;14962:7;3956:6:::0;;-1:-1:-1;;;;;3956:6:0;;;;;;3891:79;14962:7:::1;14939:31;::::0;-1:-1:-1;;;;;;14939:31:0::1;::::0;;;;;;-1:-1:-1;;;;;2262:32:1;;;14939:31:0::1;::::0;::::1;2244:51:1::0;2217:18;;14939:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14981:7:0::1;:14:::0;;-1:-1:-1;;;;14981:14:0::1;-1:-1:-1::0;;;14981:14:0::1;::::0;;15044:19:::1;::::0;15026:37:::1;::::0;:15:::1;:37;:::i;:::-;15008:15;:55:::0;15106:16:::1;::::0;15088:34:::1;::::0;:15:::1;:34;:::i;:::-;15074:11;:48:::0;-1:-1:-1;;;;;13907:1304:0:o;3140:87::-;3179:13;3212:7;3205:14;;;;;:::i;12387:153::-;12470:7;;-1:-1:-1;;;;;12470:7:0;12456:10;:21;12448:46;;;;-1:-1:-1;;;12448:46:0;;;;;;;:::i;:::-;12505:20;:27;12387:153::o;9517:481::-;7294:10;9604:4;9639:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9639:36:0;;;;;;;;;;9690:27;;;9686:198;;7294:10;9773:1;9734:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9734:36:0;;;;;;;;;:40;9686:198;;;9846:26;9857:15;9846:8;:26;:::i;:::-;7294:10;9807:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9807:36:0;;;;;;;;;:65;9686:198;7294:10;9931:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9899:69:0;;9931:36;;;;;;;;;;;9899:69;;1527:25:1;;;9899:69:0;;;;7294:10;9899:69;;;;;;;;;;;-1:-1:-1;9986:4:0;;9517:481;-1:-1:-1;;;9517:481:0:o;7726:197::-;7830:4;7810:9;-1:-1:-1;;;;;6068:18:0;;6060:27;;;;;;7847:46:::1;7294:10:::0;7875:9:::1;7886:6;7847:13;:46::i;:::-;-1:-1:-1::0;7911:4:0::1;::::0;7726:197;-1:-1:-1;;;7726:197:0:o;4214:109::-;4032:6;;;;;-1:-1:-1;;;;;4032:6:0;4018:10;:20;4010:42;;;;-1:-1:-1;;;4010:42:0;;;;;;;:::i;:::-;4287:28:::1;4306:8;4287:18;:28::i;13029:870::-:0;13122:7;;-1:-1:-1;;;;;13122:7:0;13108:10;:21;13100:46;;;;-1:-1:-1;;;13100:46:0;;;;;;;:::i;:::-;10550:15;;10569;-1:-1:-1;10550:34:0;13157:59;;;;-1:-1:-1;;;13157:59:0;;9803:2:1;13157:59:0;;;9785:21:1;;;9822:18;;;9815:30;9881:34;9861:18;;;9854:62;9933:18;;13157:59:0;9601:356:1;13157:59:0;13261:16;;13243:34;;:15;:34;:::i;:::-;13229:11;:48;13290:28;13321:15;13331:4;13321:9;:15::i;:::-;13290:46;-1:-1:-1;13349:26:0;13422:5;13378:41;13401:18;13290:46;13378:41;:::i;:::-;:49;;;;:::i;:::-;13349:78;-1:-1:-1;13444:22:0;;13440:324;;13483:30;13537:13;;13516:18;:34;;;;:::i;:::-;-1:-1:-1;;;;;13579:4:0;13565:19;;;;;:13;:19;;;;;:45;;13483:67;;-1:-1:-1;13483:67:0;;13565:19;;;:45;;13483:67;;13565:45;:::i;:::-;;;;-1:-1:-1;;13647:6:0;13625:30;;;;:13;:30;;;:56;;13659:22;;13625:30;:56;;13659:22;;13625:56;:::i;:::-;;;;-1:-1:-1;;13701:51:0;;1527:25:1;;;13724:6:0;;-1:-1:-1;;;;;13710:4:0;13701:51;;-1:-1:-1;;;;;;;;;;;13701:51:0;1515:2:1;1500:18;13701:51:0;;;;;;;13468:296;13440:324;13776:17;13808:4;13776:37;;13824:5;-1:-1:-1;;;;;13824:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13852:39:0;;13872:18;;-1:-1:-1;13852:39:0;;-1:-1:-1;13852:39:0;;;13089:810;;;13029:870;:::o;8570:939::-;8667:14;;-1:-1:-1;;;8667:14:0;;;;8664:337;;;8711:4;-1:-1:-1;;;;;8701:14:0;:6;-1:-1:-1;;;;;8701:14:0;;:35;;;;8732:4;-1:-1:-1;;;;;8719:17:0;:9;-1:-1:-1;;;;;8719:17:0;;8701:35;8697:141;;;8774:12;;8764:6;:22;;8756:66;;;;-1:-1:-1;;;8756:66:0;;10164:2:1;8756:66:0;;;10146:21:1;10203:2;10183:18;;;10176:30;10242:33;10222:18;;;10215:61;10293:18;;8756:66:0;9962:355:1;8756:66:0;8869:4;-1:-1:-1;;;;;8856:17:0;:9;-1:-1:-1;;;;;8856:17:0;;8852:138;;8934:9;;8924:6;8901:20;8911:9;8901;:20::i;:::-;:29;;;;:::i;:::-;:42;;8893:81;;;;-1:-1:-1;;;8893:81:0;;10524:2:1;8893:81:0;;;10506:21:1;10563:2;10543:18;;;10536:30;10602:28;10582:18;;;10575:56;10648:18;;8893:81:0;10322:350:1;8893:81:0;9029:4;-1:-1:-1;;;;;9016:17:0;:9;-1:-1:-1;;;;;9016:17:0;;9013:214;;9052:15;;;;:33;;;;-1:-1:-1;10550:15:0;;10569;-1:-1:-1;10550:34:0;9071:14;9049:85;;;9105:13;:11;:13::i;:::-;;9049:85;10550:15;;10569;-1:-1:-1;9148:68:0;;9187:13;:11;:13::i;:::-;9239:18;9268:13;;9260:6;:22;;;;:::i;:::-;-1:-1:-1;;;;;9319:21:0;;;;;;:13;:21;;;;;;9239:43;;-1:-1:-1;9319:34:0;;9239:43;;9319:34;:::i;:::-;-1:-1:-1;;;;;9295:21:0;;;;;;;:13;:21;;;;;;:58;;;;9391:24;;;;;;;:37;;9417:10;;9391:37;:::i;:::-;-1:-1:-1;;;;;9364:24:0;;;;;;;:13;:24;;;;;:64;;;;9486:13;;9446:55;;;;-1:-1:-1;;;;;;;;;;;9446:55:0;9474:26;;:10;:26;:::i;:::-;9446:55;;1527:25:1;;;1515:2;1500:18;9446:55:0;;;;;;;8653:856;8570:939;;;:::o;10714:715::-;10754:7;10774:12;10789:15;10774:30;;10817:19;10875:22;;10853:20;;10840:12;;:33;;;;:::i;:::-;10839:58;;;;:::i;:::-;10817:80;;10929:19;;10910:15;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;10980:1:0;10965:16;;;10961:119;;11015:4;11003:31;11021:12;;11003:31;;;;1527:25:1;;1515:2;1500:18;;1381:177;11003:31:0;;;;;;;;11056:12;;11049:19;;;;10714:715;:::o;10961:119::-;11122:11;11107:12;;:26;;;;:::i;:::-;11092:12;:41;5404:12;5164:2;5404;:12;:::i;:::-;5399:17;;:2;:17;:::i;:::-;11150:12;;:25;11146:121;;;5404:12;5164:2;5404;:12;:::i;:::-;5399:17;;:2;:17;:::i;:::-;11192:12;:25;11232:15;:23;;-1:-1:-1;;11232:23:0;;;11146:121;11309:12;;5234;5164:2;5234;:12;:::i;:::-;5221:25;;:10;:25;:::i;:::-;5313:40;;-1:-1:-1;;5313:40:0;:::i;:::-;5292:62;;-1:-1:-1;;5292:62:0;:::i;:::-;11295:26;;;;:::i;:::-;11279:13;:42;11334:8;:6;:8::i;:::-;11372:4;11360:31;11378:12;;11360:31;;;;1527:25:1;;1515:2;1500:18;;1381:177;4331:187:0;-1:-1:-1;;;;;4405:22:0;;4397:31;;;;;;4465:6;;4444:38;;-1:-1:-1;;;;;4444:38:0;;;;4465:6;;;;;4444:38;;;;;4493:6;:17;;-1:-1:-1;;;;;4493:17:0;;;;;-1:-1:-1;;;;;;4493:17:0;;;;;;;;;4331:187::o;11437:712::-;11512:16;;11494:34;;:15;:34;:::i;:::-;11480:11;:48;11541:28;11572:15;11582:4;11572:9;:15::i;:::-;11541:46;;11600:26;11672:5;11652:17;;11629:20;:40;;;;:::i;:::-;:48;;;;:::i;:::-;11600:77;-1:-1:-1;11694:22:0;;11690:324;;11733:30;11787:13;;11766:18;:34;;;;:::i;:::-;-1:-1:-1;;;;;11829:4:0;11815:19;;;;;:13;:19;;;;;:45;;11733:67;;-1:-1:-1;11733:67:0;;11815:19;;;:45;;11733:67;;11815:45;:::i;:::-;;;;-1:-1:-1;;11897:6:0;11875:30;;;;:13;:30;;;:56;;11909:22;;11875:30;:56;;11909:22;;11875:56;:::i;:::-;;;;-1:-1:-1;;11951:51:0;;1527:25:1;;;11974:6:0;;-1:-1:-1;;;;;11960:4:0;11951:51;;-1:-1:-1;;;;;;;;;;;11951:51:0;1515:2:1;1500:18;11951:51:0;;;;;;;11718:296;11690:324;12026:17;12058:4;12026:37;;12074:5;-1:-1:-1;;;;;12074:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12102:39:0;;12122:18;;-1:-1:-1;12102:39:0;;-1:-1:-1;12102:39:0;;;11469:680;;;11437:712::o;10600:106::-;10638:17;10670:4;10638:37;;10686:5;-1:-1:-1;;;;;10686:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10627:79;10600:106::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1196:180::-;1255:6;1308:2;1296:9;1287:7;1283:23;1279:32;1276:52;;;1324:1;1321;1314:12;1276:52;-1:-1:-1;1347:23:1;;1196:180;-1:-1:-1;1196:180:1:o;1563:328::-;1640:6;1648;1656;1709:2;1697:9;1688:7;1684:23;1680:32;1677:52;;;1725:1;1722;1715:12;1677:52;1748:29;1767:9;1748:29;:::i;:::-;1738:39;;1796:38;1830:2;1819:9;1815:18;1796:38;:::i;:::-;1786:48;;1881:2;1870:9;1866:18;1853:32;1843:42;;1563:328;;;;;:::o;2306:186::-;2365:6;2418:2;2406:9;2397:7;2393:23;2389:32;2386:52;;;2434:1;2431;2424:12;2386:52;2457:29;2476:9;2457:29;:::i;:::-;2447:39;2306:186;-1:-1:-1;;;2306:186:1:o;2497:615::-;2583:6;2591;2644:2;2632:9;2623:7;2619:23;2615:32;2612:52;;;2660:1;2657;2650:12;2612:52;2700:9;2687:23;2729:18;2770:2;2762:6;2759:14;2756:34;;;2786:1;2783;2776:12;2756:34;2824:6;2813:9;2809:22;2799:32;;2869:7;2862:4;2858:2;2854:13;2850:27;2840:55;;2891:1;2888;2881:12;2840:55;2931:2;2918:16;2957:2;2949:6;2946:14;2943:34;;;2973:1;2970;2963:12;2943:34;3026:7;3021:2;3011:6;3008:1;3004:14;3000:2;2996:23;2992:32;2989:45;2986:65;;;3047:1;3044;3037:12;2986:65;3078:2;3070:11;;;;;3100:6;;-1:-1:-1;2497:615:1;;-1:-1:-1;;;;2497:615:1:o;3325:260::-;3393:6;3401;3454:2;3442:9;3433:7;3429:23;3425:32;3422:52;;;3470:1;3467;3460:12;3422:52;3493:29;3512:9;3493:29;:::i;:::-;3483:39;;3541:38;3575:2;3564:9;3560:18;3541:38;:::i;:::-;3531:48;;3325:260;;;;;:::o;3816:380::-;3895:1;3891:12;;;;3938;;;3959:61;;4013:4;4005:6;4001:17;3991:27;;3959:61;4066:2;4058:6;4055:14;4035:18;4032:38;4029:161;;4112:10;4107:3;4103:20;4100:1;4093:31;4147:4;4144:1;4137:15;4175:4;4172:1;4165:15;4029:161;;3816:380;;;:::o;4201:336::-;4403:2;4385:21;;;4442:2;4422:18;;;4415:30;-1:-1:-1;;;4476:2:1;4461:18;;4454:42;4528:2;4513:18;;4201:336::o;4944:127::-;5005:10;5000:3;4996:20;4993:1;4986:31;5036:4;5033:1;5026:15;5060:4;5057:1;5050:15;5076:128;5143:9;;;5164:11;;;5161:37;;;5178:18;;:::i;5209:125::-;5274:9;;;5295:10;;;5292:36;;;5308:18;;:::i;5339:168::-;5412:9;;;5443;;5460:15;;;5454:22;;5440:37;5430:71;;5481:18;;:::i;5512:127::-;5573:10;5568:3;5564:20;5561:1;5554:31;5604:4;5601:1;5594:15;5628:4;5625:1;5618:15;5644:120;5684:1;5710;5700:35;;5715:18;;:::i;:::-;-1:-1:-1;5749:9:1;;5644:120::o;5769:332::-;5971:2;5953:21;;;6010:1;5990:18;;;5983:29;-1:-1:-1;;;6043:2:1;6028:18;;6021:39;6092:2;6077:18;;5769:332::o;6802:422::-;6891:1;6934:5;6891:1;6948:270;6969:7;6959:8;6956:21;6948:270;;;7028:4;7024:1;7020:6;7016:17;7010:4;7007:27;7004:53;;;7037:18;;:::i;:::-;7087:7;7077:8;7073:22;7070:55;;;7107:16;;;;7070:55;7186:22;;;;7146:15;;;;6948:270;;;6952:3;6802:422;;;;;:::o;7229:806::-;7278:5;7308:8;7298:80;;-1:-1:-1;7349:1:1;7363:5;;7298:80;7397:4;7387:76;;-1:-1:-1;7434:1:1;7448:5;;7387:76;7479:4;7497:1;7492:59;;;;7565:1;7560:130;;;;7472:218;;7492:59;7522:1;7513:10;;7536:5;;;7560:130;7597:3;7587:8;7584:17;7581:43;;;7604:18;;:::i;:::-;-1:-1:-1;;7660:1:1;7646:16;;7675:5;;7472:218;;7774:2;7764:8;7761:16;7755:3;7749:4;7746:13;7742:36;7736:2;7726:8;7723:16;7718:2;7712:4;7709:12;7705:35;7702:77;7699:159;;;-1:-1:-1;7811:19:1;;;7843:5;;7699:159;7890:34;7915:8;7909:4;7890:34;:::i;:::-;7960:6;7956:1;7952:6;7948:19;7939:7;7936:32;7933:58;;;7971:18;;:::i;:::-;8009:20;;7229:806;-1:-1:-1;;;7229:806:1:o;8040:131::-;8100:5;8129:36;8156:8;8150:4;8129:36;:::i;8579:127::-;8640:10;8635:3;8631:20;8628:1;8621:31;8671:4;8668:1;8661:15;8695:4;8692:1;8685:15;8711:135;8750:3;8771:17;;;8768:43;;8791:18;;:::i;:::-;-1:-1:-1;8838:1:1;8827:13;;8711:135::o;8851:184::-;8921:6;8974:2;8962:9;8953:7;8949:23;8945:32;8942:52;;;8990:1;8987;8980:12;8942:52;-1:-1:-1;9013:16:1;;8851:184;-1:-1:-1;8851:184:1:o;9319:277::-;9386:6;9439:2;9427:9;9418:7;9414:23;9410:32;9407:52;;;9455:1;9452;9445:12;9407:52;9487:9;9481:16;9540:5;9533:13;9526:21;9519:5;9516:32;9506:60;;9562:1;9559;9552:12;10677:112;10709:1;10735;10725:35;;10740:18;;:::i;:::-;-1:-1:-1;10774:9:1;;10677:112::o

Swarm Source

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