ETH Price: $2,476.62 (+0.90%)
 

Overview

Max Total Supply

12,000,000,000 CRDC

Holders

836 ( 0.247%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,559,000 CRDC

Value
$0.00
0x4e21e50b6b94a2990973135ba1e3ad2841a359f4
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

CardioCoin token contract has migrated to 0x4dE2A3775a2E27c19DE33be4B73bEDaF4db48658

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CardioCoin

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 5: CardioCoin.sol
pragma solidity >= 0.5.0;

import "./Ownable.sol";
import "./SafeMath.sol";
import "./ERC20.sol";

contract CardioCoin is ERC20, Ownable {
    using SafeMath for uint256;

    uint public constant UNLOCK_PERIOD = 30 days;
    uint public constant UNLOCK_TIME = 1572566400;    // 11월 1일 0시

    string public constant name = "CardioCoin";
    string public constant symbol = "CRDC";

    uint8 public constant decimals = 18;

    uint256 internal totalSupply_ = 12000000000 * (10 ** uint256(decimals));

    struct balance {
        uint256 available;
        uint256 lockedUp;
    }

    struct lockUp {
        uint256 amount;
        uint unlockTimestamp;
        uint unlockCount;
    }

    struct locker {
        bool isLocker;
        string role;
        uint lockUpPeriod;
        uint unlockCount;
        bool useFixedTime;
    }

    mapping(address => balance) internal _balances;
    mapping(address => lockUp[]) internal _lockUps;
    mapping(address => locker) internal _lockerList;

    event Burn(address indexed burner, uint256 value);
    event AddToLocker(address indexed owner, string role, uint lockUpPeriod, uint unlockCount);
    event TokenLocked(address indexed owner, uint256 amount);
    event TokenUnlocked(address indexed owner, uint256 amount);

    constructor() public Ownable() {
        balance memory b;

        b.available = totalSupply_;
        _balances[msg.sender] = b;
        emit Transfer(address(0), msg.sender, totalSupply_);
    }

    //Getter Functions
    function lockerInfo(address _operator)public view returns(bool isLocker, string memory role, uint lockUpPeriod, uint unlockCount) {
        locker memory l = _lockerList[_operator];
        isLocker = l.isLocker;
        role = l.role;
        lockUpPeriod = l.lockUpPeriod;
        unlockCount = l.unlockCount;
    }

    function balanceInfo(address user) view public returns(uint256 available, uint256 lockedUp) {
        balance memory b = _balances[user];
        available = b.available;
        lockedUp = b.lockedUp;
    }

    function lockUpInfo(address user, uint256 index) view public returns (uint256 amount, uint256 unlockTimestamp, uint256 unlockCount) {
        lockUp memory l = _lockUps[user][index];
        amount = l.amount;
        unlockTimestamp = l.unlockTimestamp;
        unlockCount = l.unlockCount;
    }

    function lockUpLength(address user) view public returns (uint256) {
        lockUp[] memory l = _lockUps[user];
        return l.length;
    }

    // ERC20 Custom
    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }

    function _transfer(address from, address to, uint256 value) internal {
        locker storage l = _lockerList[from];

        this.unlockAll(from);
        require(value <= _balances[from].available);
        require(to != address(0));
        _balances[from].available = _balances[from].available.sub(value);
        if (l.isLocker) {
            if (l.useFixedTime) {
                if (UNLOCK_TIME <= now) {
                    uint elapsedPeriod = (now - UNLOCK_TIME) / UNLOCK_PERIOD + 1;

                    if (elapsedPeriod < l.unlockCount) {
                        uint unlockedAmount = (value / l.unlockCount).mul(elapsedPeriod);

                        _balances[to].available = _balances[to].available.add(unlockedAmount);
                        addLockedUpTokens(to, value.sub(unlockedAmount), UNLOCK_TIME + UNLOCK_PERIOD * elapsedPeriod - now, l.unlockCount - elapsedPeriod);
                    } else {
                        l.isLocker = false;
                        _balances[to].available = _balances[to].available.add(value);
                    }
                } else {
                    addLockedUpTokens(to, value, UNLOCK_TIME - now, l.unlockCount);
                }
            } else {
                addLockedUpTokens(to, value, l.lockUpPeriod, l.unlockCount);
            }
        } else {
            _balances[to].available = _balances[to].available.add(value);
        }
        emit Transfer(from, to, value);
    }

    function balanceOf(address _owner) public view returns (uint256) {
        return _balances[_owner].available.add(_balances[_owner].lockedUp);
    }

    // Burnable
    function burn(uint256 _value) public {
        _burn(msg.sender, _value);
    }

    function _burn(address _who, uint256 _value) internal {
        require(_value <= _balances[_who].available);

        _balances[_who].available = _balances[_who].available.sub(_value);
        totalSupply_ = totalSupply_.sub(_value);
        emit Burn(_who, _value);
        emit Transfer(_who, address(0), _value);
    }

    // Lockup
    function addAddressToLockerList(address _operator, string memory role, uint lockUpPeriod, uint unlockCount, bool useFixedTime)
    public
    onlyOwner {
        locker memory lockerData = _lockerList[_operator];

        require(!lockerData.isLocker);
        require(unlockCount > 0);
        lockerData.isLocker = true;
        lockerData.role = role;
        lockerData.lockUpPeriod = lockUpPeriod;
        lockerData.unlockCount = unlockCount;
        lockerData.useFixedTime = useFixedTime;
        _lockerList[_operator] = lockerData;
        emit AddToLocker(_operator, role, lockUpPeriod, unlockCount);
    }

    function lockedUpBalanceOf(address _owner) public view returns (uint256) {
        lockUp[] memory lockups = _lockUps[_owner];
        balance memory b = _balances[_owner];
        uint256 lockedUpBalance = b.lockedUp;

        for (uint i = 0; i < lockups.length; i++) {
            lockUp memory l = lockups[i];

            uint count = calculateUnlockCount(l.unlockTimestamp, l.unlockCount);
            uint256 unlockedAmount = l.amount.mul(count).div(l.unlockCount);
            lockedUpBalance = lockedUpBalance.sub(unlockedAmount);
        }

        return lockedUpBalance;
    }

    function addLockedUpTokens(address _owner, uint256 amount, uint lockUpPeriod, uint unlockCount)
    internal {
        lockUp[] storage lockups = _lockUps[_owner];
        lockups.length += 1;
        lockUp storage l = lockups[lockups.length - 1];
        l.amount = amount;
        l.unlockTimestamp = now.add(lockUpPeriod);
        l.unlockCount = unlockCount;

        balance storage b = _balances[_owner];
        b.lockedUp = b.lockedUp.add(amount);
        emit TokenLocked(_owner, amount);
    }

    function unlockAll(address _owner) external returns (bool success) {
        balance storage b = _balances[_owner];
        lockUp[] storage lockupList = _lockUps[_owner];
        uint256 unlocked = 0;
        for (uint i = 0; i < lockupList.length; i++){
            uint256 unlocked_i = _unlock(_owner,i);
            unlocked = unlocked.add(unlocked_i);
            //when fullyUnlocked
            if(lockupList[i].unlockCount == 0) {
                //remove
                lockUp storage temp = lockupList[lockupList.length.sub(1)];
                lockupList[i] = temp;
                lockupList.length--;
                i--;
            }
        }
        //add unlocked to available
        b.available = b.available.add(unlocked);
        //sub unlocked from lockedUp
        b.lockedUp = b.lockedUp.sub(unlocked);

        success = true;

        emit TokenUnlocked(_owner, unlocked);
    }

    function _unlock(address _owner, uint256 index) internal returns(uint256 unlocked) {
        lockUp storage l = _lockUps[_owner][index];

        uint count = calculateUnlockCount(l.unlockTimestamp, l.unlockCount);
        if( count == 0 ){
            return 0;
        }
        // if fully unlocked, unlocked amount will match l.amount
        unlocked = l.amount.mul(count).div(l.unlockCount);

        l.unlockTimestamp = l.unlockTimestamp.add(UNLOCK_PERIOD * count);
        l.amount = l.amount.sub(unlocked);
        l.unlockCount = l.unlockCount.sub(count);
    }


    function calculateUnlockCount(uint timestamp, uint unlockCount) view internal returns (uint) {
        if (now < timestamp) {
            return 0;
        }
        uint256 timeCount = (now.sub(timestamp)).div(UNLOCK_PERIOD).add(1);
        if (timeCount > unlockCount){
            return unlockCount;
        }
        else {
            return timeCount;
        }
    }
}

File 2 of 5: ERC20.sol
pragma solidity ^0.5.0;

import "./IERC20.sol";
import "./SafeMath.sol";

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
 * Originally based on code by FirstBlood:
 * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 *
 * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for
 * all accounts just by listening to said events. Note that this isn't required by the specification, and other
 * compliant implementations may not do it.
 */
contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowed;

    uint256 private _totalSupply;

    /**
    * @dev Total number of tokens in existence
    */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
    * @dev Gets the balance of the specified address.
    * @param owner The address to query the balance of.
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address owner) public view returns (uint256) {
        return _balances[owner];
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param owner address The address which owns the funds.
     * @param spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowed[owner][spender];
    }

    /**
    * @dev Transfer token for a specified address
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function transfer(address to, uint256 value) public returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * Beware that changing an allowance with this method brings the risk that someone may use both the old
     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Transfer tokens from one address to another.
     * Note that while this function emits an Approval event, this is not required as per the specification,
     * and other compliant implementations may not emit the event.
     * @param from address The address which you want to send tokens from
     * @param to address The address which you want to transfer to
     * @param value uint256 the amount of tokens to be transferred
     */
    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        emit Approval(from, msg.sender, _allowed[from][msg.sender]);
        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param addedValue The amount of tokens to increase the allowance by.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
    * @dev Transfer token for a specified addresses
    * @param from The address to transfer from.
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function _transfer(address from, address to, uint256 value) internal {
        require(to != address(0));

        _balances[from] = _balances[from].sub(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(from, to, value);
    }

    /**
     * @dev Internal function that mints an amount of the token and assigns it to
     * an account. This encapsulates the modification of balances such that the
     * proper events are emitted.
     * @param account The account that will receive the created tokens.
     * @param value The amount that will be created.
     */
    function _mint(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.add(value);
        _balances[account] = _balances[account].add(value);
        emit Transfer(address(0), account, value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account.
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account, deducting from the sender's allowance for said account. Uses the
     * internal burn function.
     * Emits an Approval event (reflecting the reduced allowance).
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burnFrom(address account, uint256 value) internal {
        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);
        _burn(account, value);
        emit Approval(account, msg.sender, _allowed[account][msg.sender]);
    }
}

File 3 of 5: IERC20.sol
pragma solidity ^0.5.0;

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
    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);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 5: Ownable.sol
pragma solidity ^0.5.0;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address private _owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 5 of 5: SafeMath.sol
pragma solidity ^0.5.0;

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"lockUpLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"index","type":"uint256"}],"name":"lockUpInfo","outputs":[{"name":"amount","type":"uint256"},{"name":"unlockTimestamp","type":"uint256"},{"name":"unlockCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"UNLOCK_PERIOD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"}],"name":"lockerInfo","outputs":[{"name":"isLocker","type":"bool"},{"name":"role","type":"string"},{"name":"lockUpPeriod","type":"uint256"},{"name":"unlockCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"UNLOCK_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"lockedUpBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"},{"name":"role","type":"string"},{"name":"lockUpPeriod","type":"uint256"},{"name":"unlockCount","type":"uint256"},{"name":"useFixedTime","type":"bool"}],"name":"addAddressToLockerList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"balanceInfo","outputs":[{"name":"available","type":"uint256"},{"name":"lockedUp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"unlockAll","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"role","type":"string"},{"indexed":false,"name":"lockUpPeriod","type":"uint256"},{"indexed":false,"name":"unlockCount","type":"uint256"}],"name":"AddToLocker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

6080604052601260ff16600a0a6402cb4178000260045534801561002257600080fd5b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36100e96101ba565b60045481600001818152505080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040518082815260200191505060405180910390a3506101d4565b604051806040016040528060008152602001600081525090565b612d3f80620001e46000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806356219f9e116100de5780638f32d59b11610097578063a9059cbb11610071578063a9059cbb14610900578063c4f3a85314610966578063dd62ed3e146109c2578063f2fde38b14610a3a57610173565b80638f32d59b146107f557806395d89b4114610817578063a457c2d71461089a57610173565b806356219f9e14610597578063647b1142146105ef57806370a08231146106ea578063715018a61461074257806378c7d9791461074c5780638da5cb5b146107ab57610173565b8063259a28cf11610130578063259a28cf146103cd578063313ce567146103eb57806338e3de491461040f57806339509351146104e5578063413198311461054b57806342966c681461056957610173565b806306fdde031461017857806307799f0d146101fb578063095ea7b31461025357806318160ddd146102b95780631d50a60d146102d757806323b872dd14610347575b600080fd5b610180610a7e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101c05780820151818401526020810190506101a5565b50505050905090810190601f1680156101ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023d6004803603602081101561021157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ab7565b6040518082815260200191505060405180910390f35b61029f6004803603604081101561026957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b7a565b604051808215151515815260200191505060405180910390f35b6102c1610ca5565b6040518082815260200191505060405180910390f35b610323600480360360408110156102ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610caf565b60405180848152602001838152602001828152602001935050505060405180910390f35b6103b36004803603606081101561035d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d5c565b604051808215151515815260200191505060405180910390f35b6103d5610f64565b6040518082815260200191505060405180910390f35b6103f3610f6b565b604051808260ff1660ff16815260200191505060405180910390f35b6104516004803603602081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f70565b604051808515151515815260200180602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156104a757808201518184015260208101905061048c565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b610531600480360360408110156104fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110db565b604051808215151515815260200191505060405180910390f35b610553611310565b6040518082815260200191505060405180910390f35b6105956004803603602081101561057f57600080fd5b8101908080359060200190929190505050611318565b005b6105d9600480360360208110156105ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611325565b6040518082815260200191505060405180910390f35b6106e8600480360360a081101561060557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561064257600080fd5b82018360208201111561065457600080fd5b8035906020019184600183028401116401000000008311171561067657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035151590602001909291905050506114f4565b005b61072c6004803603602081101561070057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061181e565b6040518082815260200191505060405180910390f35b61074a6118be565b005b61078e6004803603602081101561076257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611990565b604051808381526020018281526020019250505060405180910390f35b6107b3611a0f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107fd611a39565b604051808215151515815260200191505060405180910390f35b61081f611a91565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085f578082015181840152602081019050610844565b50505050905090810190601f16801561088c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108e6600480360360408110156108b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aca565b604051808215151515815260200191505060405180910390f35b61094c6004803603604081101561091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cff565b604051808215151515815260200191505060405180910390f35b6109a86004803603602081101561097c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d16565b604051808215151515815260200191505060405180910390f35b610a24600480360360408110156109d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f35565b6040518082815260200191505060405180910390f35b610a7c60048036036020811015610a5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fbc565b005b6040518060400160405280600a81526020017f43617264696f436f696e0000000000000000000000000000000000000000000081525081565b60006060600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b6a5783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190610b1a565b5050505090508051915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb557600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600454905090565b6000806000610cbc612b97565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110610d0657fe5b906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509050806000015193508060200151925080604001519150509250925092565b6000610ded82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e78848484611ff9565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b62278d0081565b601281565b60006060600080610f7f612bb8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561107d5780601f106110525761010080835404028352916020019161107d565b820191906000526020600020905b81548152906001019060200180831161106057829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581525050905080600001519450806020015193508060400151925080606001519150509193509193565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561111657600080fd5b6111a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b635dbb758081565b611322338261258b565b50565b60006060600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156113d85783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190611388565b5050505090506113e6612beb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905060008160200151905060008090505b83518110156114e857611466612b97565b84828151811061147257fe5b60200260200101519050600061149082602001518360400151612748565b905060006114c183604001516114b38486600001516127b690919063ffffffff16565b6127f090919063ffffffff16565b90506114d68186611fd990919063ffffffff16565b94505050508080600101915050611455565b50809350505050919050565b6114fc611a39565b61150557600080fd5b61150d612bb8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581525050905080600001511561165457600080fd5b6000831161166157600080fd5b600181600001901515908115158152505084816020018190525083816040018181525050828160600181815250508181608001901515908115158152505080600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101908051906020019061171b929190612c05565b50604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050508573ffffffffffffffffffffffffffffffffffffffff167fa6d9befabd290d7508939bd7443f80373d25f6667021c137fc0d258c24e3cba28686866040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156117da5780820151818401526020810190506117bf565b50505050905090810190601f1680156118075780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2505050505050565b60006118b7600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b9050919050565b6118c6611a39565b6118cf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008061199b612beb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050806000015192508060200151915050915091565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6040518060400160405280600481526020017f435244430000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0557600080fd5b611b9482600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd990919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000611d0c338484611ff9565b6001905092915050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080905060008090505b8280549050811015611e9c576000611dc08783612816565b9050611dd5818461256c90919063ffffffff16565b92506000848381548110611de557fe5b9060005260206000209060030201600201541415611e8e57600084611e1860018780549050611fd990919063ffffffff16565b81548110611e2257fe5b9060005260206000209060030201905080858481548110611e3f57fe5b906000526020600020906003020160008201548160000155600182015481600101556002820154816002015590505084805480919060019003611e829190612c85565b50828060019003935050505b508080600101915050611da8565b50611eb481846000015461256c90919063ffffffff16565b8360000181905550611ed3818460010154611fd990919063ffffffff16565b8360010181905550600193508473ffffffffffffffffffffffffffffffffffffffff167f613edbda9d1e6bda8af8e869a973f88cccf93854a11f351589038de07e1ab4e3826040518082815260200191505060405180910390a2505050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fc4611a39565b611fcd57600080fd5b611fd681612937565b50565b600082821115611fe857600080fd5b600082840390508091505092915050565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090503073ffffffffffffffffffffffffffffffffffffffff1663c4f3a853856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050506040513d60208110156120e557600080fd5b810190808051906020019092919050505050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015482111561214657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218057600080fd5b6121d582600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611fd990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508060000160009054906101000a900460ff1615612465578060040160009054906101000a900460ff161561244b5742635dbb75801161242f576000600162278d00635dbb758042038161226a57fe5b04019050816003015481101561237057600061229c828460030154868161228d57fe5b046127b690919063ffffffff16565b90506122f381600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061236a856123508387611fd990919063ffffffff16565b428562278d0002635dbb7580010385876003015403612a31565b50612429565b60008260000160006101000a81548160ff0219169083151502179055506123e283600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b50612446565b612445838342635dbb7580038460030154612a31565b5b612460565b61245f838383600201548460030154612a31565b5b612501565b6124ba82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b60008082840190508381101561258157600080fd5b8091505092915050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548111156125da57600080fd5b61262f81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611fd990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061268a81600454611fd990919063ffffffff16565b6004819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008242101561275b57600090506127b0565b6000612798600161278a62278d0061277c8842611fd990919063ffffffff16565b6127f090919063ffffffff16565b61256c90919063ffffffff16565b9050828111156127ab57829150506127b0565b809150505b92915050565b6000808314156127c957600090506127ea565b60008284029050828482816127da57fe5b04146127e557600080fd5b809150505b92915050565b60008082116127fe57600080fd5b600082848161280957fe5b0490508091505092915050565b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061286357fe5b90600052602060002090600302019050600061288782600101548360020154612748565b9050600081141561289d57600092505050612931565b6128ca82600201546128bc8385600001546127b690919063ffffffff16565b6127f090919063ffffffff16565b92506128e88162278d0002836001015461256c90919063ffffffff16565b8260010181905550612907838360000154611fd990919063ffffffff16565b8260000181905550612926818360020154611fd990919063ffffffff16565b826002018190555050505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561297157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018181818054905001915081612a8b9190612c85565b50600081600183805490500381548110612aa157fe5b90600052602060002090600302019050848160000181905550612acd844261256c90919063ffffffff16565b81600101819055508281600201819055506000600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b3886826001015461256c90919063ffffffff16565b81600101819055508673ffffffffffffffffffffffffffffffffffffffff167ff9626bca62c59d77fa45a204dc096874ee066a5c5e124aa9ce6c438dbdf7387a876040518082815260200191505060405180910390a250505050505050565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a001604052806000151581526020016060815260200160008152602001600081526020016000151581525090565b604051806040016040528060008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c4657805160ff1916838001178555612c74565b82800160010185558215612c74579182015b82811115612c73578251825591602001919060010190612c58565b5b509050612c819190612cb7565b5090565b815481835581811115612cb257600302816003028360005260206000209182019101612cb19190612cdc565b5b505050565b612cd991905b80821115612cd5576000816000905550600101612cbd565b5090565b90565b612d1091905b80821115612d0c576000808201600090556001820160009055600282016000905550600301612ce2565b5090565b9056fea165627a7a723058205f960d24e1a05c96bb3002c184dfd4669e72c77e77b5c16b34d0cd35ce44748f0029

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c806356219f9e116100de5780638f32d59b11610097578063a9059cbb11610071578063a9059cbb14610900578063c4f3a85314610966578063dd62ed3e146109c2578063f2fde38b14610a3a57610173565b80638f32d59b146107f557806395d89b4114610817578063a457c2d71461089a57610173565b806356219f9e14610597578063647b1142146105ef57806370a08231146106ea578063715018a61461074257806378c7d9791461074c5780638da5cb5b146107ab57610173565b8063259a28cf11610130578063259a28cf146103cd578063313ce567146103eb57806338e3de491461040f57806339509351146104e5578063413198311461054b57806342966c681461056957610173565b806306fdde031461017857806307799f0d146101fb578063095ea7b31461025357806318160ddd146102b95780631d50a60d146102d757806323b872dd14610347575b600080fd5b610180610a7e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101c05780820151818401526020810190506101a5565b50505050905090810190601f1680156101ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023d6004803603602081101561021157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ab7565b6040518082815260200191505060405180910390f35b61029f6004803603604081101561026957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b7a565b604051808215151515815260200191505060405180910390f35b6102c1610ca5565b6040518082815260200191505060405180910390f35b610323600480360360408110156102ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610caf565b60405180848152602001838152602001828152602001935050505060405180910390f35b6103b36004803603606081101561035d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d5c565b604051808215151515815260200191505060405180910390f35b6103d5610f64565b6040518082815260200191505060405180910390f35b6103f3610f6b565b604051808260ff1660ff16815260200191505060405180910390f35b6104516004803603602081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f70565b604051808515151515815260200180602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156104a757808201518184015260208101905061048c565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b610531600480360360408110156104fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110db565b604051808215151515815260200191505060405180910390f35b610553611310565b6040518082815260200191505060405180910390f35b6105956004803603602081101561057f57600080fd5b8101908080359060200190929190505050611318565b005b6105d9600480360360208110156105ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611325565b6040518082815260200191505060405180910390f35b6106e8600480360360a081101561060557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561064257600080fd5b82018360208201111561065457600080fd5b8035906020019184600183028401116401000000008311171561067657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035151590602001909291905050506114f4565b005b61072c6004803603602081101561070057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061181e565b6040518082815260200191505060405180910390f35b61074a6118be565b005b61078e6004803603602081101561076257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611990565b604051808381526020018281526020019250505060405180910390f35b6107b3611a0f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107fd611a39565b604051808215151515815260200191505060405180910390f35b61081f611a91565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085f578082015181840152602081019050610844565b50505050905090810190601f16801561088c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108e6600480360360408110156108b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aca565b604051808215151515815260200191505060405180910390f35b61094c6004803603604081101561091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cff565b604051808215151515815260200191505060405180910390f35b6109a86004803603602081101561097c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d16565b604051808215151515815260200191505060405180910390f35b610a24600480360360408110156109d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f35565b6040518082815260200191505060405180910390f35b610a7c60048036036020811015610a5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fbc565b005b6040518060400160405280600a81526020017f43617264696f436f696e0000000000000000000000000000000000000000000081525081565b60006060600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b6a5783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190610b1a565b5050505090508051915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb557600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600454905090565b6000806000610cbc612b97565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110610d0657fe5b906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509050806000015193508060200151925080604001519150509250925092565b6000610ded82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e78848484611ff9565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b62278d0081565b601281565b60006060600080610f7f612bb8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561107d5780601f106110525761010080835404028352916020019161107d565b820191906000526020600020905b81548152906001019060200180831161106057829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581525050905080600001519450806020015193508060400151925080606001519150509193509193565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561111657600080fd5b6111a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b635dbb758081565b611322338261258b565b50565b60006060600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156113d85783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190611388565b5050505090506113e6612beb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905060008160200151905060008090505b83518110156114e857611466612b97565b84828151811061147257fe5b60200260200101519050600061149082602001518360400151612748565b905060006114c183604001516114b38486600001516127b690919063ffffffff16565b6127f090919063ffffffff16565b90506114d68186611fd990919063ffffffff16565b94505050508080600101915050611455565b50809350505050919050565b6114fc611a39565b61150557600080fd5b61150d612bb8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581525050905080600001511561165457600080fd5b6000831161166157600080fd5b600181600001901515908115158152505084816020018190525083816040018181525050828160600181815250508181608001901515908115158152505080600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101908051906020019061171b929190612c05565b50604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050508573ffffffffffffffffffffffffffffffffffffffff167fa6d9befabd290d7508939bd7443f80373d25f6667021c137fc0d258c24e3cba28686866040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156117da5780820151818401526020810190506117bf565b50505050905090810190601f1680156118075780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2505050505050565b60006118b7600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b9050919050565b6118c6611a39565b6118cf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008061199b612beb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050806000015192508060200151915050915091565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6040518060400160405280600481526020017f435244430000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0557600080fd5b611b9482600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd990919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000611d0c338484611ff9565b6001905092915050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080905060008090505b8280549050811015611e9c576000611dc08783612816565b9050611dd5818461256c90919063ffffffff16565b92506000848381548110611de557fe5b9060005260206000209060030201600201541415611e8e57600084611e1860018780549050611fd990919063ffffffff16565b81548110611e2257fe5b9060005260206000209060030201905080858481548110611e3f57fe5b906000526020600020906003020160008201548160000155600182015481600101556002820154816002015590505084805480919060019003611e829190612c85565b50828060019003935050505b508080600101915050611da8565b50611eb481846000015461256c90919063ffffffff16565b8360000181905550611ed3818460010154611fd990919063ffffffff16565b8360010181905550600193508473ffffffffffffffffffffffffffffffffffffffff167f613edbda9d1e6bda8af8e869a973f88cccf93854a11f351589038de07e1ab4e3826040518082815260200191505060405180910390a2505050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fc4611a39565b611fcd57600080fd5b611fd681612937565b50565b600082821115611fe857600080fd5b600082840390508091505092915050565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090503073ffffffffffffffffffffffffffffffffffffffff1663c4f3a853856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050506040513d60208110156120e557600080fd5b810190808051906020019092919050505050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015482111561214657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218057600080fd5b6121d582600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611fd990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508060000160009054906101000a900460ff1615612465578060040160009054906101000a900460ff161561244b5742635dbb75801161242f576000600162278d00635dbb758042038161226a57fe5b04019050816003015481101561237057600061229c828460030154868161228d57fe5b046127b690919063ffffffff16565b90506122f381600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061236a856123508387611fd990919063ffffffff16565b428562278d0002635dbb7580010385876003015403612a31565b50612429565b60008260000160006101000a81548160ff0219169083151502179055506123e283600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b50612446565b612445838342635dbb7580038460030154612a31565b5b612460565b61245f838383600201548460030154612a31565b5b612501565b6124ba82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b60008082840190508381101561258157600080fd5b8091505092915050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548111156125da57600080fd5b61262f81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611fd990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061268a81600454611fd990919063ffffffff16565b6004819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008242101561275b57600090506127b0565b6000612798600161278a62278d0061277c8842611fd990919063ffffffff16565b6127f090919063ffffffff16565b61256c90919063ffffffff16565b9050828111156127ab57829150506127b0565b809150505b92915050565b6000808314156127c957600090506127ea565b60008284029050828482816127da57fe5b04146127e557600080fd5b809150505b92915050565b60008082116127fe57600080fd5b600082848161280957fe5b0490508091505092915050565b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061286357fe5b90600052602060002090600302019050600061288782600101548360020154612748565b9050600081141561289d57600092505050612931565b6128ca82600201546128bc8385600001546127b690919063ffffffff16565b6127f090919063ffffffff16565b92506128e88162278d0002836001015461256c90919063ffffffff16565b8260010181905550612907838360000154611fd990919063ffffffff16565b8260000181905550612926818360020154611fd990919063ffffffff16565b826002018190555050505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561297157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018181818054905001915081612a8b9190612c85565b50600081600183805490500381548110612aa157fe5b90600052602060002090600302019050848160000181905550612acd844261256c90919063ffffffff16565b81600101819055508281600201819055506000600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b3886826001015461256c90919063ffffffff16565b81600101819055508673ffffffffffffffffffffffffffffffffffffffff167ff9626bca62c59d77fa45a204dc096874ee066a5c5e124aa9ce6c438dbdf7387a876040518082815260200191505060405180910390a250505050505050565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a001604052806000151581526020016060815260200160008152602001600081526020016000151581525090565b604051806040016040528060008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c4657805160ff1916838001178555612c74565b82800160010185558215612c74579182015b82811115612c73578251825591602001919060010190612c58565b5b509050612c819190612cb7565b5090565b815481835581811115612cb257600302816003028360005260206000209182019101612cb19190612cdc565b5b505050565b612cd991905b80821115612cd5576000816000905550600101612cbd565b5090565b90565b612d1091905b80821115612d0c576000808201600090556001820160009055600282016000905550600301612ce2565b5090565b9056fea165627a7a723058205f960d24e1a05c96bb3002c184dfd4669e72c77e77b5c16b34d0cd35ce44748f0029

Deployed Bytecode Sourcemap

99:8173:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;99:8173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;300:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;300:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2353:142;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2353:142:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2726:238:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2726:238:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2521:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2050:297;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2050:297:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3427:294:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3427:294:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;176:44:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;393:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1514:317;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1514:317:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1514:317:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4224::1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4224:317:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;226:45:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4252:79;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4252:79:0;;;;;;;;;;;;;;;;;:::i;:::-;;5302:588;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5302:588:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4679:617;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4679:617:0;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4679:617:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4679:617:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4679:617:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4679:617:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4082:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4082:148:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1347:137:3;;;:::i;:::-;;1837:207:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1837:207:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;659:77:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;979:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;348:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;348:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5049:327:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5049:327:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1953:137;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1953:137:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6406:906:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6406:906:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1660:129:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1660:129:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1655:107:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1655:107:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;300:42:0;;;;;;;;;;;;;;;;;;;:::o;2353:142::-;2410:7;2429:17;2449:8;:14;2458:4;2449:14;;;;;;;;;;;;;;;2429:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2480:1;:8;2473:15;;;2353:142;;;:::o;2726:238:1:-;2791:4;2834:1;2815:21;;:7;:21;;;;2807:30;;;;;;2880:5;2848:8;:20;2857:10;2848:20;;;;;;;;;;;;;;;:29;2869:7;2848:29;;;;;;;;;;;;;;;:37;;;;2921:7;2900:36;;2909:10;2900:36;;;2930:5;2900:36;;;;;;;;;;;;;;;;;;2953:4;2946:11;;2726:238;;;;:::o;2521:89:0:-;2565:7;2591:12;;2584:19;;2521:89;:::o;2050:297::-;2120:14;2136:23;2161:19;2192:15;;:::i;:::-;2210:8;:14;2219:4;2210:14;;;;;;;;;;;;;;;2225:5;2210:21;;;;;;;;;;;;;;;;;;2192:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2250:1;:8;;;2241:17;;2286:1;:17;;;2268:35;;2327:1;:13;;;2313:27;;2050:297;;;;;;:::o;3427:294:1:-;3506:4;3551:37;3582:5;3551:8;:14;3560:4;3551:14;;;;;;;;;;;;;;;:26;3566:10;3551:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;3522:8;:14;3531:4;3522:14;;;;;;;;;;;;;;;:26;3537:10;3522:26;;;;;;;;;;;;;;;:66;;;;3598:26;3608:4;3614:2;3618:5;3598:9;:26::i;:::-;3654:10;3639:54;;3648:4;3639:54;;;3666:8;:14;3675:4;3666:14;;;;;;;;;;;;;;;:26;3681:10;3666:26;;;;;;;;;;;;;;;;3639:54;;;;;;;;;;;;;;;;;;3710:4;3703:11;;3427:294;;;;;:::o;176:44:0:-;213:7;176:44;:::o;393:35::-;426:2;393:35;:::o;1514:317::-;1572:13;1587:18;1607:17;1626:16;1654:15;;:::i;:::-;1672:11;:22;1684:9;1672:22;;;;;;;;;;;;;;;1654:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1715:1;:10;;;1704:21;;1742:1;:6;;;1735:13;;1773:1;:14;;;1758:29;;1811:1;:13;;;1797:27;;1514:317;;;;;;:::o;4224::1:-;4304:4;4347:1;4328:21;;:7;:21;;;;4320:30;;;;;;4393:45;4427:10;4393:8;:20;4402:10;4393:20;;;;;;;;;;;;;;;:29;4414:7;4393:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;4361:8;:20;4370:10;4361:20;;;;;;;;;;;;;;;:29;4382:7;4361:29;;;;;;;;;;;;;;;:77;;;;4474:7;4453:60;;4462:10;4453:60;;;4483:8;:20;4492:10;4483:20;;;;;;;;;;;;;;;:29;4504:7;4483:29;;;;;;;;;;;;;;;;4453:60;;;;;;;;;;;;;;;;;;4530:4;4523:11;;4224:317;;;;:::o;226:45:0:-;261:10;226:45;:::o;4252:79::-;4299:25;4305:10;4317:6;4299:5;:25::i;:::-;4252:79;:::o;5302:588::-;5366:7;5385:23;5411:8;:16;5420:6;5411:16;;;;;;;;;;;;;;;5385:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5437:16;;:::i;:::-;5456:9;:17;5466:6;5456:17;;;;;;;;;;;;;;;5437:36;;;;;;;;;;;;;;;;;;;;;;;;;;;5483:23;5509:1;:10;;;5483:36;;5535:6;5544:1;5535:10;;5530:321;5551:7;:14;5547:1;:18;5530:321;;;5586:15;;:::i;:::-;5604:7;5612:1;5604:10;;;;;;;;;;;;;;5586:28;;5629:10;5642:54;5663:1;:17;;;5682:1;:13;;;5642:20;:54::i;:::-;5629:67;;5710:22;5735:38;5759:1;:13;;;5735:19;5748:5;5735:1;:8;;;:12;;:19;;;;:::i;:::-;:23;;:38;;;;:::i;:::-;5710:63;;5805:35;5825:14;5805:15;:19;;:35;;;;:::i;:::-;5787:53;;5530:321;;;5567:3;;;;;;;5530:321;;;;5868:15;5861:22;;;;;5302:588;;;:::o;4679:617::-;863:9:3;:7;:9::i;:::-;855:18;;;;;;4841:24:0;;:::i;:::-;4868:11;:22;4880:9;4868:22;;;;;;;;;;;;;;;4841:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4910:10;:19;;;4909:20;4901:29;;;;;;4962:1;4948:11;:15;4940:24;;;;;;4996:4;4974:10;:19;;:26;;;;;;;;;;;5028:4;5010:10;:15;;:22;;;;5068:12;5042:10;:23;;:38;;;;;5115:11;5090:10;:22;;:36;;;;;5162:12;5136:10;:23;;:38;;;;;;;;;;;5209:10;5184:11;:22;5196:9;5184:22;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5246:9;5234:55;;;5257:4;5263:12;5277:11;5234:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5234:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;883:1:3;4679:617:0;;;;;:::o;4082:148::-;4138:7;4164:59;4196:9;:17;4206:6;4196:17;;;;;;;;;;;;;;;:26;;;4164:9;:17;4174:6;4164:17;;;;;;;;;;;;;;;:27;;;:31;;:59;;;;:::i;:::-;4157:66;;4082:148;;;:::o;1347:137:3:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1408:40;;1429:6;;;;;;;;;;;1408:40;;;;;;;;;;;;1475:1;1458:6;;:19;;;;;;;;;;;;;;;;;;1347:137::o;1837:207:0:-;1892:17;1911:16;1939;;:::i;:::-;1958:9;:15;1968:4;1958:15;;;;;;;;;;;;;;;1939:34;;;;;;;;;;;;;;;;;;;;;;;;;;;1995:1;:11;;;1983:23;;2027:1;:10;;;2016:21;;1837:207;;;;:::o;659:77:3:-;697:7;723:6;;;;;;;;;;;716:13;;659:77;:::o;979:90::-;1019:4;1056:6;;;;;;;;;;;1042:20;;:10;:20;;;1035:27;;979:90;:::o;348:38:0:-;;;;;;;;;;;;;;;;;;;:::o;5049:327:1:-;5134:4;5177:1;5158:21;;:7;:21;;;;5150:30;;;;;;5223:50;5257:15;5223:8;:20;5232:10;5223:20;;;;;;;;;;;;;;;:29;5244:7;5223:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;5191:8;:20;5200:10;5191:20;;;;;;;;;;;;;;;:29;5212:7;5191:29;;;;;;;;;;;;;;;:82;;;;5309:7;5288:60;;5297:10;5288:60;;;5318:8;:20;5327:10;5318:20;;;;;;;;;;;;;;;:29;5339:7;5318:29;;;;;;;;;;;;;;;;5288:60;;;;;;;;;;;;;;;;;;5365:4;5358:11;;5049:327;;;;:::o;1953:137::-;2014:4;2030:32;2040:10;2052:2;2056:5;2030:9;:32::i;:::-;2079:4;2072:11;;1953:137;;;;:::o;6406:906:0:-;6459:12;6483:17;6503:9;:17;6513:6;6503:17;;;;;;;;;;;;;;;6483:37;;6530:27;6560:8;:16;6569:6;6560:16;;;;;;;;;;;;;;;6530:46;;6586:16;6605:1;6586:20;;6621:6;6630:1;6621:10;;6616:449;6637:10;:17;;;;6633:1;:21;6616:449;;;6674:18;6695:17;6703:6;6710:1;6695:7;:17::i;:::-;6674:38;;6737:24;6750:10;6737:8;:12;;:24;;;;:::i;:::-;6726:35;;6840:1;6811:10;6822:1;6811:13;;;;;;;;;;;;;;;;;;:25;;;:30;6808:247;;;6886:19;6908:10;6919:24;6941:1;6919:10;:17;;;;:21;;:24;;;;:::i;:::-;6908:36;;;;;;;;;;;;;;;;;;6886:58;;6978:4;6962:10;6973:1;6962:13;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;7000:10;:19;;;;;;;;;;;;:::i;:::-;;7037:3;;;;;;;;6808:247;;6616:449;6656:3;;;;;;;6616:449;;;;7124:25;7140:8;7124:1;:11;;;:15;;:25;;;;:::i;:::-;7110:1;:11;;:39;;;;7209:24;7224:8;7209:1;:10;;;:14;;:24;;;;:::i;:::-;7196:1;:10;;:37;;;;7254:4;7244:14;;7288:6;7274:31;;;7296:8;7274:31;;;;;;;;;;;;;;;;;;6406:906;;;;;;:::o;1660:129:1:-;1732:7;1758:8;:15;1767:5;1758:15;;;;;;;;;;;;;;;:24;1774:7;1758:24;;;;;;;;;;;;;;;;1751:31;;1660:129;;;;:::o;1655:107:3:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;:::-;1655:107;:::o;1205:145:4:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;1307:9;1323:1;1319;:5;1307:17;;1342:1;1335:8;;;1205:145;;;;:::o;2616:1460:0:-;2695:16;2714:11;:17;2726:4;2714:17;;;;;;;;;;;;;;;2695:36;;2742:4;:14;;;2757:4;2742:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2742:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2742:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2742:20:0;;;;;;;;;;;;;;;;;2789:9;:15;2799:4;2789:15;;;;;;;;;;;;;;;:25;;;2780:5;:34;;2772:43;;;;;;2847:1;2833:16;;:2;:16;;;;2825:25;;;;;;2888:36;2918:5;2888:9;:15;2898:4;2888:15;;;;;;;;;;;;;;;:25;;;:29;;:36;;;;:::i;:::-;2860:9;:15;2870:4;2860:15;;;;;;;;;;;;;;;:25;;:64;;;;2938:1;:10;;;;;;;;;;;;2934:1096;;;2968:1;:14;;;;;;;;;;;;2964:965;;;3021:3;261:10;3006:18;3002:815;;3048:18;3107:1;213:7;261:10;3070:3;:17;3069:35;;;;;;:39;3048:60;;3151:1;:13;;;3135;:29;3131:559;;;3192:19;3214:42;3242:13;3223:1;:13;;;3215:5;:21;;;;;;3214:27;;:42;;;;:::i;:::-;3192:64;;3309:43;3337:14;3309:9;:13;3319:2;3309:13;;;;;;;;;;;;;;;:23;;;:27;;:43;;;;:::i;:::-;3283:9;:13;3293:2;3283:13;;;;;;;;;;;;;;;:23;;:69;;;;3378:130;3396:2;3400:25;3410:14;3400:5;:9;;:25;;;;:::i;:::-;3473:3;3457:13;213:7;3441:29;261:10;3427:43;:49;3494:13;3478:1;:13;;;:29;3378:17;:130::i;:::-;3131:559;;;;3576:5;3563:1;:10;;;:18;;;;;;;;;;;;;;;;;;3633:34;3661:5;3633:9;:13;3643:2;3633:13;;;;;;;;;;;;;;;:23;;;:27;;:34;;;;:::i;:::-;3607:9;:13;3617:2;3607:13;;;;;;;;;;;;;;;:23;;:60;;;;3131:559;3002:815;;;;3736:62;3754:2;3758:5;3779:3;261:10;3765:17;3784:1;:13;;;3736:17;:62::i;:::-;3002:815;2964:965;;;3855:59;3873:2;3877:5;3884:1;:14;;;3900:1;:13;;;3855:17;:59::i;:::-;2964:965;2934:1096;;;3985:34;4013:5;3985:9;:13;3995:2;3985:13;;;;;;;;;;;;;;;:23;;;:27;;:34;;;;:::i;:::-;3959:9;:13;3969:2;3959:13;;;;;;;;;;;;;;;:23;;:60;;;;2934:1096;4059:2;4044:25;;4053:4;4044:25;;;4063:5;4044:25;;;;;;;;;;;;;;;;;;2616:1460;;;;:::o;1431:145:4:-;1489:7;1508:9;1524:1;1520;:5;1508:17;;1548:1;1543;:6;;1535:15;;;;;;1568:1;1561:8;;;1431:145;;;;:::o;4337:322:0:-;4419:9;:15;4429:4;4419:15;;;;;;;;;;;;;;;:25;;;4409:6;:35;;4401:44;;;;;;4484:37;4514:6;4484:9;:15;4494:4;4484:15;;;;;;;;;;;;;;;:25;;;:29;;:37;;;;:::i;:::-;4456:9;:15;4466:4;4456:15;;;;;;;;;;;;;;;:25;;:65;;;;4546:24;4563:6;4546:12;;:16;;:24;;;;:::i;:::-;4531:12;:39;;;;4590:4;4585:18;;;4596:6;4585:18;;;;;;;;;;;;;;;;;;4641:1;4618:34;;4627:4;4618:34;;;4645:6;4618:34;;;;;;;;;;;;;;;;;;4337:322;;:::o;7896:374::-;7983:4;8009:9;8003:3;:15;7999:54;;;8041:1;8034:8;;;;7999:54;8062:17;8082:46;8126:1;8082:39;213:7;8083:18;8091:9;8083:3;:7;;:18;;;;:::i;:::-;8082:24;;:39;;;;:::i;:::-;:43;;:46;;;;:::i;:::-;8062:66;;8154:11;8142:9;:23;8138:126;;;8187:11;8180:18;;;;;8138:126;8244:9;8237:16;;;7896:374;;;;;:::o;229:421:4:-;287:7;532:1;527;:6;523:45;;;556:1;549:8;;;;523:45;578:9;594:1;590;:5;578:17;;622:1;617;613;:5;;;;;;:10;605:19;;;;;;642:1;635:8;;;229:421;;;;;:::o;778:296::-;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;945:17;;1066:1;1059:8;;;778:296;;;;:::o;7318:571:0:-;7383:16;7411;7430:8;:16;7439:6;7430:16;;;;;;;;;;;;;;;7447:5;7430:23;;;;;;;;;;;;;;;;;;7411:42;;7464:10;7477:54;7498:1;:17;;;7517:1;:13;;;7477:20;:54::i;:::-;7464:67;;7554:1;7545:5;:10;7541:49;;;7578:1;7571:8;;;;;;7541:49;7676:38;7700:1;:13;;;7676:19;7689:5;7676:1;:8;;;:12;;:19;;;;:::i;:::-;:23;;:38;;;;:::i;:::-;7665:49;;7745:44;7783:5;213:7;7767:21;7745:1;:17;;;:21;;:44;;;;:::i;:::-;7725:1;:17;;:64;;;;7810:22;7823:8;7810:1;:8;;;:12;;:22;;;;:::i;:::-;7799:1;:8;;:33;;;;7858:24;7876:5;7858:1;:13;;;:17;;:24;;;;:::i;:::-;7842:1;:13;;:40;;;;7318:571;;;;;;;:::o;1906:183:3:-;1999:1;1979:22;;:8;:22;;;;1971:31;;;;;;2046:8;2017:38;;2038:6;;;;;;;;;;;2017:38;;;;;;;;;;;;2074:8;2065:6;;:17;;;;;;;;;;;;;;;;;;1906:183;:::o;5896:504:0:-;6015:24;6042:8;:16;6051:6;6042:16;;;;;;;;;;;;;;;6015:43;;6086:1;6068:7;:19;;;;;;;;;;;;;;:::i;:::-;;6097:16;6116:7;6141:1;6124:7;:14;;;;:18;6116:27;;;;;;;;;;;;;;;;;;6097:46;;6164:6;6153:1;:8;;:17;;;;6200:21;6208:12;6200:3;:7;;:21;;;;:::i;:::-;6180:1;:17;;:41;;;;6247:11;6231:1;:13;;:27;;;;6269:17;6289:9;:17;6299:6;6289:17;;;;;;;;;;;;;;;6269:37;;6329:22;6344:6;6329:1;:10;;;:14;;:22;;;;:::i;:::-;6316:1;:10;;:35;;;;6378:6;6366:27;;;6386:6;6366:27;;;;;;;;;;;;;;;;;;5896:504;;;;;;;:::o;99:8173::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://5f960d24e1a05c96bb3002c184dfd4669e72c77e77b5c16b34d0cd35ce44748f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.