false
false
0

Contract Address Details

0x085f5ae2695A84a5D146adb43d8c73218821ad17

Contract Name
YieldFlare
Creator
0x1bfb1f–14a2f7 at 0x53e205–8194fa
Balance
0 SGB
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
1 Transfers
Gas Used
Fetching gas used...
Last Balance Update
60336005
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
YieldFlare




Optimization enabled
true
Compiler version
v0.8.9+commit.e5eed63a




Optimization runs
200
EVM Version
default




Verified at
2022-01-04T07:15:14.850270Z

Contract source code

// SPDX-License-Identifier: MIT
pragma solidity =0.8.9;

interface IFRC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool);
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}




/**
   Uniswap's Ownable contract fork (commit 0db76e9):
   remove using Context, add two step ownership verification
   https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol
*/

abstract contract Ownable {
    address internal _owner;
    address internal _newOwner;

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

    constructor (address ownerAddress) {
        require(ownerAddress != address(0), "Ownable: zero address");
        _owner = ownerAddress;
        emit OwnershipTransferred(address(0), ownerAddress);
    }

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

    function newOwner() public view virtual returns (address) {
        return _newOwner;
    }

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address transferOwner) public onlyOwner {
        require(transferOwner != newOwner());
        _newOwner = transferOwner;
    }

    function acceptOwnership() virtual public {
        require(msg.sender == newOwner(), "Ownable: caller is not the new owner");
        emit OwnershipTransferred(_owner, _newOwner);
        _owner = _newOwner;
        _newOwner = address(0);
    }
}




abstract contract YieldFlareStorage is Ownable {
    mapping (address => uint256) internal _balances;
    mapping (address => mapping (address => uint256)) internal _allowances;
    mapping (address => bool) internal _frozen;

    uint256 internal _totalSupply = 110000000 * 1e18;
    string internal _name = "Experimental Finance Token";
    string internal _symbol = "EXFI";
    uint8 internal _decimals = 18;

    uint public minSendInterval;
    uint public maxSendAmount;
    mapping (address => uint) public userLastTransfer;

    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint) public nonces;
    
    event FreezeAccount (address indexed account);
    event UnfreezeAccount (address indexed account);
    event UpdateMinSendInterval(uint indexed previousMinSendInterval, uint indexed newMinSendInterval);
    event UpdateMaxSendAmount(uint indexed previousMaxSendAmount, uint indexed newMaxSendAmount);

    constructor(address _owner) Ownable(_owner) { }
}


interface IFRC20Permit {
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}


contract YieldFlare is YieldFlareStorage, IFRC20, IFRC20Permit {
    address public target;
    
    constructor () YieldFlareStorage (address(0x1)) { }

    function initialize(address receiver) external {
        _balances[receiver] = _totalSupply;
        emit Transfer(address(0), receiver, _totalSupply);
    }

    function DOMAIN_SEPARATOR() public view returns (bytes32) {
        uint chainId;
        assembly {
            chainId := chainid()
        }
        return keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes(_name)),
                keccak256(bytes('1')),
                chainId,
                address(this)
            )
        );
    }

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

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

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

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

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

    function isFrozen(address account) public view returns (bool) {
        return _frozen[account];
    }


    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        uint allowed = _allowances[sender][msg.sender];
        require(allowed >= amount, "EXFI: Transfer amount exceeds allowance");
        if (allowed < type(uint).max) {
            _approve(sender, msg.sender, allowed - amount);
        }        
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue);
        return true;
    }

    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    function burnFrom(address account, uint256 amount) external {
        uint256 currentAllowance = allowance(account, msg.sender);
        require(currentAllowance >= amount, "EXFI: Burn amount exceeds allowance");
        unchecked {
            _approve(account, msg.sender, currentAllowance - amount);
        }
        _burn(account, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "EXFI: Transfer from the zero address");
        require(recipient != address(0), "EXFI: Transfer to the zero address");
        require(!isFrozen(sender), "EXFI: Sender's account is frozen");
        require(!isFrozen(recipient), "EXFI: Recipient's account is frozen");
        require(_balances[sender] >= amount, "EXFI: Transfer exceeds balance");

        if (maxSendAmount > 0) {
            require(amount <= maxSendAmount, "EXFI: Transfer amount exceeds allowed transfer");
        }

        if (minSendInterval > 0) {
            require(userLastTransfer[sender] + minSendInterval >= block.timestamp, "EXFI: Allowed transfer interval hasn't passed yet");
            userLastTransfer[sender] = block.timestamp; //don't update userLastTransfer if  minSendInterval is 0
        }

        unchecked {
            _balances[sender] -= amount;
            _balances[recipient] += amount;
        }
        emit Transfer(sender, recipient, amount);
    }

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "EXFI: Burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(deadline >= block.timestamp, 'EXFI: Expired');
        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                DOMAIN_SEPARATOR(),
                keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress != address(0) && recoveredAddress == owner, 'EXFI: invalid signature');
        _approve(owner, spender, value);
    }

    function freezeAccount(address account) onlyOwner external {
        require(!_frozen[account], "EXFI: Has been frozen");
        _frozen[account] = true;
        emit FreezeAccount(account);
    }

    function unfreezeAccount(address account) onlyOwner external {
        require(_frozen[account], "EXFI: Has been unfrozen");
        _frozen[account] = false;
        emit UnfreezeAccount(account);
    }

    function updateMinSendInterval(uint newMinSendInterval) onlyOwner external { 
        //newMinSendInterval can be zero, no need for checking value
        emit UpdateMinSendInterval(minSendInterval, newMinSendInterval);
        minSendInterval = newMinSendInterval;
    }

    function updateMaxSendAmount(uint newMaxSendAmount) onlyOwner external { 
        //newMaxSendAmount can be zero, no need for checking value
        emit UpdateMinSendInterval(maxSendAmount, newMaxSendAmount);
        maxSendAmount = newMaxSendAmount;
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"FreezeAccount","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"UnfreezeAccount","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"UpdateMaxSendAmount","inputs":[{"type":"uint256","name":"previousMaxSendAmount","internalType":"uint256","indexed":true},{"type":"uint256","name":"newMaxSendAmount","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"event","name":"UpdateMinSendInterval","inputs":[{"type":"uint256","name":"previousMinSendInterval","internalType":"uint256","indexed":true},{"type":"uint256","name":"newMinSendInterval","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_SEPARATOR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PERMIT_TYPEHASH","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"acceptOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burnFrom","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"freezeAccount","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"address","name":"receiver","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isFrozen","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxSendAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minSendInterval","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"newOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nonces","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"permit","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"target","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"transferOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unfreezeAccount","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMaxSendAmount","inputs":[{"type":"uint256","name":"newMaxSendAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMinSendInterval","inputs":[{"type":"uint256","name":"newMinSendInterval","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"userLastTransfer","inputs":[{"type":"address","name":"","internalType":"address"}]}]
              

Contract Creation Code

0x6a5afd67f2dc0e1b2e00000060055560c0604052601a60808190527f4578706572696d656e74616c2046696e616e636520546f6b656e00000000000060a09081526200004f9160069190620000ec565b50604080518082019091526004808252634558464960e01b60209092019182526200007d91600791620000ec565b506008805460ff191660121790553480156200009857600080fd5b50600180600080546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050620001cf565b828054620000fa9062000192565b90600052602060002090601f0160209004810192826200011e576000855562000169565b82601f106200013957805160ff191683800117855562000169565b8280016001018555821562000169579182015b82811115620001695782518255916020019190600101906200014c565b50620001779291506200017b565b5090565b5b808211156200017757600081556001016200017c565b600181811c90821680620001a757607f821691505b60208210811415620001c957634e487b7160e01b600052602260045260246000fd5b50919050565b61183580620001df6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638da5cb5b1161010f578063cbb84f9e116100a2578063dd62ed3e11610071578063dd62ed3e1461043b578063e583983614610474578063f26c159f146104a0578063f2fde38b146104b357600080fd5b8063cbb84f9e146103fb578063d4b8399214610404578063d4ee1d9014610417578063d505accf1461042857600080fd5b8063ac42df76116100de578063ac42df76146103b9578063c2ecec27146103cc578063c4d66de8146103df578063c4deaddb146103f257600080fd5b80638da5cb5b1461036657806395d89b411461038b578063a457c2d714610393578063a9059cbb146103a657600080fd5b80633950935111610187578063788649ea11610156578063788649ea1461031857806379ba50971461032b57806379cc6790146103335780637ecebe001461034657600080fd5b806339509351146102bf57806342966c68146102d257806370a08231146102e7578063715018a61461031057600080fd5b806323b872dd116101c357806323b872dd1461026857806330adf81f1461027b578063313ce567146102a25780633644e515146102b757600080fd5b806302823534146101f557806306fdde0314610228578063095ea7b31461023d57806318160ddd14610260575b600080fd5b6102156102033660046114f7565b600b6020526000908152604090205481565b6040519081526020015b60405180910390f35b6102306104c6565b60405161021f9190611519565b61025061024b36600461156e565b610558565b604051901515815260200161021f565b600554610215565b610250610276366004611598565b61056e565b6102157f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60085460405160ff909116815260200161021f565b61021561062d565b6102506102cd36600461156e565b6106e2565b6102e56102e03660046115d4565b610719565b005b6102156102f53660046114f7565b6001600160a01b031660009081526002602052604090205490565b6102e5610726565b6102e56103263660046114f7565b6107a9565b6102e5610893565b6102e561034136600461156e565b61095d565b6102156103543660046114f7565b600c6020526000908152604090205481565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161021f565b6102306109f9565b6102506103a136600461156e565b610a08565b6102506103b436600461156e565b610a3f565b6102e56103c73660046115d4565b610a4c565b6102e56103da3660046115d4565b610ab9565b6102e56103ed3660046114f7565b610b26565b610215600a5481565b61021560095481565b600d54610373906001600160a01b031681565b6001546001600160a01b0316610373565b6102e56104363660046115ed565b610b7d565b610215610449366004611660565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6102506104823660046114f7565b6001600160a01b031660009081526004602052604090205460ff1690565b6102e56104ae3660046114f7565b610d91565b6102e56104c13660046114f7565b610e77565b6060600680546104d590611693565b80601f016020809104026020016040519081016040528092919081815260200182805461050190611693565b801561054e5780601f106105235761010080835404028352916020019161054e565b820191906000526020600020905b81548152906001019060200180831161053157829003601f168201915b5050505050905090565b6000610565338484610eed565b50600192915050565b600061057b848484611011565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156106045760405162461bcd60e51b815260206004820152602760248201527f455846493a205472616e7366657220616d6f756e74206578636565647320616c6044820152666c6f77616e636560c81b60648201526084015b60405180910390fd5b60001981101561062257610622853361061d86856116e4565b610eed565b506001949350505050565b6000804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600660405161066391906116fb565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c0016040516020818303038152906040528051906020012091505090565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161056591859061061d908690611797565b61072333826113a0565b50565b336107396000546001600160a01b031690565b6001600160a01b03161461075f5760405162461bcd60e51b81526004016105fb906117af565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336107bc6000546001600160a01b031690565b6001600160a01b0316146107e25760405162461bcd60e51b81526004016105fb906117af565b6001600160a01b03811660009081526004602052604090205460ff1661084a5760405162461bcd60e51b815260206004820152601760248201527f455846493a20486173206265656e20756e66726f7a656e00000000000000000060448201526064016105fb565b6001600160a01b038116600081815260046020526040808220805460ff19169055517fb36c802210e79a973937fc6d1d520af9f14270669e8df960bf8ed8e7512735629190a250565b6001546001600160a01b031633146108f95760405162461bcd60e51b8152602060048201526024808201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e6577206f6044820152633bb732b960e11b60648201526084016105fb565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b0382166000908152600360209081526040808320338452909152902054818110156109dd5760405162461bcd60e51b815260206004820152602360248201527f455846493a204275726e20616d6f756e74206578636565647320616c6c6f77616044820152626e636560e81b60648201526084016105fb565b6109ea8333848403610eed565b6109f483836113a0565b505050565b6060600780546104d590611693565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161056591859061061d9086906116e4565b6000610565338484611011565b33610a5f6000546001600160a01b031690565b6001600160a01b031614610a855760405162461bcd60e51b81526004016105fb906117af565b600a546040518291907f89c0e1d56ea446a5ae873c001593689d493fa14faa913f1ad7734311f1cbfef790600090a3600a55565b33610acc6000546001600160a01b031690565b6001600160a01b031614610af25760405162461bcd60e51b81526004016105fb906117af565b6009546040518291907f89c0e1d56ea446a5ae873c001593689d493fa14faa913f1ad7734311f1cbfef790600090a3600955565b6005546001600160a01b038216600081815260026020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350565b42841015610bbd5760405162461bcd60e51b815260206004820152600d60248201526c115611924e88115e1c1a5c9959609a1b60448201526064016105fb565b6000610bc761062d565b6001600160a01b0389166000908152600c6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92909190610c15836117e4565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e00160405160208183030381529060405280519060200120604051602001610c8e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610cf9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d2f5750886001600160a01b0316816001600160a01b0316145b610d7b5760405162461bcd60e51b815260206004820152601760248201527f455846493a20696e76616c6964207369676e617475726500000000000000000060448201526064016105fb565b610d86898989610eed565b505050505050505050565b33610da46000546001600160a01b031690565b6001600160a01b031614610dca5760405162461bcd60e51b81526004016105fb906117af565b6001600160a01b03811660009081526004602052604090205460ff1615610e2b5760405162461bcd60e51b815260206004820152601560248201527422ac23249d102430b9903132b2b710333937bd32b760591b60448201526064016105fb565b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fce0df06b09231a3cc8eb67053f0e84060651d5f6a0f48ae87f7646f120b430c89190a250565b33610e8a6000546001600160a01b031690565b6001600160a01b031614610eb05760405162461bcd60e51b81526004016105fb906117af565b6001546001600160a01b0382811691161415610ecb57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610f4f5760405162461bcd60e51b815260206004820152602360248201527f455846493a20417070726f76652066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016105fb565b6001600160a01b038216610faf5760405162461bcd60e51b815260206004820152602160248201527f455846493a20417070726f766520746f20746865207a65726f206164647265736044820152607360f81b60648201526084016105fb565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166110735760405162461bcd60e51b8152602060048201526024808201527f455846493a205472616e736665722066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105fb565b6001600160a01b0382166110d45760405162461bcd60e51b815260206004820152602260248201527f455846493a205472616e7366657220746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105fb565b6001600160a01b03831660009081526004602052604090205460ff161561113d5760405162461bcd60e51b815260206004820181905260248201527f455846493a2053656e6465722773206163636f756e742069732066726f7a656e60448201526064016105fb565b6001600160a01b03821660009081526004602052604090205460ff16156111b25760405162461bcd60e51b815260206004820152602360248201527f455846493a20526563697069656e742773206163636f756e742069732066726f6044820152623d32b760e91b60648201526084016105fb565b6001600160a01b03831660009081526002602052604090205481111561121a5760405162461bcd60e51b815260206004820152601e60248201527f455846493a205472616e7366657220657863656564732062616c616e6365000060448201526064016105fb565b600a541561128b57600a5481111561128b5760405162461bcd60e51b815260206004820152602e60248201527f455846493a205472616e7366657220616d6f756e74206578636565647320616c60448201526d3637bbb2b2103a3930b739b332b960911b60648201526084016105fb565b6009541561133e576009546001600160a01b0384166000908152600b602052604090205442916112ba91611797565b10156113225760405162461bcd60e51b815260206004820152603160248201527f455846493a20416c6c6f776564207472616e7366657220696e74657276616c206044820152701a185cdb89dd081c185cdcd959081e595d607a1b60648201526084016105fb565b6001600160a01b0383166000908152600b602052604090204290555b6001600160a01b03808416600081815260026020526040808220805486900390559285168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110049085815260200190565b6001600160a01b0382166113f65760405162461bcd60e51b815260206004820181905260248201527f455846493a204275726e2066726f6d20746865207a65726f206164647265737360448201526064016105fb565b6001600160a01b038216600090815260026020526040902054818110156114695760405162461bcd60e51b815260206004820152602160248201527f455846493a204275726e20616d6f756e7420657863656564732062616c616e636044820152606560f81b60648201526084016105fb565b6001600160a01b03831660009081526002602052604081208383039055600580548492906114989084906116e4565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611004565b80356001600160a01b03811681146114f257600080fd5b919050565b60006020828403121561150957600080fd5b611512826114db565b9392505050565b600060208083528351808285015260005b818110156115465785810183015185820160400152820161152a565b81811115611558576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561158157600080fd5b61158a836114db565b946020939093013593505050565b6000806000606084860312156115ad57600080fd5b6115b6846114db565b92506115c4602085016114db565b9150604084013590509250925092565b6000602082840312156115e657600080fd5b5035919050565b600080600080600080600060e0888a03121561160857600080fd5b611611886114db565b965061161f602089016114db565b95506040880135945060608801359350608088013560ff8116811461164357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561167357600080fd5b61167c836114db565b915061168a602084016114db565b90509250929050565b600181811c908216806116a757607f821691505b602082108114156116c857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156116f6576116f66116ce565b500390565b600080835481600182811c91508083168061171757607f831692505b602080841082141561173757634e487b7160e01b86526022600452602486fd5b81801561174b576001811461175c57611789565b60ff19861689528489019650611789565b60008a81526020902060005b868110156117815781548b820152908501908301611768565b505084890196505b509498975050505050505050565b600082198211156117aa576117aa6116ce565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006000198214156117f8576117f86116ce565b506001019056fea2646970667358221220fb0640369c42dd92bc95c1b81dcac96f8f2f4bd3ab9c3a8a9f5126c8cc79e8d164736f6c63430008090033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80638da5cb5b1161010f578063cbb84f9e116100a2578063dd62ed3e11610071578063dd62ed3e1461043b578063e583983614610474578063f26c159f146104a0578063f2fde38b146104b357600080fd5b8063cbb84f9e146103fb578063d4b8399214610404578063d4ee1d9014610417578063d505accf1461042857600080fd5b8063ac42df76116100de578063ac42df76146103b9578063c2ecec27146103cc578063c4d66de8146103df578063c4deaddb146103f257600080fd5b80638da5cb5b1461036657806395d89b411461038b578063a457c2d714610393578063a9059cbb146103a657600080fd5b80633950935111610187578063788649ea11610156578063788649ea1461031857806379ba50971461032b57806379cc6790146103335780637ecebe001461034657600080fd5b806339509351146102bf57806342966c68146102d257806370a08231146102e7578063715018a61461031057600080fd5b806323b872dd116101c357806323b872dd1461026857806330adf81f1461027b578063313ce567146102a25780633644e515146102b757600080fd5b806302823534146101f557806306fdde0314610228578063095ea7b31461023d57806318160ddd14610260575b600080fd5b6102156102033660046114f7565b600b6020526000908152604090205481565b6040519081526020015b60405180910390f35b6102306104c6565b60405161021f9190611519565b61025061024b36600461156e565b610558565b604051901515815260200161021f565b600554610215565b610250610276366004611598565b61056e565b6102157f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60085460405160ff909116815260200161021f565b61021561062d565b6102506102cd36600461156e565b6106e2565b6102e56102e03660046115d4565b610719565b005b6102156102f53660046114f7565b6001600160a01b031660009081526002602052604090205490565b6102e5610726565b6102e56103263660046114f7565b6107a9565b6102e5610893565b6102e561034136600461156e565b61095d565b6102156103543660046114f7565b600c6020526000908152604090205481565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161021f565b6102306109f9565b6102506103a136600461156e565b610a08565b6102506103b436600461156e565b610a3f565b6102e56103c73660046115d4565b610a4c565b6102e56103da3660046115d4565b610ab9565b6102e56103ed3660046114f7565b610b26565b610215600a5481565b61021560095481565b600d54610373906001600160a01b031681565b6001546001600160a01b0316610373565b6102e56104363660046115ed565b610b7d565b610215610449366004611660565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6102506104823660046114f7565b6001600160a01b031660009081526004602052604090205460ff1690565b6102e56104ae3660046114f7565b610d91565b6102e56104c13660046114f7565b610e77565b6060600680546104d590611693565b80601f016020809104026020016040519081016040528092919081815260200182805461050190611693565b801561054e5780601f106105235761010080835404028352916020019161054e565b820191906000526020600020905b81548152906001019060200180831161053157829003601f168201915b5050505050905090565b6000610565338484610eed565b50600192915050565b600061057b848484611011565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156106045760405162461bcd60e51b815260206004820152602760248201527f455846493a205472616e7366657220616d6f756e74206578636565647320616c6044820152666c6f77616e636560c81b60648201526084015b60405180910390fd5b60001981101561062257610622853361061d86856116e4565b610eed565b506001949350505050565b6000804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600660405161066391906116fb565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c0016040516020818303038152906040528051906020012091505090565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161056591859061061d908690611797565b61072333826113a0565b50565b336107396000546001600160a01b031690565b6001600160a01b03161461075f5760405162461bcd60e51b81526004016105fb906117af565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336107bc6000546001600160a01b031690565b6001600160a01b0316146107e25760405162461bcd60e51b81526004016105fb906117af565b6001600160a01b03811660009081526004602052604090205460ff1661084a5760405162461bcd60e51b815260206004820152601760248201527f455846493a20486173206265656e20756e66726f7a656e00000000000000000060448201526064016105fb565b6001600160a01b038116600081815260046020526040808220805460ff19169055517fb36c802210e79a973937fc6d1d520af9f14270669e8df960bf8ed8e7512735629190a250565b6001546001600160a01b031633146108f95760405162461bcd60e51b8152602060048201526024808201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e6577206f6044820152633bb732b960e11b60648201526084016105fb565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b0382166000908152600360209081526040808320338452909152902054818110156109dd5760405162461bcd60e51b815260206004820152602360248201527f455846493a204275726e20616d6f756e74206578636565647320616c6c6f77616044820152626e636560e81b60648201526084016105fb565b6109ea8333848403610eed565b6109f483836113a0565b505050565b6060600780546104d590611693565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161056591859061061d9086906116e4565b6000610565338484611011565b33610a5f6000546001600160a01b031690565b6001600160a01b031614610a855760405162461bcd60e51b81526004016105fb906117af565b600a546040518291907f89c0e1d56ea446a5ae873c001593689d493fa14faa913f1ad7734311f1cbfef790600090a3600a55565b33610acc6000546001600160a01b031690565b6001600160a01b031614610af25760405162461bcd60e51b81526004016105fb906117af565b6009546040518291907f89c0e1d56ea446a5ae873c001593689d493fa14faa913f1ad7734311f1cbfef790600090a3600955565b6005546001600160a01b038216600081815260026020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350565b42841015610bbd5760405162461bcd60e51b815260206004820152600d60248201526c115611924e88115e1c1a5c9959609a1b60448201526064016105fb565b6000610bc761062d565b6001600160a01b0389166000908152600c6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92909190610c15836117e4565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e00160405160208183030381529060405280519060200120604051602001610c8e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610cf9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d2f5750886001600160a01b0316816001600160a01b0316145b610d7b5760405162461bcd60e51b815260206004820152601760248201527f455846493a20696e76616c6964207369676e617475726500000000000000000060448201526064016105fb565b610d86898989610eed565b505050505050505050565b33610da46000546001600160a01b031690565b6001600160a01b031614610dca5760405162461bcd60e51b81526004016105fb906117af565b6001600160a01b03811660009081526004602052604090205460ff1615610e2b5760405162461bcd60e51b815260206004820152601560248201527422ac23249d102430b9903132b2b710333937bd32b760591b60448201526064016105fb565b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fce0df06b09231a3cc8eb67053f0e84060651d5f6a0f48ae87f7646f120b430c89190a250565b33610e8a6000546001600160a01b031690565b6001600160a01b031614610eb05760405162461bcd60e51b81526004016105fb906117af565b6001546001600160a01b0382811691161415610ecb57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610f4f5760405162461bcd60e51b815260206004820152602360248201527f455846493a20417070726f76652066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016105fb565b6001600160a01b038216610faf5760405162461bcd60e51b815260206004820152602160248201527f455846493a20417070726f766520746f20746865207a65726f206164647265736044820152607360f81b60648201526084016105fb565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166110735760405162461bcd60e51b8152602060048201526024808201527f455846493a205472616e736665722066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105fb565b6001600160a01b0382166110d45760405162461bcd60e51b815260206004820152602260248201527f455846493a205472616e7366657220746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105fb565b6001600160a01b03831660009081526004602052604090205460ff161561113d5760405162461bcd60e51b815260206004820181905260248201527f455846493a2053656e6465722773206163636f756e742069732066726f7a656e60448201526064016105fb565b6001600160a01b03821660009081526004602052604090205460ff16156111b25760405162461bcd60e51b815260206004820152602360248201527f455846493a20526563697069656e742773206163636f756e742069732066726f6044820152623d32b760e91b60648201526084016105fb565b6001600160a01b03831660009081526002602052604090205481111561121a5760405162461bcd60e51b815260206004820152601e60248201527f455846493a205472616e7366657220657863656564732062616c616e6365000060448201526064016105fb565b600a541561128b57600a5481111561128b5760405162461bcd60e51b815260206004820152602e60248201527f455846493a205472616e7366657220616d6f756e74206578636565647320616c60448201526d3637bbb2b2103a3930b739b332b960911b60648201526084016105fb565b6009541561133e576009546001600160a01b0384166000908152600b602052604090205442916112ba91611797565b10156113225760405162461bcd60e51b815260206004820152603160248201527f455846493a20416c6c6f776564207472616e7366657220696e74657276616c206044820152701a185cdb89dd081c185cdcd959081e595d607a1b60648201526084016105fb565b6001600160a01b0383166000908152600b602052604090204290555b6001600160a01b03808416600081815260026020526040808220805486900390559285168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110049085815260200190565b6001600160a01b0382166113f65760405162461bcd60e51b815260206004820181905260248201527f455846493a204275726e2066726f6d20746865207a65726f206164647265737360448201526064016105fb565b6001600160a01b038216600090815260026020526040902054818110156114695760405162461bcd60e51b815260206004820152602160248201527f455846493a204275726e20616d6f756e7420657863656564732062616c616e636044820152606560f81b60648201526084016105fb565b6001600160a01b03831660009081526002602052604081208383039055600580548492906114989084906116e4565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611004565b80356001600160a01b03811681146114f257600080fd5b919050565b60006020828403121561150957600080fd5b611512826114db565b9392505050565b600060208083528351808285015260005b818110156115465785810183015185820160400152820161152a565b81811115611558576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561158157600080fd5b61158a836114db565b946020939093013593505050565b6000806000606084860312156115ad57600080fd5b6115b6846114db565b92506115c4602085016114db565b9150604084013590509250925092565b6000602082840312156115e657600080fd5b5035919050565b600080600080600080600060e0888a03121561160857600080fd5b611611886114db565b965061161f602089016114db565b95506040880135945060608801359350608088013560ff8116811461164357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561167357600080fd5b61167c836114db565b915061168a602084016114db565b90509250929050565b600181811c908216806116a757607f821691505b602082108114156116c857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156116f6576116f66116ce565b500390565b600080835481600182811c91508083168061171757607f831692505b602080841082141561173757634e487b7160e01b86526022600452602486fd5b81801561174b576001811461175c57611789565b60ff19861689528489019650611789565b60008a81526020902060005b868110156117815781548b820152908501908301611768565b505084890196505b509498975050505050505050565b600082198211156117aa576117aa6116ce565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006000198214156117f8576117f86116ce565b506001019056fea2646970667358221220fb0640369c42dd92bc95c1b81dcac96f8f2f4bd3ab9c3a8a9f5126c8cc79e8d164736f6c63430008090033