ETH Price: $3,917.36 (+5.62%)

Contract

0x9bD725c8B77bA0A869a567da46B43A9Db8dB4ca4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Age:7D
Amount:Between 1-10k
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

3 Token Transfers found.

Age:7D
Amount:Between 1-10k
Reset Filter

Advanced mode:
Parent Transaction Hash Block
From
To

There are no matching entries

Update your filters to view other transactions

View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Satoshi

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-03
*/

/*
 * 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
*/

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 Satoshi is ERC20Detailed, Ownable {

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

    uint256 public blockRewardInterval = 2 hours;
    uint256 public nextBlockReward;
    bool public autoBlockReward = true;

    uint256 public maxTxnAmount;
    uint256 public maxWallet;

    uint256 public percentForSatoshi = 50;
    bool public satoshiEnabled = true;
    uint256 public satoshiFrequency = 2 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;
    
    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" : "SAT", block.chainid==1 ? "SATS" : "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());

        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 manualBlockReward() external onlyOwner {
        require(shouldReward(), "Not yet time for block reward");
        blockReward();
    }

    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 manualSatoshi() external onlyOwner {
        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 * 3 / 1000));
        uint256 toDistribute = INITIAL_COINS_SUPPLY * 3 / 1000 * _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 4/07/2023 Israel Launches Biggest Air Attack on West Bank in Nearly Two Decades
    }

}

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":[],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","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":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60e0604052633049291260035564174876e800600455611c20600581905560078054600160ff1991821681179092556032600a55600b805490911682179055600c91909155600e805461ffff191690911790553480156200005f57600080fd5b50466001146200008b576040518060400160405280600381526020016214d05560ea1b815250620000ac565b604051806040016040528060078152602001665341544f53484960c81b8152505b46600114620000d7576040518060400160405280600381526020016214d05560ea1b815250620000f5565b604051806040016040528060048152602001635341545360e01b8152505b60126000620001058482620005fa565b506001620001148382620005fa565b506002805460ff929092166001600160a81b0319909216919091176101003302179055506000905046600103620001615750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f7565b46600503620001865750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f7565b46606103620001ab575073d99d1c33f9fc3444f8101754abc46c52416550d1620001f7565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e66696775726564000000000000000000000000604482015260640160405180910390fd5b6001600160a01b03811660a052620002126012600a620007d9565b62000222906301406f40620007ee565b600f55620002336012600a620007d9565b62000243906301406f40620007ee565b62000251906000196200081e565b6200025f9060001962000835565b30600090815260116020526040902055600f54620002806012600a620007d9565b62000290906301406f40620007ee565b6200029e906000196200081e565b620002ac9060001962000835565b620002b891906200084b565b601055600f54606490620002ce906001620007ee565b620002da91906200084b565b600855600f54606490620002f0906001620007ee565b620002fc91906200084b565b60098190555060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000343573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000369919062000862565b6001600160a01b03166080816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e9919062000862565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000439573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045f919062000862565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d3919062000862565b6001600160a01b031660c0523060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200050e8362000526565b60405190815260200160405180910390a3506200088d565b6010546001600160a01b03821660009081526011602052604081205490916200054f916200084b565b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200058057607f821691505b602082108103620005a157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005f557600081815260208120601f850160051c81016020861015620005d05750805b601f850160051c820191505b81811015620005f157828155600101620005dc565b5050505b505050565b81516001600160401b0381111562000616576200061662000555565b6200062e816200062784546200056b565b84620005a7565b602080601f8311600181146200066657600084156200064d5750858301515b600019600386901b1c1916600185901b178555620005f1565b600085815260208120601f198616915b82811015620006975788860151825594840194600190910190840162000676565b5085821015620006b65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200071d578160001904821115620007015762000701620006c6565b808516156200070f57918102915b93841c9390800290620006e1565b509250929050565b60008262000736575060016200054f565b8162000745575060006200054f565b81600181146200075e5760028114620007695762000789565b60019150506200054f565b60ff8411156200077d576200077d620006c6565b50506001821b6200054f565b5060208310610133831016604e8410600b8410161715620007ae575081810a6200054f565b620007ba8383620006dc565b8060001904821115620007d157620007d1620006c6565b029392505050565b6000620007e7838362000725565b9392505050565b80820281158282048414176200054f576200054f620006c6565b634e487b7160e01b600052601260045260246000fd5b60008262000830576200083062000808565b500690565b818103818111156200054f576200054f620006c6565b6000826200085d576200085d62000808565b500490565b6000602082840312156200087557600080fd5b81516001600160a01b0381168114620007e757600080fd5b60805160a05160c051611cb162000926600039600081816104e301528181610ccc01528181610d2c01528181610de201528181610ec001528181611161015281816111c601528181611265015281816112b9015281816113a2015281816113dd0152818161146a0152818161150801526118220152600061061301526000818161032501528181610c260152610db10152611cb16000f3fe6080604052600436106102045760003560e01c80637dc7278f11610118578063af8deddb116100a0578063dd62ed3e1161006f578063dd62ed3e14610586578063e9500015146105cc578063f2fde38b146105e1578063f887ea4014610601578063f8b45b051461063557600080fd5b8063af8deddb14610525578063bd334d8114610544578063c3083bf81461055a578063cf46f24c1461057057600080fd5b806395d89b41116100e757806395d89b4114610482578063a457c2d714610497578063a58c9382146104b7578063a8aa1b31146104d1578063a9059cbb1461050557600080fd5b80637dc7278f1461041c57806381285a0e146104325780638a9e98c41461044c5780638da5cb5b1461045f57600080fd5b80633fc8cef31161019b5780636519b5a91161016a5780636519b5a9146103a557806370a08231146103bb578063715018a6146103db57806374fd41a5146103f05780637af2c4221461040657600080fd5b80633fc8cef31461031357806344b0c73f1461035f5780634a62bb65146103765780635e7dd5361461039057600080fd5b806321395349116101d7578063213953491461029957806323b872dd146102b1578063313ce567146102d157806339509351146102f357600080fd5b806306fdde0314610209578063095ea7b31461023457806318160ddd1461026457806318d954ef14610283575b600080fd5b34801561021557600080fd5b5061021e61064b565b60405161022b9190611899565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611903565b6106dd565b604051901515815260200161022b565b34801561027057600080fd5b50600f545b60405190815260200161022b565b34801561028f57600080fd5b50610275600c5481565b3480156102a557600080fd5b50600654421015610254565b3480156102bd57600080fd5b506102546102cc36600461192d565b610746565b3480156102dd57600080fd5b5060025460405160ff909116815260200161022b565b3480156102ff57600080fd5b5061025461030e366004611903565b610847565b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161022b565b34801561036b57600080fd5b506103746108cd565b005b34801561038257600080fd5b50600e546102549060ff1681565b34801561039c57600080fd5b50610275610959565b3480156103b157600080fd5b5061027560035481565b3480156103c757600080fd5b506102756103d6366004611969565b61097d565b3480156103e757600080fd5b506103746109a4565b3480156103fc57600080fd5b5061027560045481565b34801561041257600080fd5b5061027560065481565b34801561042857600080fd5b50610275600a5481565b34801561043e57600080fd5b506007546102549060ff1681565b61037461045a36600461198b565b610a22565b34801561046b57600080fd5b5060025461010090046001600160a01b0316610347565b34801561048e57600080fd5b5061021e610fa6565b3480156104a357600080fd5b506102546104b2366004611903565b610fb5565b3480156104c357600080fd5b50600b546102549060ff1681565b3480156104dd57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561051157600080fd5b50610254610520366004611903565b61109e565b34801561053157600080fd5b50600e5461025490610100900460ff1681565b34801561055057600080fd5b5061027560055481565b34801561056657600080fd5b50610275600d5481565b34801561057c57600080fd5b5061027560085481565b34801561059257600080fd5b506102756105a1366004611a00565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b3480156105d857600080fd5b506103746110c9565b3480156105ed57600080fd5b506103746105fc366004611969565b61135d565b34801561060d57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561064157600080fd5b5061027560095481565b60606000805461065a90611a33565b80601f016020809104026020016040519081016040528092919081815260200182805461068690611a33565b80156106d35780601f106106a8576101008083540402835291602001916106d3565b820191906000526020600020905b8154815290600101906020018083116106b657829003601f168201915b5050505050905090565b3360008181526012602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b6000826001600160a01b03811661075c57600080fd5b6001600160a01b03851660009081526012602090815260408083203384529091529020548311156107de5760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b60648201526084015b60405180910390fd5b6001600160a01b038516600090815260126020908152604080832033845290915290205461080d908490611a83565b6001600160a01b038616600090815260126020908152604080832033845290915290205561083c858585611395565b506001949350505050565b3360009081526012602090815260408083206001600160a01b0386168452909152812054610876908390611a96565b3360008181526012602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610734565b60025461010090046001600160a01b031633146108fc5760405162461bcd60e51b81526004016107d590611aa9565b60065442101561094e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f74207965742074696d6520666f7220626c6f636b2072657761726400000060448201526064016107d5565b610956611641565b50565b6000600454600354600f5461096e9190611acc565b6109789190611af9565b905090565b6010546001600160a01b038216600090815260116020526040812054909161074091611af9565b60025461010090046001600160a01b031633146109d35760405162461bcd60e51b81526004016107d590611aa9565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b03163314610a515760405162461bcd60e51b81526004016107d590611aa9565b600e54610100900460ff1615610a9c5760405162461bcd60e51b815260206004820152601060248201526f131408185b1c9958591e48185919195960821b60448201526064016107d5565b600047118015610ab457506000610ab23061097d565b115b610abd57600080fd5b60006103e8610ace6012600a611bf1565b610adc906301406f40611acc565b610ae7906003611acc565b610af19190611af9565b610afb9083611acc565b905060006010546103e86012600a610b139190611bf1565b610b21906301406f40611acc565b610b2c906003611acc565b610b369190611af9565b610b409190611acc565b905081610b4c3061097d565b1015610ba55760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e742062616c616e636520746f206469737472696275604482015261746560f01b60648201526084016107d5565b60005b83811015610c23578160116000878785818110610bc757610bc7611bfd565b9050602002016020810190610bdc9190611969565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610c0b9190611a96565b90915550819050610c1b81611c13565b915050610ba8565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b5050505050600060105483610ca89190611acc565b30600090815260116020526040902054610cc29190611a83565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260116020526040812080549293508392909190610d0f908490611a96565b9091555050306000818152601160205260408082208290556010547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031680845291909220549092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610d8b9190611af9565b60405190815260200160405180910390a36040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb907f00000000000000000000000000000000000000000000000000000000000000009083906370a0823190602401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190611c2c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd9190611c45565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a627842610f056002546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016020604051808303816000875af1158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611c2c565b50600e805461ff001916610100179055600554610f8c9042611a96565b600655600c54610f9c9042611a96565b600d555050505050565b60606001805461065a90611a33565b3360009081526012602090815260408083206001600160a01b0386168452909152812054808310611009573360009081526012602090815260408083206001600160a01b0388168452909152812055611038565b6110138382611a83565b3360009081526012602090815260408083206001600160a01b03891684529091529020555b3360008181526012602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b0381166110b457600080fd5b6110bf338585611395565b5060019392505050565b60025461010090046001600160a01b031633146110f85760405162461bcd60e51b81526004016107d590611aa9565b60065442101561114a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e69736860448201526064016107d5565b600c546111579042611a96565b600d5560006111857f000000000000000000000000000000000000000000000000000000000000000061097d565b90506000612710600a548361119a9190611acc565b6111a49190611af9565b905080156112b5576000601054826111bc9190611acc565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260116020526040812080549293508392909190611209908490611a83565b909155505061dead600090815260116020527f97847ee99463795296047093514439c3127772df3715e628aa85601cf8541716805483929061124c908490611a96565b909155505060405182815261dead906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b50506040518492507f1685c550ad58388ebb3da9b30d9eec840c8645b16dc2005eee26e1c189eb2a829150600090a2505050565b60025461010090046001600160a01b0316331461138c5760405162461bcd60e51b81526004016107d590611aa9565b610956816117a4565b600e5460ff1615611506577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148061141157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15611468576008548111156114685760405162461bcd60e51b815260206004820152601f60248201527f4d6178205472616e73616374696f6e20416d6f756e742045786365656465640060448201526064016107d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461150657600954816114ae8461097d565b6114b89190611a96565b11156115065760405162461bcd60e51b815260206004820152601a60248201527f4d61782057616c6c657420416d6f756e7420457863656564656400000000000060448201526064016107d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036115735760075460ff16801561155357506006544210155b1561156257611560611641565b505b60065442106115735761157361114a565b6000601054826115839190611acc565b6001600160a01b0385166000908152601160205260409020549091506115aa908290611a83565b6001600160a01b0380861660009081526011602052604080822093909355908516815220546115da908290611a96565b6001600160a01b03808516600081815260116020526040902092909255601054908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061162a9085611af9565b60405190815260200160405180910390a350505050565b6000804290506000600454600354600f5461165c9190611acc565b6116669190611af9565b90506005546006600082825461167c9190611a96565b909155505060008190036116d057817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f546040516116be91815260200190565b60405180910390a2600f549250505090565b80600f546116de9190611a83565b600f556116ed6012600a611bf1565b6116f8906015611acc565b600f5410156117265761170d6012600a611bf1565b611718906015611acc565b600f556007805460ff191690555b600f546117356012600a611bf1565b611743906301406f40611acc565b61174f90600019611c67565b61175b90600019611a83565b6117659190611af9565b60105561177061181e565b817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f546040516116be91815260200190565b6001600160a01b0381166117b757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561187e57600080fd5b505af1158015611892573d6000803e3d6000fd5b5050505050565b600060208083528351808285015260005b818110156118c6578581018301518582016040015282016118aa565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146118fe57600080fd5b919050565b6000806040838503121561191657600080fd5b61191f836118e7565b946020939093013593505050565b60008060006060848603121561194257600080fd5b61194b846118e7565b9250611959602085016118e7565b9150604084013590509250925092565b60006020828403121561197b57600080fd5b611984826118e7565b9392505050565b6000806020838503121561199e57600080fd5b823567ffffffffffffffff808211156119b657600080fd5b818501915085601f8301126119ca57600080fd5b8135818111156119d957600080fd5b8660208260051b85010111156119ee57600080fd5b60209290920196919550909350505050565b60008060408385031215611a1357600080fd5b611a1c836118e7565b9150611a2a602084016118e7565b90509250929050565b600181811c90821680611a4757607f821691505b602082108103611a6757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561074057610740611a6d565b8082018082111561074057610740611a6d565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b808202811582820484141761074057610740611a6d565b634e487b7160e01b600052601260045260246000fd5b600082611b0857611b08611ae3565b500490565b600181815b80851115611b48578160001904821115611b2e57611b2e611a6d565b80851615611b3b57918102915b93841c9390800290611b12565b509250929050565b600082611b5f57506001610740565b81611b6c57506000610740565b8160018114611b825760028114611b8c57611ba8565b6001915050610740565b60ff841115611b9d57611b9d611a6d565b50506001821b610740565b5060208310610133831016604e8410600b8410161715611bcb575081810a610740565b611bd58383611b0d565b8060001904821115611be957611be9611a6d565b029392505050565b60006119848383611b50565b634e487b7160e01b600052603260045260246000fd5b600060018201611c2557611c25611a6d565b5060010190565b600060208284031215611c3e57600080fd5b5051919050565b600060208284031215611c5757600080fd5b8151801515811461198457600080fd5b600082611c7657611c76611ae3565b50069056fea2646970667358221220f90f7e258f74fc0e76e452eaec74e94b99ddc3fb54f58f9738db819b7b274de764736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102045760003560e01c80637dc7278f11610118578063af8deddb116100a0578063dd62ed3e1161006f578063dd62ed3e14610586578063e9500015146105cc578063f2fde38b146105e1578063f887ea4014610601578063f8b45b051461063557600080fd5b8063af8deddb14610525578063bd334d8114610544578063c3083bf81461055a578063cf46f24c1461057057600080fd5b806395d89b41116100e757806395d89b4114610482578063a457c2d714610497578063a58c9382146104b7578063a8aa1b31146104d1578063a9059cbb1461050557600080fd5b80637dc7278f1461041c57806381285a0e146104325780638a9e98c41461044c5780638da5cb5b1461045f57600080fd5b80633fc8cef31161019b5780636519b5a91161016a5780636519b5a9146103a557806370a08231146103bb578063715018a6146103db57806374fd41a5146103f05780637af2c4221461040657600080fd5b80633fc8cef31461031357806344b0c73f1461035f5780634a62bb65146103765780635e7dd5361461039057600080fd5b806321395349116101d7578063213953491461029957806323b872dd146102b1578063313ce567146102d157806339509351146102f357600080fd5b806306fdde0314610209578063095ea7b31461023457806318160ddd1461026457806318d954ef14610283575b600080fd5b34801561021557600080fd5b5061021e61064b565b60405161022b9190611899565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611903565b6106dd565b604051901515815260200161022b565b34801561027057600080fd5b50600f545b60405190815260200161022b565b34801561028f57600080fd5b50610275600c5481565b3480156102a557600080fd5b50600654421015610254565b3480156102bd57600080fd5b506102546102cc36600461192d565b610746565b3480156102dd57600080fd5b5060025460405160ff909116815260200161022b565b3480156102ff57600080fd5b5061025461030e366004611903565b610847565b34801561031f57600080fd5b506103477f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b03909116815260200161022b565b34801561036b57600080fd5b506103746108cd565b005b34801561038257600080fd5b50600e546102549060ff1681565b34801561039c57600080fd5b50610275610959565b3480156103b157600080fd5b5061027560035481565b3480156103c757600080fd5b506102756103d6366004611969565b61097d565b3480156103e757600080fd5b506103746109a4565b3480156103fc57600080fd5b5061027560045481565b34801561041257600080fd5b5061027560065481565b34801561042857600080fd5b50610275600a5481565b34801561043e57600080fd5b506007546102549060ff1681565b61037461045a36600461198b565b610a22565b34801561046b57600080fd5b5060025461010090046001600160a01b0316610347565b34801561048e57600080fd5b5061021e610fa6565b3480156104a357600080fd5b506102546104b2366004611903565b610fb5565b3480156104c357600080fd5b50600b546102549060ff1681565b3480156104dd57600080fd5b506103477f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd81565b34801561051157600080fd5b50610254610520366004611903565b61109e565b34801561053157600080fd5b50600e5461025490610100900460ff1681565b34801561055057600080fd5b5061027560055481565b34801561056657600080fd5b50610275600d5481565b34801561057c57600080fd5b5061027560085481565b34801561059257600080fd5b506102756105a1366004611a00565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b3480156105d857600080fd5b506103746110c9565b3480156105ed57600080fd5b506103746105fc366004611969565b61135d565b34801561060d57600080fd5b506103477f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561064157600080fd5b5061027560095481565b60606000805461065a90611a33565b80601f016020809104026020016040519081016040528092919081815260200182805461068690611a33565b80156106d35780601f106106a8576101008083540402835291602001916106d3565b820191906000526020600020905b8154815290600101906020018083116106b657829003601f168201915b5050505050905090565b3360008181526012602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b6000826001600160a01b03811661075c57600080fd5b6001600160a01b03851660009081526012602090815260408083203384529091529020548311156107de5760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b60648201526084015b60405180910390fd5b6001600160a01b038516600090815260126020908152604080832033845290915290205461080d908490611a83565b6001600160a01b038616600090815260126020908152604080832033845290915290205561083c858585611395565b506001949350505050565b3360009081526012602090815260408083206001600160a01b0386168452909152812054610876908390611a96565b3360008181526012602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610734565b60025461010090046001600160a01b031633146108fc5760405162461bcd60e51b81526004016107d590611aa9565b60065442101561094e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f74207965742074696d6520666f7220626c6f636b2072657761726400000060448201526064016107d5565b610956611641565b50565b6000600454600354600f5461096e9190611acc565b6109789190611af9565b905090565b6010546001600160a01b038216600090815260116020526040812054909161074091611af9565b60025461010090046001600160a01b031633146109d35760405162461bcd60e51b81526004016107d590611aa9565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b03163314610a515760405162461bcd60e51b81526004016107d590611aa9565b600e54610100900460ff1615610a9c5760405162461bcd60e51b815260206004820152601060248201526f131408185b1c9958591e48185919195960821b60448201526064016107d5565b600047118015610ab457506000610ab23061097d565b115b610abd57600080fd5b60006103e8610ace6012600a611bf1565b610adc906301406f40611acc565b610ae7906003611acc565b610af19190611af9565b610afb9083611acc565b905060006010546103e86012600a610b139190611bf1565b610b21906301406f40611acc565b610b2c906003611acc565b610b369190611af9565b610b409190611acc565b905081610b4c3061097d565b1015610ba55760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e742062616c616e636520746f206469737472696275604482015261746560f01b60648201526084016107d5565b60005b83811015610c23578160116000878785818110610bc757610bc7611bfd565b9050602002016020810190610bdc9190611969565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610c0b9190611a96565b90915550819050610c1b81611c13565b915050610ba8565b507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b5050505050600060105483610ca89190611acc565b30600090815260116020526040902054610cc29190611a83565b6001600160a01b037f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd16600090815260116020526040812080549293508392909190610d0f908490611a96565b9091555050306000818152601160205260408082208290556010547f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b031680845291909220549092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610d8b9190611af9565b60405190815260200160405180910390a36040516370a0823160e01b81523060048201527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03169063a9059cbb907f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd9083906370a0823190602401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190611c2c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd9190611c45565b507f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316636a627842610f056002546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016020604051808303816000875af1158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611c2c565b50600e805461ff001916610100179055600554610f8c9042611a96565b600655600c54610f9c9042611a96565b600d555050505050565b60606001805461065a90611a33565b3360009081526012602090815260408083206001600160a01b0386168452909152812054808310611009573360009081526012602090815260408083206001600160a01b0388168452909152812055611038565b6110138382611a83565b3360009081526012602090815260408083206001600160a01b03891684529091529020555b3360008181526012602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b0381166110b457600080fd5b6110bf338585611395565b5060019392505050565b60025461010090046001600160a01b031633146110f85760405162461bcd60e51b81526004016107d590611aa9565b60065442101561114a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e69736860448201526064016107d5565b600c546111579042611a96565b600d5560006111857f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd61097d565b90506000612710600a548361119a9190611acc565b6111a49190611af9565b905080156112b5576000601054826111bc9190611acc565b6001600160a01b037f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd16600090815260116020526040812080549293508392909190611209908490611a83565b909155505061dead600090815260116020527f97847ee99463795296047093514439c3127772df3715e628aa85601cf8541716805483929061124c908490611a96565b909155505060405182815261dead906001600160a01b037f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b60007f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b50506040518492507f1685c550ad58388ebb3da9b30d9eec840c8645b16dc2005eee26e1c189eb2a829150600090a2505050565b60025461010090046001600160a01b0316331461138c5760405162461bcd60e51b81526004016107d590611aa9565b610956816117a4565b600e5460ff1615611506577f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316836001600160a01b0316148061141157507f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316826001600160a01b0316145b15611468576008548111156114685760405162461bcd60e51b815260206004820152601f60248201527f4d6178205472616e73616374696f6e20416d6f756e742045786365656465640060448201526064016107d5565b7f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316826001600160a01b03161461150657600954816114ae8461097d565b6114b89190611a96565b11156115065760405162461bcd60e51b815260206004820152601a60248201527f4d61782057616c6c657420416d6f756e7420457863656564656400000000000060448201526064016107d5565b7f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316826001600160a01b0316036115735760075460ff16801561155357506006544210155b1561156257611560611641565b505b60065442106115735761157361114a565b6000601054826115839190611acc565b6001600160a01b0385166000908152601160205260409020549091506115aa908290611a83565b6001600160a01b0380861660009081526011602052604080822093909355908516815220546115da908290611a96565b6001600160a01b03808516600081815260116020526040902092909255601054908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061162a9085611af9565b60405190815260200160405180910390a350505050565b6000804290506000600454600354600f5461165c9190611acc565b6116669190611af9565b90506005546006600082825461167c9190611a96565b909155505060008190036116d057817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f546040516116be91815260200190565b60405180910390a2600f549250505090565b80600f546116de9190611a83565b600f556116ed6012600a611bf1565b6116f8906015611acc565b600f5410156117265761170d6012600a611bf1565b611718906015611acc565b600f556007805460ff191690555b600f546117356012600a611bf1565b611743906301406f40611acc565b61174f90600019611c67565b61175b90600019611a83565b6117659190611af9565b60105561177061181e565b817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f546040516116be91815260200190565b6001600160a01b0381166117b757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60007f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561187e57600080fd5b505af1158015611892573d6000803e3d6000fd5b5050505050565b600060208083528351808285015260005b818110156118c6578581018301518582016040015282016118aa565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146118fe57600080fd5b919050565b6000806040838503121561191657600080fd5b61191f836118e7565b946020939093013593505050565b60008060006060848603121561194257600080fd5b61194b846118e7565b9250611959602085016118e7565b9150604084013590509250925092565b60006020828403121561197b57600080fd5b611984826118e7565b9392505050565b6000806020838503121561199e57600080fd5b823567ffffffffffffffff808211156119b657600080fd5b818501915085601f8301126119ca57600080fd5b8135818111156119d957600080fd5b8660208260051b85010111156119ee57600080fd5b60209290920196919550909350505050565b60008060408385031215611a1357600080fd5b611a1c836118e7565b9150611a2a602084016118e7565b90509250929050565b600181811c90821680611a4757607f821691505b602082108103611a6757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561074057610740611a6d565b8082018082111561074057610740611a6d565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b808202811582820484141761074057610740611a6d565b634e487b7160e01b600052601260045260246000fd5b600082611b0857611b08611ae3565b500490565b600181815b80851115611b48578160001904821115611b2e57611b2e611a6d565b80851615611b3b57918102915b93841c9390800290611b12565b509250929050565b600082611b5f57506001610740565b81611b6c57506000610740565b8160018114611b825760028114611b8c57611ba8565b6001915050610740565b60ff841115611b9d57611b9d611a6d565b50506001821b610740565b5060208310610133831016604e8410600b8410161715611bcb575081810a610740565b611bd58383611b0d565b8060001904821115611be957611be9611a6d565b029392505050565b60006119848383611b50565b634e487b7160e01b600052603260045260246000fd5b600060018201611c2557611c25611a6d565b5060010190565b600060208284031215611c3e57600080fd5b5051919050565b600060208284031215611c5757600080fd5b8151801515811461198457600080fd5b600082611c7657611c76611ae3565b50069056fea2646970667358221220f90f7e258f74fc0e76e452eaec74e94b99ddc3fb54f58f9738db819b7b274de764736f6c63430008130033

Deployed Bytecode Sourcemap

4563:9791:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3021:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7829:219;;;;;;;;;;-1:-1:-1;7829:219:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;7829:219:0;1004:187:1;7219:102:0;;;;;;;;;;-1:-1:-1;7301:12:0;;7219:102;;;1342:25:1;;;1330:2;1315:18;7219:102:0;1196:177:1;5012:41:0;;;;;;;;;;;;;;;;10383:111;;;;;;;;;;-1:-1:-1;10452:15:0;;10471;-1:-1:-1;10452:34:0;10383:111;;8056:404;;;;;;;;;;-1:-1:-1;8056:404:0;;;;;:::i;:::-;;:::i;3207:83::-;;;;;;;;;;-1:-1:-1;3273:9:0;;3207:83;;3273:9;;;;1853:36:1;;1841:2;1826:18;3207:83:0;1711:184:1;9908:301:0;;;;;;;;;;-1:-1:-1;9908:301:0;;;;;:::i;:::-;;:::i;5545:27::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2077:32:1;;;2059:51;;2047:2;2032:18;5545:27:0;1900:216:1;11339:147:0;;;;;;;;;;;;;:::i;:::-;;5664:33;;;;;;;;;;-1:-1:-1;5664:33:0;;;;;;;;10217:158;;;;;;;;;;;;;:::i;4615:47::-;;;;;;;;;;;;;;;;7485:131;;;;;;;;;;-1:-1:-1;7485:131:0;;;;;:::i;:::-;;:::i;4052:126::-;;;;;;;;;;;;;:::i;4669:52::-;;;;;;;;;;;;;;;;4781:30;;;;;;;;;;;;;;;;4928:37;;;;;;;;;;;;;;;;4818:34;;;;;;;;;;-1:-1:-1;4818:34:0;;;;;;;;13018:1331;;;;;;:::i;:::-;;:::i;3863:79::-;;;;;;;;;;-1:-1:-1;3928:6:0;;;;;-1:-1:-1;;;;;3928:6:0;3863:79;;3112:87;;;;;;;;;;;;;:::i;9419:481::-;;;;;;;;;;-1:-1:-1;9419:481:0;;;;;:::i;:::-;;:::i;4972:33::-;;;;;;;;;;-1:-1:-1;4972:33:0;;;;;;;;5622:29;;;;;;;;;;;;;;;7624:197;;;;;;;;;;-1:-1:-1;7624:197:0;;;;;:::i;:::-;;:::i;5704:27::-;;;;;;;;;;-1:-1:-1;5704:27:0;;;;;;;;;;;4730:44;;;;;;;;;;;;;;;;5060:26;;;;;;;;;;;;;;;;4861:27;;;;;;;;;;;;;;;;7329:148;;;;;;;;;;-1:-1:-1;7329:148:0;;;;;:::i;:::-;-1:-1:-1;;;;;7439:21:0;;;7413:7;7439:21;;;:13;:21;;;;;;;;:30;;;;;;;;;;;;;7329:148;12214:796;;;;;;;;;;;;;:::i;4186:109::-;;;;;;;;;;-1:-1:-1;4186:109:0;;;;;:::i;:::-;;:::i;5581:34::-;;;;;;;;;;;;;;;4895:24;;;;;;;;;;;;;;;;3021:83;3058:13;3091:5;3084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3021:83;:::o;7829:219::-;7192:10;7903:4;7920:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;7920:36:0;;;;;;;;;;;:44;;;7980:38;;1342:25:1;;;7903:4:0;;7920:36;;7192:10;;7980:38;;1315:18:1;7980:38:0;;;;;;;;-1:-1:-1;8036:4:0;7829:219;;;;;:::o;8056:404::-;8180:4;8160:9;-1:-1:-1;;;;;6006:18:0;;5998:27;;;;;;-1:-1:-1;;;;;8215:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;7192:10;8215:35;;;;;;;;8205:45;::::1;;8197:91;;;::::0;-1:-1:-1;;;8197:91:0;;4218:2:1;8197:91:0::1;::::0;::::1;4200:21:1::0;4257:2;4237:18;;;4230:30;4296:34;4276:18;;;4269:62;-1:-1:-1;;;4347:18:1;;;4340:31;4388:19;;8197:91:0::1;;;;;;;;;-1:-1:-1::0;;;;;8337:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;7192:10;8337:35;;;;;;;;:42:::1;::::0;8373:6;;8337:42:::1;:::i;:::-;-1:-1:-1::0;;;;;8299:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;7192:10;8299:35;;;;;;;:80;8390:40:::1;8299:21:::0;8412:9;8423:6;8390:13:::1;:40::i;:::-;-1:-1:-1::0;8448:4:0::1;::::0;8056:404;-1:-1:-1;;;;8056:404:0:o;9908:301::-;7192:10;9990:4;10045:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;10045:36:0;;;;;;;;;;:49;;10084:10;;10045:49;:::i;:::-;7192:10;10006:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;10006:36:0;;;;;;;;;;;;:88;;;10110:69;1342:25:1;;;10006:36:0;;10110:69;;1315:18:1;10110:69:0;1196:177:1;11339:147:0;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;10452:15;;10471;-1:-1:-1;10452:34:0;11398:56:::1;;;::::0;-1:-1:-1;;;11398:56:0;;5352:2:1;11398:56:0::1;::::0;::::1;5334:21:1::0;5391:2;5371:18;;;5364:30;5430:31;5410:18;;;5403:59;5479:18;;11398:56:0::1;5150:353:1::0;11398:56:0::1;11465:13;:11;:13::i;:::-;;11339:147::o:0;10217:158::-;10283:7;10345:22;;10323:20;;10310:12;;:33;;;;:::i;:::-;10309:58;;;;:::i;:::-;10302:65;;10217:158;:::o;7485:131::-;7594:13;;-1:-1:-1;;;;;7574:18:0;;7547:7;7574:18;;;:13;:18;;;;;;7547:7;;7574:34;;;:::i;4052:126::-;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;4133:6:::1;::::0;4114:26:::1;::::0;4133:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;4133:6:0::1;::::0;4114:26:::1;::::0;;;::::1;4151:6;:19:::0;;-1:-1:-1;;;;;;4151:19:0::1;::::0;;4052:126::o;13018:1331::-;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;13111:7:::1;::::0;::::1;::::0;::::1;;;13110:8;13102:37;;;::::0;-1:-1:-1;;;13102:37:0;;6140:2:1;13102:37:0::1;::::0;::::1;6122:21:1::0;6179:2;6159:18;;;6152:30;-1:-1:-1;;;6198:18:1;;;6191:46;6254:18;;13102:37:0::1;5938:340:1::0;13102:37:0::1;13182:1;13158:21;:25;:57;;;;;13214:1;13187:24;13205:4;13187:9;:24::i;:::-;:28;13158:57;13150:66;;;::::0;::::1;;13229:25;13299:4;5201:12;5131:2;5201;:12;:::i;:::-;5188:25;::::0;:10:::1;:25;:::i;:::-;13272:24;::::0;13295:1:::1;13272:24;:::i;:::-;:31;;;;:::i;:::-;13258:46;::::0;:3;:46:::1;:::i;:::-;13229:76;;13316:20;13373:13;;13366:4;5131:2;5201;:12;;;;:::i;:::-;5188:25;::::0;:10:::1;:25;:::i;:::-;13339:24;::::0;13362:1:::1;13339:24;:::i;:::-;:31;;;;:::i;:::-;:47;;;;:::i;:::-;13316:70;;13435:17;13407:24;13425:4;13407:9;:24::i;:::-;:45;;13399:92;;;::::0;-1:-1:-1;;;13399:92:0;;7859:2:1;13399:92:0::1;::::0;::::1;7841:21:1::0;7898:2;7878:18;;;7871:30;7937:34;7917:18;;;7910:62;-1:-1:-1;;;7988:18:1;;;7981:32;8030:19;;13399:92:0::1;7657:398:1::0;13399:92:0::1;13509:9;13504:107;13524:14:::0;;::::1;13504:107;;;13586:12;13560:13;:21;13574:3;;13578:1;13574:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13560:21:0::1;-1:-1:-1::0;;;;;13560:21:0::1;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;13540:3:0;;-1:-1:-1;13540:3:0::1;::::0;::::1;:::i;:::-;;;;13504:107;;;;13623:4;-1:-1:-1::0;;;;;13623:12:0::1;;13643:21;13623:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;13680:14;13750:13;;13730:17;:33;;;;:::i;:::-;13720:4;13698:28;::::0;;;:13:::1;:28;::::0;;;;;:66:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;13790:4:0::1;13776:19;;::::0;;;:13:::1;:19;::::0;;;;:32;;13680:85;;-1:-1:-1;13680:85:0;;13776:19;;;:32:::1;::::0;13680:85;;13776:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;13841:4:0::1;13850:1;13819:28:::0;;;:13:::1;:28;::::0;;;;;:32;;;13919:13:::1;::::0;13891:4:::1;-1:-1:-1::0;;;;;13867:66:0::1;13897:19:::0;;;;;;;;13867:66;;13841:4;13867:66:::1;::::0;13897:35:::1;::::0;13919:13;13897:35:::1;:::i;:::-;13867:66;::::0;1342:25:1;;;1330:2;1315:18;13867:66:0::1;;;;;;;13992:46;::::0;-1:-1:-1;;;13992:46:0;;14032:4:::1;13992:46;::::0;::::1;2059:51:1::0;13961:4:0::1;-1:-1:-1::0;;;;;13946:30:0::1;::::0;::::1;::::0;13985:4:::1;::::0;13946:30;;13992:31:::1;::::0;2032:18:1;;13992:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13946:93;::::0;-1:-1:-1;;;;;;13946:93:0::1;::::0;;;;;;-1:-1:-1;;;;;8713:32:1;;;13946:93:0::1;::::0;::::1;8695:51:1::0;8762:18;;;8755:34;8668:18;;13946:93:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14064:4;-1:-1:-1::0;;;;;14052:22:0::1;;14075:7;3928:6:::0;;-1:-1:-1;;;;;3928:6:0;;;;;;3863:79;14075:7:::1;14052:31;::::0;-1:-1:-1;;;;;;14052:31:0::1;::::0;;;;;;-1:-1:-1;;;;;2077:32:1;;;14052:31:0::1;::::0;::::1;2059:51:1::0;2032:18;;14052:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14094:7:0::1;:14:::0;;-1:-1:-1;;14094:14:0::1;;;::::0;;14157:19:::1;::::0;14139:37:::1;::::0;:15:::1;:37;:::i;:::-;14121:15;:55:::0;14219:16:::1;::::0;14201:34:::1;::::0;:15:::1;:34;:::i;:::-;14187:11;:48:::0;-1:-1:-1;;;;;13018:1331:0:o;3112:87::-;3151:13;3184:7;3177:14;;;;;:::i;9419:481::-;7192:10;9506:4;9541:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9541:36:0;;;;;;;;;;9592:27;;;9588:198;;7192:10;9675:1;9636:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9636:36:0;;;;;;;;;:40;9588:198;;;9748:26;9759:15;9748:8;:26;:::i;:::-;7192:10;9709:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9709:36:0;;;;;;;;;:65;9588:198;7192:10;9833:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9801:69:0;;9833:36;;;;;;;;;;;9801:69;;1342:25:1;;;9801:69:0;;;;7192:10;9801:69;;;;;;;;;;;-1:-1:-1;9888:4:0;;9419:481;-1:-1:-1;;;9419:481:0:o;7624:197::-;7728:4;7708:9;-1:-1:-1;;;;;6006:18:0;;5998:27;;;;;;7745:46:::1;7192:10:::0;7773:9:::1;7784:6;7745:13;:46::i;:::-;-1:-1:-1::0;7809:4:0::1;::::0;7624:197;-1:-1:-1;;;7624:197:0:o;12214:796::-;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;10452:15;;10471;-1:-1:-1;10452:34:0;12269:59:::1;;;::::0;-1:-1:-1;;;12269:59:0;;9284:2:1;12269:59:0::1;::::0;::::1;9266:21:1::0;;;9303:18;;;9296:30;9362:34;9342:18;;;9335:62;9414:18;;12269:59:0::1;9082:356:1::0;12269:59:0::1;12373:16;::::0;12355:34:::1;::::0;:15:::1;:34;:::i;:::-;12341:11;:48:::0;12402:28:::1;12433:15;12443:4;12433:9;:15::i;:::-;12402:46;;12461:26;12533:5;12513:17;;12490:20;:40;;;;:::i;:::-;:48;;;;:::i;:::-;12461:77:::0;-1:-1:-1;12555:22:0;;12551:324:::1;;12594:30;12648:13;;12627:18;:34;;;;:::i;:::-;-1:-1:-1::0;;;;;12690:4:0::1;12676:19;;::::0;;;:13:::1;:19;::::0;;;;:45;;12594:67;;-1:-1:-1;12594:67:0;;12676:19;;;:45:::1;::::0;12594:67;;12676:45:::1;:::i;:::-;::::0;;;-1:-1:-1;;12758:6:0::1;12736:30;::::0;;;:13:::1;:30;::::0;;:56;;12770:22;;12736:30;:56:::1;::::0;12770:22;;12736:56:::1;:::i;:::-;::::0;;;-1:-1:-1;;12812:51:0::1;::::0;1342:25:1;;;12835:6:0::1;::::0;-1:-1:-1;;;;;12821:4:0::1;12812:51;::::0;::::1;::::0;1330:2:1;1315:18;12812:51:0::1;;;;;;;12579:296;12551:324;12887:17;12919:4;12887:37;;12935:5;-1:-1:-1::0;;;;;12935:10:0::1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;12963:39:0::1;::::0;12983:18;;-1:-1:-1;12963:39:0::1;::::0;-1:-1:-1;12963:39:0;;::::1;12258:752;;;12214:796::o:0;4186:109::-;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;4259:28:::1;4278:8;4259:18;:28::i;8468:939::-:0;8565:14;;;;8562:337;;;8609:4;-1:-1:-1;;;;;8599:14:0;:6;-1:-1:-1;;;;;8599:14:0;;:35;;;;8630:4;-1:-1:-1;;;;;8617:17:0;:9;-1:-1:-1;;;;;8617:17:0;;8599:35;8595:141;;;8672:12;;8662:6;:22;;8654:66;;;;-1:-1:-1;;;8654:66:0;;9645:2:1;8654:66:0;;;9627:21:1;9684:2;9664:18;;;9657:30;9723:33;9703:18;;;9696:61;9774:18;;8654:66:0;9443:355:1;8654:66:0;8767:4;-1:-1:-1;;;;;8754:17:0;:9;-1:-1:-1;;;;;8754:17:0;;8750:138;;8832:9;;8822:6;8799:20;8809:9;8799;:20::i;:::-;:29;;;;:::i;:::-;:42;;8791:81;;;;-1:-1:-1;;;8791:81:0;;10005:2:1;8791:81:0;;;9987:21:1;10044:2;10024:18;;;10017:30;10083:28;10063:18;;;10056:56;10129:18;;8791:81:0;9803:350:1;8791:81:0;8927:4;-1:-1:-1;;;;;8914:17:0;:9;-1:-1:-1;;;;;8914:17:0;;8911:214;;8950:15;;;;:33;;;;-1:-1:-1;10452:15:0;;10471;-1:-1:-1;10452:34:0;8969:14;8947:85;;;9003:13;:11;:13::i;:::-;;8947:85;10452:15;;10471;-1:-1:-1;9046:68:0;;9085:13;:11;:13::i;:::-;9137:18;9166:13;;9158:6;:22;;;;:::i;:::-;-1:-1:-1;;;;;9217:21:0;;;;;;:13;:21;;;;;;9137:43;;-1:-1:-1;9217:34:0;;9137:43;;9217:34;:::i;:::-;-1:-1:-1;;;;;9193:21:0;;;;;;;:13;:21;;;;;;:58;;;;9289:24;;;;;;;:37;;9315:10;;9289:37;:::i;:::-;-1:-1:-1;;;;;9262:24:0;;;;;;;:13;:24;;;;;:64;;;;9384:13;;9344:55;;;;;;9372:26;;:10;:26;:::i;:::-;9344:55;;1342:25:1;;;1330:2;1315:18;9344:55:0;;;;;;;8551:856;8468:939;;;:::o;10616:715::-;10656:7;10676:12;10691:15;10676:30;;10719:19;10777:22;;10755:20;;10742:12;;:33;;;;:::i;:::-;10741:58;;;;:::i;:::-;10719:80;;10831:19;;10812:15;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;10882:1:0;10867:16;;;10863:119;;10917:4;10905:31;10923:12;;10905:31;;;;1342:25:1;;1330:2;1315:18;;1196:177;10905:31:0;;;;;;;;10958:12;;10951:19;;;;10616:715;:::o;10863:119::-;11024:11;11009:12;;:26;;;;:::i;:::-;10994:12;:41;5371:12;5131:2;5371;:12;:::i;:::-;5366:17;;:2;:17;:::i;:::-;11052:12;;:25;11048:121;;;5371:12;5131:2;5371;:12;:::i;:::-;5366:17;;:2;:17;:::i;:::-;11094:12;:25;11134:15;:23;;-1:-1:-1;;11134:23:0;;;11048:121;11211:12;;5201;5131:2;5201;:12;:::i;:::-;5188:25;;:10;:25;:::i;:::-;5280:40;;-1:-1:-1;;5280:40:0;:::i;:::-;5259:62;;-1:-1:-1;;5259:62:0;:::i;:::-;11197:26;;;;:::i;:::-;11181:13;:42;11236:8;:6;:8::i;:::-;11274:4;11262:31;11280:12;;11262:31;;;;1342:25:1;;1330:2;1315:18;;1196:177;4303:187:0;-1:-1:-1;;;;;4377:22:0;;4369:31;;;;;;4437:6;;4416:38;;-1:-1:-1;;;;;4416:38:0;;;;4437:6;;;;;4416:38;;;;;4465:6;:17;;-1:-1:-1;;;;;4465:17:0;;;;;-1:-1:-1;;;;;;4465:17:0;;;;;;;;;4303:187::o;10502:106::-;10540:17;10572:4;10540:37;;10588:5;-1:-1:-1;;;;;10588:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10529:79;10502: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;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;2121:186::-;2180:6;2233:2;2221:9;2212:7;2208:23;2204:32;2201:52;;;2249:1;2246;2239:12;2201:52;2272:29;2291:9;2272:29;:::i;:::-;2262:39;2121:186;-1:-1:-1;;;2121:186:1:o;2312:615::-;2398:6;2406;2459:2;2447:9;2438:7;2434:23;2430:32;2427:52;;;2475:1;2472;2465:12;2427:52;2515:9;2502:23;2544:18;2585:2;2577:6;2574:14;2571:34;;;2601:1;2598;2591:12;2571:34;2639:6;2628:9;2624:22;2614:32;;2684:7;2677:4;2673:2;2669:13;2665:27;2655:55;;2706:1;2703;2696:12;2655:55;2746:2;2733:16;2772:2;2764:6;2761:14;2758:34;;;2788:1;2785;2778:12;2758:34;2841:7;2836:2;2826:6;2823:1;2819:14;2815:2;2811:23;2807:32;2804:45;2801:65;;;2862:1;2859;2852:12;2801:65;2893:2;2885:11;;;;;2915:6;;-1:-1:-1;2312:615:1;;-1:-1:-1;;;;2312:615:1:o;3140:260::-;3208:6;3216;3269:2;3257:9;3248:7;3244:23;3240:32;3237:52;;;3285:1;3282;3275:12;3237:52;3308:29;3327:9;3308:29;:::i;:::-;3298:39;;3356:38;3390:2;3379:9;3375:18;3356:38;:::i;:::-;3346:48;;3140:260;;;;;:::o;3631:380::-;3710:1;3706:12;;;;3753;;;3774:61;;3828:4;3820:6;3816:17;3806:27;;3774:61;3881:2;3873:6;3870:14;3850:18;3847:38;3844:161;;3927:10;3922:3;3918:20;3915:1;3908:31;3962:4;3959:1;3952:15;3990:4;3987:1;3980:15;3844:161;;3631:380;;;:::o;4418:127::-;4479:10;4474:3;4470:20;4467:1;4460:31;4510:4;4507:1;4500:15;4534:4;4531:1;4524:15;4550:128;4617:9;;;4638:11;;;4635:37;;;4652:18;;:::i;4683:125::-;4748:9;;;4769:10;;;4766:36;;;4782:18;;:::i;4813:332::-;5015:2;4997:21;;;5054:1;5034:18;;;5027:29;-1:-1:-1;;;5087:2:1;5072:18;;5065:39;5136:2;5121:18;;4813:332::o;5508:168::-;5581:9;;;5612;;5629:15;;;5623:22;;5609:37;5599:71;;5650:18;;:::i;5681:127::-;5742:10;5737:3;5733:20;5730:1;5723:31;5773:4;5770:1;5763:15;5797:4;5794:1;5787:15;5813:120;5853:1;5879;5869:35;;5884:18;;:::i;:::-;-1:-1:-1;5918:9:1;;5813:120::o;6283:422::-;6372:1;6415:5;6372:1;6429:270;6450:7;6440:8;6437:21;6429:270;;;6509:4;6505:1;6501:6;6497:17;6491:4;6488:27;6485:53;;;6518:18;;:::i;:::-;6568:7;6558:8;6554:22;6551:55;;;6588:16;;;;6551:55;6667:22;;;;6627:15;;;;6429:270;;;6433:3;6283:422;;;;;:::o;6710:806::-;6759:5;6789:8;6779:80;;-1:-1:-1;6830:1:1;6844:5;;6779:80;6878:4;6868:76;;-1:-1:-1;6915:1:1;6929:5;;6868:76;6960:4;6978:1;6973:59;;;;7046:1;7041:130;;;;6953:218;;6973:59;7003:1;6994:10;;7017:5;;;7041:130;7078:3;7068:8;7065:17;7062:43;;;7085:18;;:::i;:::-;-1:-1:-1;;7141:1:1;7127:16;;7156:5;;6953:218;;7255:2;7245:8;7242:16;7236:3;7230:4;7227:13;7223:36;7217:2;7207:8;7204:16;7199:2;7193:4;7190:12;7186:35;7183:77;7180:159;;;-1:-1:-1;7292:19:1;;;7324:5;;7180:159;7371:34;7396:8;7390:4;7371:34;:::i;:::-;7441:6;7437:1;7433:6;7429:19;7420:7;7417:32;7414:58;;;7452:18;;:::i;:::-;7490:20;;6710:806;-1:-1:-1;;;6710:806:1:o;7521:131::-;7581:5;7610:36;7637:8;7631:4;7610:36;:::i;8060:127::-;8121:10;8116:3;8112:20;8109:1;8102:31;8152:4;8149:1;8142:15;8176:4;8173:1;8166:15;8192:135;8231:3;8252:17;;;8249:43;;8272:18;;:::i;:::-;-1:-1:-1;8319:1:1;8308:13;;8192:135::o;8332:184::-;8402:6;8455:2;8443:9;8434:7;8430:23;8426:32;8423:52;;;8471:1;8468;8461:12;8423:52;-1:-1:-1;8494:16:1;;8332:184;-1:-1:-1;8332:184:1:o;8800:277::-;8867:6;8920:2;8908:9;8899:7;8895:23;8891:32;8888:52;;;8936:1;8933;8926:12;8888:52;8968:9;8962:16;9021:5;9014:13;9007:21;9000:5;8997:32;8987:60;;9043:1;9040;9033:12;10158:112;10190:1;10216;10206:35;;10221:18;;:::i;:::-;-1:-1:-1;10255:9:1;;10158:112::o

Swarm Source

ipfs://f90f7e258f74fc0e76e452eaec74e94b99ddc3fb54f58f9738db819b7b274de7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.