ETH Price: $2,509.53 (-1.22%)

Token

Vision.Network 100G Token v2.0 (Voken2.0)
 

Overview

Max Total Supply

2,404,213,008.551919 Voken2.0

Holders

1,214

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
212,052.010727 Voken2.0

Value
$0.00
0xb3e5fe2ecd264dd0136a381f9034c0f1b64c720f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Voken2

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-08-22
*/

pragma solidity ^0.5.11;

// Vision.Network 100G Token v2.0
//
// Upgraded in Aug 2019
//
// More info:
//   https://vision.network
//   https://voken.io
//
// Contact us:
//   [email protected]
//   [email protected]


/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow checks.
 */
library SafeMath256 {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


/**
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     *
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}


/**
 * @dev Interface of the ERC20 standard
 */
interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    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);
}


/**
 * @dev Interface of an allocation contract.
 */
interface IAllocation {
    function reservedOf(address account) external view returns (uint256);
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 */
contract Ownable {
    address internal _owner;
    address internal _newOwner;

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


    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the addresses of the current and new owner.
     */
    function owner() public view returns (address currentOwner, address newOwner) {
        currentOwner = _owner;
        newOwner = _newOwner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     *
     * IMPORTANT: Need to run {acceptOwnership} by the new owner.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");

        emit OwnershipTransferred(_owner, newOwner);
        _newOwner = newOwner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     *
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Accept ownership of the contract.
     *
     * Can only be called by the new owner.
     */
    function acceptOwnership() public {
        require(msg.sender == _newOwner, "Ownable: caller is not the new owner address");
        require(msg.sender != address(0), "Ownable: caller is the zero address");

        emit OwnershipAccepted(_owner, msg.sender);
        _owner = msg.sender;
        _newOwner = address(0);
    }

    /**
     * @dev Rescue compatible ERC20 Token
     *
     * Can only be called by the current owner.
     */
    function rescueTokens(address tokenAddr, address recipient, uint256 amount) external onlyOwner {
        IERC20 _token = IERC20(tokenAddr);
        require(recipient != address(0), "Rescue: recipient is the zero address");
        uint256 balance = _token.balanceOf(address(this));

        require(balance >= amount, "Rescue: amount exceeds balance");
        _token.transfer(recipient, amount);
    }

    /**
     * @dev Withdraw Ether
     *
     * Can only be called by the current owner.
     */
    function withdrawEther(address payable recipient, uint256 amount) external onlyOwner {
        require(recipient != address(0), "Withdraw: recipient is the zero address");

        uint256 balance = address(this).balance;

        require(balance >= amount, "Withdraw: amount exceeds balance");
        recipient.transfer(amount);
    }
}


/**
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    bool private _paused;

    event Paused();
    event Unpaused();


    /**
     * @dev Constructor
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @return Returns true if the contract is paused, false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Paused");
        _;
    }

    /**
     * @dev Sets paused state.
     *
     * Can only be called by the current owner.
     */
    function setPaused(bool value) external onlyOwner {
        _paused = value;

        if (_paused) {
            emit Paused();
        } else {
            emit Unpaused();
        }
    }
}


/**
 * @title Voken Main Contract v2.0
 */
contract Voken2 is Ownable, Pausable, IERC20 {
    using SafeMath256 for uint256;
    using Roles for Roles.Role;

    Roles.Role private _globals;
    Roles.Role private _proxies;
    Roles.Role private _minters;

    string private _name = "Vision.Network 100G Token v2.0";
    string private _symbol = "Voken2.0";
    uint8 private _decimals = 6;
    uint256 private _cap;
    uint256 private _totalSupply;

    bool private _whitelistingMode;
    bool private _safeMode;
    uint16 private _BURNING_PERMILL;
    uint256 private _whitelistCounter;
    uint256 private _WHITELIST_TRIGGER = 1001000000;     // 1001 VOKEN for sign-up trigger
    uint256 private _WHITELIST_REFUND = 1000000;         //    1 VOKEN for success signal
    uint256[15] private _WHITELIST_REWARDS = [
        300000000,  // 300 Voken for Level.1
        200000000,  // 200 Voken for Level.2
        100000000,  // 100 Voken for Level.3
        100000000,  // 100 Voken for Level.4
        100000000,  // 100 Voken for Level.5
        50000000,   //  50 Voken for Level.6
        40000000,   //  40 Voken for Level.7
        30000000,   //  30 Voken for Level.8
        20000000,   //  20 Voken for Level.9
        10000000,   //  10 Voken for Level.10
        10000000,   //  10 Voken for Level.11
        10000000,   //  10 Voken for Level.12
        10000000,   //  10 Voken for Level.13
        10000000,   //  10 Voken for Level.14
        10000000    //  10 Voken for Level.15
    ];

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => IAllocation[]) private _allocations;
    mapping (address => mapping (address => bool)) private _addressAllocations;

    mapping (address => address) private _referee;
    mapping (address => address[]) private _referrals;

    event Donate(address indexed account, uint256 amount);
    event Burn(address indexed account, uint256 amount);
    event ProxyAdded(address indexed account);
    event ProxyRemoved(address indexed account);
    event GlobalAdded(address indexed account);
    event GlobalRemoved(address indexed account);
    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);
    event Mint(address indexed account, uint256 amount);
    event MintWithAllocation(address indexed account, uint256 amount, IAllocation indexed allocationContract);
    event WhitelistSignUpEnabled();
    event WhitelistSignUpDisabled();
    event WhitelistSignUp(address indexed account, address indexed refereeAccount);
    event SafeModeOn();
    event SafeModeOff();
    event BurningModeOn();
    event BurningModeOff();


    /**
     * @dev Returns true if the `account` has the Global role
     */
    function isGlobal(address account) public view returns (bool) {
        return _globals.has(account);
    }

    /**
     * @dev Give an `account` access to the Global role.
     *
     * Can only be called by the current owner.
     */
    function addGlobal(address account) public onlyOwner {
        _globals.add(account);
        emit GlobalAdded(account);
    }

    /**
     * @dev Remove an `account` access from the Global role.
     *
     * Can only be called by the current owner.
     */
    function removeGlobal(address account) public onlyOwner {
        _globals.remove(account);
        emit GlobalRemoved(account);
    }

    /**
     * @dev Throws if called by account which is not a proxy.
     */
    modifier onlyProxy() {
        require(isProxy(msg.sender), "ProxyRole: caller does not have the Proxy role");
        _;
    }

    /**
     * @dev Returns true if the `account` has the Proxy role.
     */
    function isProxy(address account) public view returns (bool) {
        return _proxies.has(account);
    }

    /**
     * @dev Give an `account` access to the Proxy role.
     *
     * Can only be called by the current owner.
     */
    function addProxy(address account) public onlyOwner {
        _proxies.add(account);
        emit ProxyAdded(account);
    }

    /**
     * @dev Remove an `account` access from the Proxy role.
     *
     * Can only be called by the current owner.
     */
    function removeProxy(address account) public onlyOwner {
        _proxies.remove(account);
        emit ProxyRemoved(account);
    }

    /**
     * @dev Throws if called by account which is not a minter.
     */
    modifier onlyMinter() {
        require(isMinter(msg.sender), "MinterRole: caller does not have the Minter role");
        _;
    }

    /**
     * @dev Returns true if the `account` has the Minter role
     */
    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    /**
     * @dev Give an `account` access to the Minter role.
     *
     * Can only be called by the current owner.
     */
    function addMinter(address account) public onlyOwner {
        _minters.add(account);
        emit MinterAdded(account);
    }

    /**
     * @dev Remove an `account` access from the Minter role.
     *
     * Can only be called by the current owner.
     */
    function removeMinter(address account) public onlyOwner {
        _minters.remove(account);
        emit MinterRemoved(account);
    }


    /**
     * @dev Constructor
     */
    constructor () public {
        addGlobal(address(this));
        addProxy(msg.sender);
        addMinter(msg.sender);
        setWhitelistingMode(true);
        setSafeMode(true);
        setBurningMode(10);

        _cap = 35000000000000000;   // 35 billion cap, that is 35000000000.000000

        _whitelistCounter = 1;
        _referee[msg.sender] = msg.sender;
        emit WhitelistSignUp(msg.sender, msg.sender);
    }

    /**
     * @dev Donate
     */
    function () external payable {
        if (msg.value > 0) {
            emit Donate(msg.sender, msg.value);
        }
    }

    /**
     * @dev Returns the full name of VOKEN.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of VOKEN.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Returns the cap on VOKEN's total supply.
     */
    function cap() public view returns (uint256) {
        return _cap;
    }

    /**
     * @dev Returns the amount of VOKEN in existence.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Returns the amount of VOKEN owned by `account`.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev Returns the reserved amount of VOKEN by `account`.
     */
    function reservedOf(address account) public view returns (uint256 reserved) {
        uint256 __len = _allocations[account].length;
        if (__len > 0) {
            for (uint256 i = 0; i < __len; i++) {
                reserved = reserved.add(_allocations[account][i].reservedOf(account));
            }
        }
    }

    /**
     * @dev Returns the available amount of VOKEN by `account` and a certain `amount`.
     */
    function _getAvailableAmount(address account, uint256 amount) private view returns (uint256) {
        uint256 __available = balanceOf(account).sub(reservedOf(account));

        if (amount <= __available) {
            return amount;
        }

        else if (__available > 0) {
            return __available;
        }

        revert("VOKEN: available balance is zero");
    }

    /**
     * @dev Returns the allocation contracts' addresses on `account`.
     */
    function allocations(address account) public view returns (IAllocation[] memory contracts) {
        contracts = _allocations[account];
    }

    /**
     * @dev Moves `amount` VOKEN from the caller's account to `recipient`.
     *
     * Auto handle {WhitelistSignUp} when `amount` is a specific value.
     * Auto handle {Burn} when `recipient` is a `address(this)` or `address(0)`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) public whenNotPaused returns (bool) {
        // Whitelist sign-up
        if (amount == _WHITELIST_TRIGGER && _whitelistingMode && whitelisted(recipient) && !whitelisted(msg.sender)) {
            _move(msg.sender, address(this), _WHITELIST_TRIGGER);
            _whitelist(msg.sender, recipient);
            _distributeForWhitelist(msg.sender);
        }

        // Burn
        else if (recipient == address(this) || recipient == address(0)) {
            _burn(msg.sender, amount);
        }

        // Normal Transfer
        else {
            _transfer(msg.sender, recipient, _getAvailableAmount(msg.sender, amount));
        }

        return true;
    }

    /**
     * @dev Moves `amount` VOKEN from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Auto handle {Burn} when `recipient` is a `address(this)` or `address(0)`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     * Emits an {Approval} event indicating the updated allowance.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public whenNotPaused returns (bool) {
        // Burn
        if (recipient == address(this) || recipient == address(0)) {
            _burn(msg.sender, amount);
        }

        // Normal transfer
        else {
            uint256 __amount = _getAvailableAmount(sender, amount);

            _transfer(sender, recipient, __amount);
            _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(__amount, "VOKEN: transfer amount exceeds allowance"));
        }

        return true;
    }

    /**
     * @dev Destroys `amount` VOKEN from the caller.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     */
    function burn(uint256 amount) public whenNotPaused returns (bool) {
        _burn(msg.sender, amount);
        return true;
    }

    /**
     * @dev Destoys `amount` VOKEN from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     * Emits an {Approval} event indicating the updated allowance.
     */
    function burnFrom(address account, uint256 amount) public whenNotPaused returns (bool) {
        _burn(account, amount);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount, "VOKEN: burn amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Creates `amount` VOKEN and assigns them to `account`.
     *
     * Can only be called by a minter.
     */
    function mint(address account, uint256 amount) public whenNotPaused onlyMinter returns (bool) {
        _mint(account, amount);
        return true;
    }

    /**
     * @dev Creates `amount` VOKEN and assigns them to `account`.
     *
     * With an `allocationContract`
     *
     * Can only be called by a minter.
     */
    function mintWithAllocation(address account, uint256 amount, IAllocation allocationContract) public whenNotPaused onlyMinter returns (bool) {
        _mintWithAllocation(account, amount, allocationContract);
        return true;
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) public whenNotPaused returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Returns the remaining number of VOKEN that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}.
     * This is zero by default.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * Emits an {Approval} event indicating the updated allowance.
     */
    function increaseAllowance(address spender, uint256 addedValue) public whenNotPaused returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * Emits an {Approval} event indicating the updated allowance.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public whenNotPaused returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "VOKEN: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves VOKEN `amount` from `sender` to `recipient`.
     *
     * May reject non-whitelist transaction.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(address sender, address recipient, uint256 amount) private {
        require(recipient != address(0), "VOKEN: recipient is the zero address");

        if (_safeMode && !isGlobal(sender) && !isGlobal(recipient)) {
            require(whitelisted(sender), "VOKEN: sender is not whitelisted");
        }

        if (_BURNING_PERMILL > 0) {
            uint256 __burning = amount.mul(_BURNING_PERMILL).div(1000);
            uint256 __amount = amount.sub(__burning);

            _balances[sender] = _balances[sender].sub(__amount);
            _balances[recipient] = _balances[recipient].add(__amount);
            emit Transfer(sender, recipient, __amount);

            _burn(sender, __burning);
        }

        else {
            _balances[sender] = _balances[sender].sub(amount);
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }
    }

    /**
     * @dev Moves VOKEN `amount` from `sender` to `recipient`.
     *
     * May reject non-whitelist transaction.
     *
     * Emits a {Transfer} event.
     */
    function _move(address sender, address recipient, uint256 amount) private {
        require(recipient != address(0), "VOKEN: recipient is the zero address");

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /**
     * @dev Creates `amount` VOKEN and assigns them to `account`, increasing the total supply.
     *
     * Emits a {Mint} event.
     * Emits a {Transfer} event with `from` set to the zero address.
     */
    function _mint(address account, uint256 amount) private {
        require(_totalSupply.add(amount) <= _cap, "VOKEN: total supply cap exceeded");
        require(account != address(0), "VOKEN: mint to the zero address");

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

    /**
     * @dev Creates `amount` VOKEN and assigns them to `account`, increasing the total supply.
     *
     * With an `allocationContract`
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     */
    function _mintWithAllocation(address account, uint256 amount, IAllocation allocationContract) private {
        require(_totalSupply.add(amount) <= _cap, "VOKEN: total supply cap exceeded");
        require(account != address(0), "VOKEN: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);

        if (!_addressAllocations[account][address(allocationContract)]) {
            _allocations[account].push(allocationContract);
            _addressAllocations[account][address(allocationContract)] = true;
        }

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

    /**
     * @dev Destroys `amount` VOKEN from `account`, reducing the total supply.
     *
     * Emits a {Burn} event.
     * Emits a {Transfer} event with `to` set to the zero address.
     */
    function _burn(address account, uint256 amount) private {
        uint256 __amount = _getAvailableAmount(account, amount);

        _balances[account] = _balances[account].sub(__amount, "VOKEN: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(__amount);
        _cap = _cap.sub(__amount);
        emit Burn(account, __amount);
        emit Transfer(account, address(0), __amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s VOKEN.
     *
     * Emits an {Approval} event.
     */
    function _approve(address owner, address spender, uint256 value) private {
        require(owner != address(0), "VOKEN: approve from the zero address");
        require(spender != address(0), "VOKEN: approve to the zero address");
        require(value <= _getAvailableAmount(spender, value), "VOKEN: approve exceeds available balance");

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

    /**
     * @dev Sets the full name of VOKEN.
     *
     * Can only be called by the current owner.
     */
    function rename(string calldata value) external onlyOwner {
        _name = value;
    }

    /**
     * @dev Sets the symbol of VOKEN.
     *
     * Can only be called by the current owner.
     */
    function setSymbol(string calldata value) external onlyOwner {
        _symbol = value;
    }

    /**
     * @dev Returns true if the `account` is whitelisted.
     */
    function whitelisted(address account) public view returns (bool) {
        return _referee[account] != address(0);
    }

    /**
     * @dev Returns the whitelist counter.
     */
    function whitelistCounter() public view returns (uint256) {
        return _whitelistCounter;
    }

    /**
     * @dev Returns true if the sign-up for whitelist is allowed.
     */
    function whitelistingMode() public view returns (bool) {
        return _whitelistingMode;
    }

    /**
     * @dev Returns the referee of an `account`.
     */
    function whitelistReferee(address account) public view returns (address) {
        return _referee[account];
    }

    /**
     * @dev Returns referrals of a `account`
     */
    function whitelistReferrals(address account) public view returns (address[] memory) {
        return _referrals[account];
    }

    /**
     * @dev Returns the referrals count of an `account`.
     */
    function whitelistReferralsCount(address account) public view returns (uint256) {
        return _referrals[account].length;
    }

    /**
     * @dev Push whitelist, batch.
     *
     * Can only be called by a proxy.
     */
    function pushWhitelist(address[] memory accounts, address[] memory refereeAccounts) public onlyProxy returns (bool) {
        require(accounts.length == refereeAccounts.length, "VOKEN Whitelist: batch length is not match");

        for (uint256 i = 0; i < accounts.length; i++) {
            if (accounts[i] != address(0) && !whitelisted(accounts[i]) && whitelisted(refereeAccounts[i])) {
                _whitelist(accounts[i], refereeAccounts[i]);
            }
        }

        return true;
    }

    /**
     * @dev Whitelist an `account` with a `refereeAccount`.
     *
     * Emits {WhitelistSignUp} event.
     */
    function _whitelist(address account, address refereeAccount) private {
        require(!whitelisted(account), "Whitelist: account is already whitelisted");
        require(whitelisted(refereeAccount), "Whitelist: refereeAccount is not whitelisted");

        _referee[account] = refereeAccount;
        _referrals[refereeAccount].push(account);
        _whitelistCounter = _whitelistCounter.add(1);

        emit WhitelistSignUp(account, refereeAccount);
    }

    /**
     * @dev Distribute.
     */
    function _distributeForWhitelist(address account) private {
        uint256 __distributedAmount;
        uint256 __burnAmount;

        address __account = account;
        for(uint i = 0; i < _WHITELIST_REWARDS.length; i++) {
            address __referee = _referee[__account];

            if (__referee != address(0) && __referee != __account && _referrals[__referee].length > i) {
                _move(address(this), __referee, _WHITELIST_REWARDS[i]);
                __distributedAmount = __distributedAmount.add(_WHITELIST_REWARDS[i]);
            }

            __account = __referee;
        }

        // Burn
        __burnAmount = _WHITELIST_TRIGGER.sub(_WHITELIST_REFUND).sub(__distributedAmount);
        if (__burnAmount > 0) {
            _burn(address(this), __burnAmount);
        }

        // Transfer VOKEN refund as a success signal.
        _move(address(this), account, _WHITELIST_REFUND);
    }

    /**
     * @dev Enable/disable sign-up for whitelist.
     *
     * Can only be called by the current owner.
     */
    function setWhitelistingMode(bool value) public onlyOwner {
        _whitelistingMode = value;

        if (_whitelistingMode) {
            emit WhitelistSignUpEnabled();
        } else {
            emit WhitelistSignUpDisabled();
        }
    }

    /**
     * @dev Returns true if a transaction from non-whitelisted address is not allowed.
     */
    function safeMode() public view returns (bool) {
        return _safeMode;
    }

    /**
     * @dev Disable/enable non-whitelist transaction.
     *
     * Can only be called by the current owner.
     */
    function setSafeMode(bool value) public onlyOwner {
        _safeMode = value;

        if (_safeMode) {
            emit SafeModeOn();
        } else {
            emit SafeModeOff();
        }
    }

    /**
     * Returns {bool}, {value} of burning mode.
     */
    function burningMode() public view returns (bool, uint16) {
        return (_BURNING_PERMILL > 0, _BURNING_PERMILL);
    }

    /**
     * @dev Sets the burning mode by `value`.
     */
    function setBurningMode(uint16 value) public onlyOwner {
        require(value <= 1000, "BurningMode: value is greater than 1000");

        if (value > 0) {
            _BURNING_PERMILL = value;
            emit BurningModeOn();
        }
        else {
            _BURNING_PERMILL = 0;
            emit BurningModeOff();
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setWhitelistingMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistingMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"burningMode","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"refereeAccounts","type":"address[]"}],"name":"pushWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whitelistReferralsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSafeMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whitelistReferee","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"allocations","outputs":[{"internalType":"contract IAllocation[]","name":"contracts","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"rename","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"currentOwner","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addGlobal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isGlobal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"value","type":"uint16"}],"name":"setBurningMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"safeMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeGlobal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whitelistReferrals","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"reservedOf","outputs":[{"internalType":"uint256","name":"reserved","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"contract IAllocation","name":"allocationContract","type":"address"}],"name":"mintWithAllocation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Donate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ProxyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ProxyRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"GlobalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"GlobalRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"contract IAllocation","name":"allocationContract","type":"address"}],"name":"MintWithAllocation","type":"event"},{"anonymous":false,"inputs":[],"name":"WhitelistSignUpEnabled","type":"event"},{"anonymous":false,"inputs":[],"name":"WhitelistSignUpDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"refereeAccount","type":"address"}],"name":"WhitelistSignUp","type":"event"},{"anonymous":false,"inputs":[],"name":"SafeModeOn","type":"event"},{"anonymous":false,"inputs":[],"name":"SafeModeOff","type":"event"},{"anonymous":false,"inputs":[],"name":"BurningModeOn","type":"event"},{"anonymous":false,"inputs":[],"name":"BurningModeOff","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipAccepted","type":"event"}]

60c0604052601e60808190527f566973696f6e2e4e6574776f726b203130304720546f6b656e2076322e30000060a09081526200004091600591906200092f565b506040805180820190915260088082527f566f6b656e322e30000000000000000000000000000000000000000000000000602090920191825262000087916006916200092f565b506007805460ff19166006179055633baa0c40600c55620f4240600d55604080516101e0810182526311e1a3008152630bebc20060208201526305f5e1009181018290526060810182905260808101919091526302faf08060a08201526302625a0060c08201526301c9c38060e08201526301312d006101008201526298968061012082018190526101408201819052610160820181905261018082018190526101a082018190526101c08201526200014590600e90600f620009b4565b503480156200015357600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001805460ff60a01b19169055620001be306001600160e01b036200028116565b620001d2336001600160e01b036200034216565b620001e6336001600160e01b036200040316565b620001fb60016001600160e01b03620004c416565b6200021060016001600160e01b03620005a816565b62000225600a6001600160e01b036200069616565b667c5850872380006008556001600b553360008181526021602052604080822080546001600160a01b031916841790555182917f14fc63225bc85ae786ffdbede4d2704b3f0805ee2bb7129abb2d10376803514091a362000a0d565b62000295336001600160e01b03620007f116565b620002f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b6200030b8160026200080560201b620026511790919060201c565b6040516001600160a01b038216907f3557494d1731a5740ae239774519b4c0ce38768fbef9ce574f84c9a8d08311f090600090a250565b62000356336001600160e01b03620007f116565b620003b157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b620003cc8160036200080560201b620026511790919060201c565b6040516001600160a01b038216907f919e434c309b1e05df9dba7a1e2827e10cf511d2eb5330b6fffadf34f0632d0690600090a250565b62000417336001600160e01b03620007f116565b6200047257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b6200048d8160046200080560201b620026511790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b620004d8336001600160e01b03620007f116565b6200053357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b600a805460ff1916821515179081905560ff16156200057b576040517f0208021534f45416f2c723a56f5c3824480afc61fb70b7b9286dfc90a55e412290600090a1620005a5565b6040517fae1e66777fb0c2bed5853128e030c8e4ce4c2c62c80606136b683277c482127e90600090a15b50565b620005bc336001600160e01b03620007f116565b6200061757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b600a805461ff0019166101008315158102919091179182905560ff910416156200066a576040517f920a1ae5efe772816c4b2c32ca4e42c4b93762de96b3022c3e46f535ddf4f6c490600090a1620005a5565b6040517fd13cddd313ffdd1ce190fceb76cf83bf01c4c0246c9f633550d24baf0133810d90600090a150565b620006aa336001600160e01b03620007f116565b6200070557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b6103e88161ffff16111562000766576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180620043146027913960400191505060405180910390fd5b61ffff811615620007b857600a805463ffff000019166201000061ffff8416021790556040517fe219d7fe9c009b39d654d5dae368d825b055057c4c0168db20e38c3fdcc9d05e90600090a1620005a5565b600a805463ffff0000191690556040517f7d00f058aaf72e16e87a740bb23222cd092f14044833e7916aa86c8055e29a3c90600090a150565b6000546001600160a01b0390811691161490565b6200081a82826001600160e01b03620008ac16565b156200088757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200090f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806200435b6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200097257805160ff1916838001178555620009a2565b82800160010185558215620009a2579182015b82811115620009a257825182559160200191906001019062000985565b50620009b0929150620009ed565b5090565b82600f8101928215620009a2579160200282015b82811115620009a2578251829063ffffffff16905591602001919060010190620009c8565b62000a0a91905b80821115620009b05760008155600101620009f4565b90565b6138f78062000a1d6000396000f3fe6080604052600436106102ae5760003560e01c80635c975abb11610175578063a9059cbb116100dc578063c316351211610095578063d936547e1161006f578063d936547e14610d91578063dd62ed3e14610dc4578063f19158ef14610dff578063f2fde38b14610e42576102ae565b8063c316351214610ce8578063c9322adb14610d1b578063cea9d26f14610d4e576102ae565b8063a9059cbb14610b86578063aa271e1a14610bbf578063abe3219c14610bf2578063adaebf0114610c07578063b84c824614610c3a578063be116c3b14610cb5576102ae565b806391a15bb31161012e57806391a15bb314610a7157806395d89b4114610aa4578063983b2d5614610ab95780639edeb53014610aec5780639ef306a614610b1f578063a457c2d714610b4d576102ae565b80635c975abb1461092557806366605ba41461093a57806370a08231146109b557806379ba5097146109e857806379cc6790146109fd5780638da5cb5b14610a36576102ae565b80632f54bf6e1161021957806340c10f19116101d257806340c10f191461078b57806342966c68146107c457806344b7e5f2146107ee5780634e0fcfa91461081a578063522f68151461086957806352a9039c146108a2576102ae565b80632f54bf6e146106795780633092afd5146106ac578063313ce567146106df578063316893041461070a578063355274ea1461073d5780633950935114610752576102ae565b806318160ddd1161026b57806318160ddd1461046457806323b11d8d1461048b57806323b872dd146104be57806326f27e6d14610501578063297103881461051657806329f34ac114610549576102ae565b806306fdde03146102ed578063095ea7b3146103775780630ddb3aae146103c457806312c23565146103f057806313126bae1461040557806316c38b3c14610438575b34156102eb5760408051348152905133917f0553260a2e46b0577270d8992db02d30856ca880144c72d6e9503760946aef13919081900360200190a25b005b3480156102f957600080fd5b50610302610e75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038357600080fd5b506103b06004803603604081101561039a57600080fd5b506001600160a01b038135169060200135610f0c565b604080519115158252519081900360200190f35b3480156103d057600080fd5b506102eb600480360360208110156103e757600080fd5b50351515610f6c565b3480156103fc57600080fd5b506103b0611027565b34801561041157600080fd5b5061041a611030565b60408051921515835261ffff90911660208301528051918290030190f35b34801561044457600080fd5b506102eb6004803603602081101561045b57600080fd5b50351515611043565b34801561047057600080fd5b5061047961110c565b60408051918252519081900360200190f35b34801561049757600080fd5b506102eb600480360360208110156104ae57600080fd5b50356001600160a01b0316611112565b3480156104ca57600080fd5b506103b0600480360360608110156104e157600080fd5b506001600160a01b038135811691602081013590911690604001356111a2565b34801561050d57600080fd5b5061047961129c565b34801561052257600080fd5b506103b06004803603602081101561053957600080fd5b50356001600160a01b03166112a2565b34801561055557600080fd5b506103b06004803603604081101561056c57600080fd5b810190602081018135600160201b81111561058657600080fd5b82018360208201111561059857600080fd5b803590602001918460208302840111600160201b831117156105b957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561060857600080fd5b82018360208201111561061a57600080fd5b803590602001918460208302840111600160201b8311171561063b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112b5945050505050565b34801561068557600080fd5b506103b06004803603602081101561069c57600080fd5b50356001600160a01b03166113e9565b3480156106b857600080fd5b506102eb600480360360208110156106cf57600080fd5b50356001600160a01b03166113fd565b3480156106eb57600080fd5b506106f461148d565b6040805160ff9092168252519081900360200190f35b34801561071657600080fd5b506104796004803603602081101561072d57600080fd5b50356001600160a01b0316611496565b34801561074957600080fd5b506104796114b1565b34801561075e57600080fd5b506103b06004803603604081101561077557600080fd5b506001600160a01b0381351690602001356114b7565b34801561079757600080fd5b506103b0600480360360408110156107ae57600080fd5b506001600160a01b03813516906020013561153d565b3480156107d057600080fd5b506103b0600480360360208110156107e757600080fd5b50356115d6565b3480156107fa57600080fd5b506102eb6004803603602081101561081157600080fd5b50351515611633565b34801561082657600080fd5b5061084d6004803603602081101561083d57600080fd5b50356001600160a01b03166116f8565b604080516001600160a01b039092168252519081900360200190f35b34801561087557600080fd5b506102eb6004803603604081101561088c57600080fd5b506001600160a01b038135169060200135611716565b3480156108ae57600080fd5b506108d5600480360360208110156108c557600080fd5b50356001600160a01b0316611836565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109115781810151838201526020016108f9565b505050509050019250505060405180910390f35b34801561093157600080fd5b506103b06118ac565b34801561094657600080fd5b506102eb6004803603602081101561095d57600080fd5b810190602081018135600160201b81111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111600160201b831117156109aa57600080fd5b5090925090506118bc565b3480156109c157600080fd5b50610479600480360360208110156109d857600080fd5b50356001600160a01b0316611915565b3480156109f457600080fd5b506102eb611930565b348015610a0957600080fd5b506103b060048036036040811015610a2057600080fd5b506001600160a01b038135169060200135611a0d565b348015610a4257600080fd5b50610a4b611ab5565b604080516001600160a01b03938416815291909216602082015281519081900390910190f35b348015610a7d57600080fd5b506102eb60048036036020811015610a9457600080fd5b50356001600160a01b0316611acc565b348015610ab057600080fd5b50610302611b5c565b348015610ac557600080fd5b506102eb60048036036020811015610adc57600080fd5b50356001600160a01b0316611bbd565b348015610af857600080fd5b506103b060048036036020811015610b0f57600080fd5b50356001600160a01b0316611c4d565b348015610b2b57600080fd5b506102eb60048036036020811015610b4257600080fd5b503561ffff16611c60565b348015610b5957600080fd5b506103b060048036036040811015610b7057600080fd5b506001600160a01b038135169060200135611d76565b348015610b9257600080fd5b506103b060048036036040811015610ba957600080fd5b506001600160a01b038135169060200135611e14565b348015610bcb57600080fd5b506103b060048036036020811015610be257600080fd5b50356001600160a01b0316611eff565b348015610bfe57600080fd5b506103b0611f12565b348015610c1357600080fd5b506102eb60048036036020811015610c2a57600080fd5b50356001600160a01b0316611f20565b348015610c4657600080fd5b506102eb60048036036020811015610c5d57600080fd5b810190602081018135600160201b811115610c7757600080fd5b820183602082011115610c8957600080fd5b803590602001918460018302840111600160201b83111715610caa57600080fd5b509092509050611fb0565b348015610cc157600080fd5b506102eb60048036036020811015610cd857600080fd5b50356001600160a01b0316612004565b348015610cf457600080fd5b506108d560048036036020811015610d0b57600080fd5b50356001600160a01b0316612094565b348015610d2757600080fd5b5061047960048036036020811015610d3e57600080fd5b50356001600160a01b0316612108565b348015610d5a57600080fd5b506102eb60048036036060811015610d7157600080fd5b506001600160a01b038135811691602081013590911690604001356121f9565b348015610d9d57600080fd5b506103b060048036036020811015610db457600080fd5b50356001600160a01b03166123e7565b348015610dd057600080fd5b5061047960048036036040811015610de757600080fd5b506001600160a01b0381358116916020013516612407565b348015610e0b57600080fd5b506103b060048036036060811015610e2257600080fd5b506001600160a01b03813581169160208101359160409091013516612432565b348015610e4e57600080fd5b506102eb60048036036020811015610e6557600080fd5b50356001600160a01b03166124cc565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f015780601f10610ed657610100808354040283529160200191610f01565b820191906000526020600020905b815481529060010190602001808311610ee457829003601f168201915b505050505090505b90565b600154600090600160a01b900460ff1615610f57576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b610f6233848461251d565b5060015b92915050565b610f75336113e9565b610fb4576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b600a805460ff1916821515179081905560ff1615610ffa576040517f0208021534f45416f2c723a56f5c3824480afc61fb70b7b9286dfc90a55e412290600090a1611024565b6040517fae1e66777fb0c2bed5853128e030c8e4ce4c2c62c80606136b683277c482127e90600090a15b50565b600a5460ff1690565b600a5462010000900461ffff1680151591565b61104c336113e9565b61108b576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff910416156110e0576040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1611024565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a150565b60095490565b61111b336113e9565b61115a576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61116b60038263ffffffff61265116565b6040516001600160a01b038216907f919e434c309b1e05df9dba7a1e2827e10cf511d2eb5330b6fffadf34f0632d0690600090a250565b600154600090600160a01b900460ff16156111ed576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6001600160a01b03831630148061120b57506001600160a01b038316155b1561121f5761121a33836126d2565b611292565b600061122b85846127db565b905061123885858361286b565b611290853361128b8460405180606001604052806028815260200161389b602891396001600160a01b038b166000908152601e60209081526040808320338452909152902054919063ffffffff612af216565b61251d565b505b5060019392505050565b600b5490565b6000610f6660038363ffffffff612b8916565b60006112c0336112a2565b6112fb5760405162461bcd60e51b815260040180806020018281038252602e81526020018061374b602e913960400191505060405180910390fd5b815183511461133b5760405162461bcd60e51b815260040180806020018281038252602a815260200180613639602a913960400191505060405180910390fd5b60005b83518110156112925760006001600160a01b031684828151811061135e57fe5b60200260200101516001600160a01b031614158015611396575061139484828151811061138757fe5b60200260200101516123e7565b155b80156113ac57506113ac83828151811061138757fe5b156113e1576113e18482815181106113c057fe5b60200260200101518483815181106113d457fe5b6020026020010151612bf0565b60010161133e565b6000546001600160a01b0390811691161490565b611406336113e9565b611445576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61145660048263ffffffff612d2116565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60075460ff1690565b6001600160a01b031660009081526022602052604090205490565b60085490565b600154600090600160a01b900460ff1615611502576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b336000818152601e602090815260408083206001600160a01b0388168452909152902054610f629190859061128b908663ffffffff612d8816565b600154600090600160a01b900460ff1615611588576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61159133611eff565b6115cc5760405162461bcd60e51b81526004018080602001828103825260308152602001806136b26030913960400191505060405180910390fd5b610f628383612de9565b600154600090600160a01b900460ff1615611621576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61162b33836126d2565b506001919050565b61163c336113e9565b61167b576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b600a805461ff0019166101008315158102919091179182905560ff910416156116cc576040517f920a1ae5efe772816c4b2c32ca4e42c4b93762de96b3022c3e46f535ddf4f6c490600090a1611024565b6040517fd13cddd313ffdd1ce190fceb76cf83bf01c4c0246c9f633550d24baf0133810d90600090a150565b6001600160a01b039081166000908152602160205260409020541690565b61171f336113e9565b61175e576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6001600160a01b0382166117a35760405162461bcd60e51b81526004018080602001828103825260278152602001806137036027913960400191505060405180910390fd5b3031818110156117fa576040805162461bcd60e51b815260206004820181905260248201527f57697468647261773a20616d6f756e7420657863656564732062616c616e6365604482015290519081900360640190fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611830573d6000803e3d6000fd5b50505050565b6001600160a01b0381166000908152601f60209081526040918290208054835181840281018401909452808452606093928301828280156118a057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611882575b50505050509050919050565b600154600160a01b900460ff1690565b6118c5336113e9565b611904576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6119106005838361349c565b505050565b6001600160a01b03166000908152601d602052604090205490565b6001546001600160a01b031633146119795760405162461bcd60e51b815260040180806020018281038252602c81526020018061386f602c913960400191505060405180910390fd5b336119b55760405162461bcd60e51b815260040180806020018281038252602381526020018061368f6023913960400191505060405180910390fd5b6000805460405133926001600160a01b03909216917f357bdeb5828fa83945f38a88510ce5cd7d628dafb346d767efbc693149fdd97c91a3600080546001600160a01b03199081163317909155600180549091169055565b600154600090600160a01b900460ff1615611a58576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b611a6283836126d2565b610f62833361128b856040518060600160405280602481526020016135c9602491396001600160a01b0389166000908152601e60209081526040808320338452909152902054919063ffffffff612af216565b6000546001546001600160a01b0391821692911690565b611ad5336113e9565b611b14576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611b2560028263ffffffff61265116565b6040516001600160a01b038216907f3557494d1731a5740ae239774519b4c0ce38768fbef9ce574f84c9a8d08311f090600090a250565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f015780601f10610ed657610100808354040283529160200191610f01565b611bc6336113e9565b611c05576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611c1660048263ffffffff61265116565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6000610f6660028363ffffffff612b8916565b611c69336113e9565b611ca8576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6103e88161ffff161115611ced5760405162461bcd60e51b81526004018080602001828103825260278152602001806135a26027913960400191505060405180910390fd5b61ffff811615611d3d57600a805463ffff000019166201000061ffff8416021790556040517fe219d7fe9c009b39d654d5dae368d825b055057c4c0168db20e38c3fdcc9d05e90600090a1611024565b600a805463ffff0000191690556040517f7d00f058aaf72e16e87a740bb23222cd092f14044833e7916aa86c8055e29a3c90600090a150565b600154600090600160a01b900460ff1615611dc1576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b610f62338461128b8560405180606001604052806025815260200161355760259139336000908152601e602090815260408083206001600160a01b038d168452909152902054919063ffffffff612af216565b600154600090600160a01b900460ff1615611e5f576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b600c5482148015611e725750600a5460ff165b8015611e825750611e82836123e7565b8015611e945750611e92336123e7565b155b15611ebe57611ea63330600c54612f71565b611eb03384612bf0565b611eb933612fb6565b610f62565b6001600160a01b038316301480611edc57506001600160a01b038316155b15611eeb57611eb933836126d2565b610f623384611efa33866127db565b61286b565b6000610f6660048363ffffffff612b8916565b600a54610100900460ff1690565b611f29336113e9565b611f68576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611f7960028263ffffffff612d2116565b6040516001600160a01b038216907f50aa81349419539410d0bfbc090794c6df2344776ad4dee02103a1e810c1fd0290600090a250565b611fb9336113e9565b611ff8576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6119106006838361349c565b61200d336113e9565b61204c576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61205d60038263ffffffff612d2116565b6040516001600160a01b038216907fc19ec636c33767d631869f17e127e7bc2d0237fbd3720cac3cbd73c1360c72f590600090a250565b6001600160a01b0381166000908152602260209081526040918290208054835181840281018401909452808452606093928301828280156118a0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116118825750505050509050919050565b6001600160a01b0381166000908152601f602052604081205480156121f35760005b818110156121f1576001600160a01b0384166000908152601f6020526040902080546121e791908390811061215b57fe5b600091825260209182902001546040805163c9322adb60e01b81526001600160a01b0389811660048301529151919092169263c9322adb9260248082019391829003018186803b1580156121ae57600080fd5b505afa1580156121c2573d6000803e3d6000fd5b505050506040513d60208110156121d857600080fd5b5051849063ffffffff612d8816565b925060010161212a565b505b50919050565b612202336113e9565b612241576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b826001600160a01b0383166122875760405162461bcd60e51b815260040180806020018281038252602581526020018061384a6025913960400191505060405180910390fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156122d157600080fd5b505afa1580156122e5573d6000803e3d6000fd5b505050506040513d60208110156122fb57600080fd5b5051905082811015612354576040805162461bcd60e51b815260206004820152601e60248201527f5265736375653a20616d6f756e7420657863656564732062616c616e63650000604482015290519081900360640190fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123b457600080fd5b505af11580156123c8573d6000803e3d6000fd5b505050506040513d60208110156123de57600080fd5b50505050505050565b6001600160a01b0390811660009081526021602052604090205416151590565b6001600160a01b039182166000908152601e6020908152604080832093909416825291909152205490565b600154600090600160a01b900460ff161561247d576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61248633611eff565b6124c15760405162461bcd60e51b81526004018080602001828103825260308152602001806136b26030913960400191505060405180910390fd5b6112928484846130a9565b6124d5336113e9565b612514576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611024816132c2565b6001600160a01b0383166125625760405162461bcd60e51b81526004018080602001828103825260248152602001806137fd6024913960400191505060405180910390fd5b6001600160a01b0382166125a75760405162461bcd60e51b81526004018080602001828103825260228152602001806135356022913960400191505060405180910390fd5b6125b182826127db565b8111156125ef5760405162461bcd60e51b81526004018080602001828103825260288152602001806136116028913960400191505060405180910390fd5b6001600160a01b038084166000818152601e6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61265b8282612b89565b156126ad576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006126de83836127db565b9050612723816040518060600160405280602281526020016137bb602291396001600160a01b0386166000908152601d6020526040902054919063ffffffff612af216565b6001600160a01b0384166000908152601d602052604090205560095461274f908263ffffffff61336216565b600955600854612765908263ffffffff61336216565b6008556040805182815290516001600160a01b038516917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a26040805182815290516000916001600160a01b038616916000805160206137dd8339815191529181900360200190a3505050565b6000806127ff6127ea85612108565b6127f386611915565b9063ffffffff61336216565b90508083116128115782915050610f66565b801561281e579050610f66565b6040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20617661696c61626c652062616c616e6365206973207a65726f604482015290519081900360640190fd5b6001600160a01b0382166128b05760405162461bcd60e51b81526004018080602001828103825260248152602001806135ed6024913960400191505060405180910390fd5b600a54610100900460ff1680156128cd57506128cb83611c4d565b155b80156128df57506128dd82611c4d565b155b1561293e576128ed836123e7565b61293e576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a2073656e646572206973206e6f742077686974656c6973746564604482015290519081900360640190fd5b600a5462010000900461ffff1615612a4a57600a5460009061297f906103e89061297390859062010000900461ffff166133a4565b9063ffffffff6133fd16565b90506000612993838363ffffffff61336216565b6001600160a01b0386166000908152601d60205260409020549091506129bf908263ffffffff61336216565b6001600160a01b038087166000908152601d602052604080822093909355908616815220546129f4908263ffffffff612d8816565b6001600160a01b038086166000818152601d602090815260409182902094909455805185815290519193928916926000805160206137dd83398151915292918290030190a3612a4385836126d2565b5050611910565b6001600160a01b0383166000908152601d6020526040902054612a73908263ffffffff61336216565b6001600160a01b038085166000908152601d60205260408082209390935590841681522054612aa8908263ffffffff612d8816565b6001600160a01b038084166000818152601d602090815260409182902094909455805185815290519193928716926000805160206137dd83398151915292918290030190a3505050565b60008184841115612b815760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b46578181015183820152602001612b2e565b50505050905090810190601f168015612b735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006001600160a01b038216612bd05760405162461bcd60e51b81526004018080602001828103825260228152602001806137996022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b612bf9826123e7565b15612c355760405162461bcd60e51b81526004018080602001828103825260298152602001806138216029913960400191505060405180910390fd5b612c3e816123e7565b612c795760405162461bcd60e51b815260040180806020018281038252602c815260200180613663602c913960400191505060405180910390fd5b6001600160a01b03808316600081815260216020908152604080832080549587166001600160a01b03199687168117909155835260228252822080546001818101835591845291909220018054909316909117909155600b54612ce19163ffffffff612d8816565b600b556040516001600160a01b0380831691908416907f14fc63225bc85ae786ffdbede4d2704b3f0805ee2bb7129abb2d10376803514090600090a35050565b612d2b8282612b89565b612d665760405162461bcd60e51b81526004018080602001828103825260218152602001806136e26021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600082820183811015612de2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600854600954612dff908363ffffffff612d8816565b1115612e52576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20746f74616c20737570706c7920636170206578636565646564604482015290519081900360640190fd5b6001600160a01b038216612ead576040805162461bcd60e51b815260206004820152601f60248201527f564f4b454e3a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600954612ec0908263ffffffff612d8816565b6009556001600160a01b0382166000908152601d6020526040902054612eec908263ffffffff612d8816565b6001600160a01b0383166000818152601d6020908152604091829020939093558051848152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805182815290516001600160a01b038416916000916000805160206137dd8339815191529181900360200190a35050565b6001600160a01b038216612a4a5760405162461bcd60e51b81526004018080602001828103825260248152602001806135ed6024913960400191505060405180910390fd5b60008082815b600f81101561306e576001600160a01b038083166000908152602160205260409020541680158015906130015750826001600160a01b0316816001600160a01b031614155b801561302457506001600160a01b03811660009081526022602052604090205482105b15613064576130423082600e85600f811061303b57fe5b0154612f71565b613061600e83600f811061305257fe5b0154869063ffffffff612d8816565b94505b9150600101612fbc565b5061308a836127f3600d54600c5461336290919063ffffffff16565b9150811561309c5761309c30836126d2565b6118303085600d54612f71565b6008546009546130bf908463ffffffff612d8816565b1115613112576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20746f74616c20737570706c7920636170206578636565646564604482015290519081900360640190fd5b6001600160a01b03831661316d576040805162461bcd60e51b815260206004820152601f60248201527f564f4b454e3a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600954613180908363ffffffff612d8816565b6009556001600160a01b0383166000908152601d60205260409020546131ac908363ffffffff612d8816565b6001600160a01b038085166000908152601d6020908152604080832094909455808052838220928516825291909152205460ff16613243576001600160a01b038381166000818152601f602090815260408083208054600180820183559185528385200180546001600160a01b031916968816968717905593835281805280832094835293905291909120805460ff191690911790555b806001600160a01b0316836001600160a01b03167fb854b64d06c0e6d93dc3f3697093e30cca6265297271ccd5f3ad69d6e82b40fb846040518082815260200191505060405180910390a36040805183815290516001600160a01b038516916000916000805160206137dd8339815191529181900360200190a3505050565b6001600160a01b0381166133075760405162461bcd60e51b815260040180806020018281038252602681526020018061357c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000612de283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612af2565b6000826133b357506000610f66565b828202828482816133c057fe5b0414612de25760405162461bcd60e51b815260040180806020018281038252602181526020018061372a6021913960400191505060405180910390fd5b6000612de283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836134895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b46578181015183820152602001612b2e565b5082848161349357fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134dd5782800160ff1982351617855561350a565b8280016001018555821561350a579182015b8281111561350a5782358255916020019190600101906134ef565b5061351692915061351a565b5090565b610f0991905b80821115613516576000815560010161352056fe564f4b454e3a20617070726f766520746f20746865207a65726f2061646472657373564f4b454e3a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734275726e696e674d6f64653a2076616c75652069732067726561746572207468616e2031303030564f4b454e3a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365564f4b454e3a20726563697069656e7420697320746865207a65726f2061646472657373564f4b454e3a20617070726f7665206578636565647320617661696c61626c652062616c616e6365564f4b454e2057686974656c6973743a206261746368206c656e677468206973206e6f74206d6174636857686974656c6973743a20726566657265654163636f756e74206973206e6f742077686974656c69737465644f776e61626c653a2063616c6c657220697320746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6557697468647261773a20726563697069656e7420697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7750726f7879526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050726f787920726f6c654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373564f4b454e3a206275726e20616d6f756e7420657863656564732062616c616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef564f4b454e3a20617070726f76652066726f6d20746865207a65726f206164647265737357686974656c6973743a206163636f756e7420697320616c72656164792077686974656c69737465645265736375653a20726563697069656e7420697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206e6577206f776e65722061646472657373564f4b454e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a265627a7a723158204e26dd44b55a6a43ffa435fee457b7473bdf9e5207a533c9bf8b7c7dac94d4cc64736f6c634300050b00324275726e696e674d6f64653a2076616c75652069732067726561746572207468616e20313030304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373

Deployed Bytecode

0x6080604052600436106102ae5760003560e01c80635c975abb11610175578063a9059cbb116100dc578063c316351211610095578063d936547e1161006f578063d936547e14610d91578063dd62ed3e14610dc4578063f19158ef14610dff578063f2fde38b14610e42576102ae565b8063c316351214610ce8578063c9322adb14610d1b578063cea9d26f14610d4e576102ae565b8063a9059cbb14610b86578063aa271e1a14610bbf578063abe3219c14610bf2578063adaebf0114610c07578063b84c824614610c3a578063be116c3b14610cb5576102ae565b806391a15bb31161012e57806391a15bb314610a7157806395d89b4114610aa4578063983b2d5614610ab95780639edeb53014610aec5780639ef306a614610b1f578063a457c2d714610b4d576102ae565b80635c975abb1461092557806366605ba41461093a57806370a08231146109b557806379ba5097146109e857806379cc6790146109fd5780638da5cb5b14610a36576102ae565b80632f54bf6e1161021957806340c10f19116101d257806340c10f191461078b57806342966c68146107c457806344b7e5f2146107ee5780634e0fcfa91461081a578063522f68151461086957806352a9039c146108a2576102ae565b80632f54bf6e146106795780633092afd5146106ac578063313ce567146106df578063316893041461070a578063355274ea1461073d5780633950935114610752576102ae565b806318160ddd1161026b57806318160ddd1461046457806323b11d8d1461048b57806323b872dd146104be57806326f27e6d14610501578063297103881461051657806329f34ac114610549576102ae565b806306fdde03146102ed578063095ea7b3146103775780630ddb3aae146103c457806312c23565146103f057806313126bae1461040557806316c38b3c14610438575b34156102eb5760408051348152905133917f0553260a2e46b0577270d8992db02d30856ca880144c72d6e9503760946aef13919081900360200190a25b005b3480156102f957600080fd5b50610302610e75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038357600080fd5b506103b06004803603604081101561039a57600080fd5b506001600160a01b038135169060200135610f0c565b604080519115158252519081900360200190f35b3480156103d057600080fd5b506102eb600480360360208110156103e757600080fd5b50351515610f6c565b3480156103fc57600080fd5b506103b0611027565b34801561041157600080fd5b5061041a611030565b60408051921515835261ffff90911660208301528051918290030190f35b34801561044457600080fd5b506102eb6004803603602081101561045b57600080fd5b50351515611043565b34801561047057600080fd5b5061047961110c565b60408051918252519081900360200190f35b34801561049757600080fd5b506102eb600480360360208110156104ae57600080fd5b50356001600160a01b0316611112565b3480156104ca57600080fd5b506103b0600480360360608110156104e157600080fd5b506001600160a01b038135811691602081013590911690604001356111a2565b34801561050d57600080fd5b5061047961129c565b34801561052257600080fd5b506103b06004803603602081101561053957600080fd5b50356001600160a01b03166112a2565b34801561055557600080fd5b506103b06004803603604081101561056c57600080fd5b810190602081018135600160201b81111561058657600080fd5b82018360208201111561059857600080fd5b803590602001918460208302840111600160201b831117156105b957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561060857600080fd5b82018360208201111561061a57600080fd5b803590602001918460208302840111600160201b8311171561063b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112b5945050505050565b34801561068557600080fd5b506103b06004803603602081101561069c57600080fd5b50356001600160a01b03166113e9565b3480156106b857600080fd5b506102eb600480360360208110156106cf57600080fd5b50356001600160a01b03166113fd565b3480156106eb57600080fd5b506106f461148d565b6040805160ff9092168252519081900360200190f35b34801561071657600080fd5b506104796004803603602081101561072d57600080fd5b50356001600160a01b0316611496565b34801561074957600080fd5b506104796114b1565b34801561075e57600080fd5b506103b06004803603604081101561077557600080fd5b506001600160a01b0381351690602001356114b7565b34801561079757600080fd5b506103b0600480360360408110156107ae57600080fd5b506001600160a01b03813516906020013561153d565b3480156107d057600080fd5b506103b0600480360360208110156107e757600080fd5b50356115d6565b3480156107fa57600080fd5b506102eb6004803603602081101561081157600080fd5b50351515611633565b34801561082657600080fd5b5061084d6004803603602081101561083d57600080fd5b50356001600160a01b03166116f8565b604080516001600160a01b039092168252519081900360200190f35b34801561087557600080fd5b506102eb6004803603604081101561088c57600080fd5b506001600160a01b038135169060200135611716565b3480156108ae57600080fd5b506108d5600480360360208110156108c557600080fd5b50356001600160a01b0316611836565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109115781810151838201526020016108f9565b505050509050019250505060405180910390f35b34801561093157600080fd5b506103b06118ac565b34801561094657600080fd5b506102eb6004803603602081101561095d57600080fd5b810190602081018135600160201b81111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111600160201b831117156109aa57600080fd5b5090925090506118bc565b3480156109c157600080fd5b50610479600480360360208110156109d857600080fd5b50356001600160a01b0316611915565b3480156109f457600080fd5b506102eb611930565b348015610a0957600080fd5b506103b060048036036040811015610a2057600080fd5b506001600160a01b038135169060200135611a0d565b348015610a4257600080fd5b50610a4b611ab5565b604080516001600160a01b03938416815291909216602082015281519081900390910190f35b348015610a7d57600080fd5b506102eb60048036036020811015610a9457600080fd5b50356001600160a01b0316611acc565b348015610ab057600080fd5b50610302611b5c565b348015610ac557600080fd5b506102eb60048036036020811015610adc57600080fd5b50356001600160a01b0316611bbd565b348015610af857600080fd5b506103b060048036036020811015610b0f57600080fd5b50356001600160a01b0316611c4d565b348015610b2b57600080fd5b506102eb60048036036020811015610b4257600080fd5b503561ffff16611c60565b348015610b5957600080fd5b506103b060048036036040811015610b7057600080fd5b506001600160a01b038135169060200135611d76565b348015610b9257600080fd5b506103b060048036036040811015610ba957600080fd5b506001600160a01b038135169060200135611e14565b348015610bcb57600080fd5b506103b060048036036020811015610be257600080fd5b50356001600160a01b0316611eff565b348015610bfe57600080fd5b506103b0611f12565b348015610c1357600080fd5b506102eb60048036036020811015610c2a57600080fd5b50356001600160a01b0316611f20565b348015610c4657600080fd5b506102eb60048036036020811015610c5d57600080fd5b810190602081018135600160201b811115610c7757600080fd5b820183602082011115610c8957600080fd5b803590602001918460018302840111600160201b83111715610caa57600080fd5b509092509050611fb0565b348015610cc157600080fd5b506102eb60048036036020811015610cd857600080fd5b50356001600160a01b0316612004565b348015610cf457600080fd5b506108d560048036036020811015610d0b57600080fd5b50356001600160a01b0316612094565b348015610d2757600080fd5b5061047960048036036020811015610d3e57600080fd5b50356001600160a01b0316612108565b348015610d5a57600080fd5b506102eb60048036036060811015610d7157600080fd5b506001600160a01b038135811691602081013590911690604001356121f9565b348015610d9d57600080fd5b506103b060048036036020811015610db457600080fd5b50356001600160a01b03166123e7565b348015610dd057600080fd5b5061047960048036036040811015610de757600080fd5b506001600160a01b0381358116916020013516612407565b348015610e0b57600080fd5b506103b060048036036060811015610e2257600080fd5b506001600160a01b03813581169160208101359160409091013516612432565b348015610e4e57600080fd5b506102eb60048036036020811015610e6557600080fd5b50356001600160a01b03166124cc565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f015780601f10610ed657610100808354040283529160200191610f01565b820191906000526020600020905b815481529060010190602001808311610ee457829003601f168201915b505050505090505b90565b600154600090600160a01b900460ff1615610f57576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b610f6233848461251d565b5060015b92915050565b610f75336113e9565b610fb4576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b600a805460ff1916821515179081905560ff1615610ffa576040517f0208021534f45416f2c723a56f5c3824480afc61fb70b7b9286dfc90a55e412290600090a1611024565b6040517fae1e66777fb0c2bed5853128e030c8e4ce4c2c62c80606136b683277c482127e90600090a15b50565b600a5460ff1690565b600a5462010000900461ffff1680151591565b61104c336113e9565b61108b576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff910416156110e0576040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1611024565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a150565b60095490565b61111b336113e9565b61115a576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61116b60038263ffffffff61265116565b6040516001600160a01b038216907f919e434c309b1e05df9dba7a1e2827e10cf511d2eb5330b6fffadf34f0632d0690600090a250565b600154600090600160a01b900460ff16156111ed576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6001600160a01b03831630148061120b57506001600160a01b038316155b1561121f5761121a33836126d2565b611292565b600061122b85846127db565b905061123885858361286b565b611290853361128b8460405180606001604052806028815260200161389b602891396001600160a01b038b166000908152601e60209081526040808320338452909152902054919063ffffffff612af216565b61251d565b505b5060019392505050565b600b5490565b6000610f6660038363ffffffff612b8916565b60006112c0336112a2565b6112fb5760405162461bcd60e51b815260040180806020018281038252602e81526020018061374b602e913960400191505060405180910390fd5b815183511461133b5760405162461bcd60e51b815260040180806020018281038252602a815260200180613639602a913960400191505060405180910390fd5b60005b83518110156112925760006001600160a01b031684828151811061135e57fe5b60200260200101516001600160a01b031614158015611396575061139484828151811061138757fe5b60200260200101516123e7565b155b80156113ac57506113ac83828151811061138757fe5b156113e1576113e18482815181106113c057fe5b60200260200101518483815181106113d457fe5b6020026020010151612bf0565b60010161133e565b6000546001600160a01b0390811691161490565b611406336113e9565b611445576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61145660048263ffffffff612d2116565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60075460ff1690565b6001600160a01b031660009081526022602052604090205490565b60085490565b600154600090600160a01b900460ff1615611502576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b336000818152601e602090815260408083206001600160a01b0388168452909152902054610f629190859061128b908663ffffffff612d8816565b600154600090600160a01b900460ff1615611588576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61159133611eff565b6115cc5760405162461bcd60e51b81526004018080602001828103825260308152602001806136b26030913960400191505060405180910390fd5b610f628383612de9565b600154600090600160a01b900460ff1615611621576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61162b33836126d2565b506001919050565b61163c336113e9565b61167b576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b600a805461ff0019166101008315158102919091179182905560ff910416156116cc576040517f920a1ae5efe772816c4b2c32ca4e42c4b93762de96b3022c3e46f535ddf4f6c490600090a1611024565b6040517fd13cddd313ffdd1ce190fceb76cf83bf01c4c0246c9f633550d24baf0133810d90600090a150565b6001600160a01b039081166000908152602160205260409020541690565b61171f336113e9565b61175e576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6001600160a01b0382166117a35760405162461bcd60e51b81526004018080602001828103825260278152602001806137036027913960400191505060405180910390fd5b3031818110156117fa576040805162461bcd60e51b815260206004820181905260248201527f57697468647261773a20616d6f756e7420657863656564732062616c616e6365604482015290519081900360640190fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611830573d6000803e3d6000fd5b50505050565b6001600160a01b0381166000908152601f60209081526040918290208054835181840281018401909452808452606093928301828280156118a057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611882575b50505050509050919050565b600154600160a01b900460ff1690565b6118c5336113e9565b611904576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6119106005838361349c565b505050565b6001600160a01b03166000908152601d602052604090205490565b6001546001600160a01b031633146119795760405162461bcd60e51b815260040180806020018281038252602c81526020018061386f602c913960400191505060405180910390fd5b336119b55760405162461bcd60e51b815260040180806020018281038252602381526020018061368f6023913960400191505060405180910390fd5b6000805460405133926001600160a01b03909216917f357bdeb5828fa83945f38a88510ce5cd7d628dafb346d767efbc693149fdd97c91a3600080546001600160a01b03199081163317909155600180549091169055565b600154600090600160a01b900460ff1615611a58576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b611a6283836126d2565b610f62833361128b856040518060600160405280602481526020016135c9602491396001600160a01b0389166000908152601e60209081526040808320338452909152902054919063ffffffff612af216565b6000546001546001600160a01b0391821692911690565b611ad5336113e9565b611b14576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611b2560028263ffffffff61265116565b6040516001600160a01b038216907f3557494d1731a5740ae239774519b4c0ce38768fbef9ce574f84c9a8d08311f090600090a250565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f015780601f10610ed657610100808354040283529160200191610f01565b611bc6336113e9565b611c05576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611c1660048263ffffffff61265116565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6000610f6660028363ffffffff612b8916565b611c69336113e9565b611ca8576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6103e88161ffff161115611ced5760405162461bcd60e51b81526004018080602001828103825260278152602001806135a26027913960400191505060405180910390fd5b61ffff811615611d3d57600a805463ffff000019166201000061ffff8416021790556040517fe219d7fe9c009b39d654d5dae368d825b055057c4c0168db20e38c3fdcc9d05e90600090a1611024565b600a805463ffff0000191690556040517f7d00f058aaf72e16e87a740bb23222cd092f14044833e7916aa86c8055e29a3c90600090a150565b600154600090600160a01b900460ff1615611dc1576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b610f62338461128b8560405180606001604052806025815260200161355760259139336000908152601e602090815260408083206001600160a01b038d168452909152902054919063ffffffff612af216565b600154600090600160a01b900460ff1615611e5f576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b600c5482148015611e725750600a5460ff165b8015611e825750611e82836123e7565b8015611e945750611e92336123e7565b155b15611ebe57611ea63330600c54612f71565b611eb03384612bf0565b611eb933612fb6565b610f62565b6001600160a01b038316301480611edc57506001600160a01b038316155b15611eeb57611eb933836126d2565b610f623384611efa33866127db565b61286b565b6000610f6660048363ffffffff612b8916565b600a54610100900460ff1690565b611f29336113e9565b611f68576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611f7960028263ffffffff612d2116565b6040516001600160a01b038216907f50aa81349419539410d0bfbc090794c6df2344776ad4dee02103a1e810c1fd0290600090a250565b611fb9336113e9565b611ff8576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6119106006838361349c565b61200d336113e9565b61204c576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61205d60038263ffffffff612d2116565b6040516001600160a01b038216907fc19ec636c33767d631869f17e127e7bc2d0237fbd3720cac3cbd73c1360c72f590600090a250565b6001600160a01b0381166000908152602260209081526040918290208054835181840281018401909452808452606093928301828280156118a0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116118825750505050509050919050565b6001600160a01b0381166000908152601f602052604081205480156121f35760005b818110156121f1576001600160a01b0384166000908152601f6020526040902080546121e791908390811061215b57fe5b600091825260209182902001546040805163c9322adb60e01b81526001600160a01b0389811660048301529151919092169263c9322adb9260248082019391829003018186803b1580156121ae57600080fd5b505afa1580156121c2573d6000803e3d6000fd5b505050506040513d60208110156121d857600080fd5b5051849063ffffffff612d8816565b925060010161212a565b505b50919050565b612202336113e9565b612241576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b826001600160a01b0383166122875760405162461bcd60e51b815260040180806020018281038252602581526020018061384a6025913960400191505060405180910390fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156122d157600080fd5b505afa1580156122e5573d6000803e3d6000fd5b505050506040513d60208110156122fb57600080fd5b5051905082811015612354576040805162461bcd60e51b815260206004820152601e60248201527f5265736375653a20616d6f756e7420657863656564732062616c616e63650000604482015290519081900360640190fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123b457600080fd5b505af11580156123c8573d6000803e3d6000fd5b505050506040513d60208110156123de57600080fd5b50505050505050565b6001600160a01b0390811660009081526021602052604090205416151590565b6001600160a01b039182166000908152601e6020908152604080832093909416825291909152205490565b600154600090600160a01b900460ff161561247d576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61248633611eff565b6124c15760405162461bcd60e51b81526004018080602001828103825260308152602001806136b26030913960400191505060405180910390fd5b6112928484846130a9565b6124d5336113e9565b612514576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611024816132c2565b6001600160a01b0383166125625760405162461bcd60e51b81526004018080602001828103825260248152602001806137fd6024913960400191505060405180910390fd5b6001600160a01b0382166125a75760405162461bcd60e51b81526004018080602001828103825260228152602001806135356022913960400191505060405180910390fd5b6125b182826127db565b8111156125ef5760405162461bcd60e51b81526004018080602001828103825260288152602001806136116028913960400191505060405180910390fd5b6001600160a01b038084166000818152601e6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61265b8282612b89565b156126ad576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006126de83836127db565b9050612723816040518060600160405280602281526020016137bb602291396001600160a01b0386166000908152601d6020526040902054919063ffffffff612af216565b6001600160a01b0384166000908152601d602052604090205560095461274f908263ffffffff61336216565b600955600854612765908263ffffffff61336216565b6008556040805182815290516001600160a01b038516917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a26040805182815290516000916001600160a01b038616916000805160206137dd8339815191529181900360200190a3505050565b6000806127ff6127ea85612108565b6127f386611915565b9063ffffffff61336216565b90508083116128115782915050610f66565b801561281e579050610f66565b6040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20617661696c61626c652062616c616e6365206973207a65726f604482015290519081900360640190fd5b6001600160a01b0382166128b05760405162461bcd60e51b81526004018080602001828103825260248152602001806135ed6024913960400191505060405180910390fd5b600a54610100900460ff1680156128cd57506128cb83611c4d565b155b80156128df57506128dd82611c4d565b155b1561293e576128ed836123e7565b61293e576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a2073656e646572206973206e6f742077686974656c6973746564604482015290519081900360640190fd5b600a5462010000900461ffff1615612a4a57600a5460009061297f906103e89061297390859062010000900461ffff166133a4565b9063ffffffff6133fd16565b90506000612993838363ffffffff61336216565b6001600160a01b0386166000908152601d60205260409020549091506129bf908263ffffffff61336216565b6001600160a01b038087166000908152601d602052604080822093909355908616815220546129f4908263ffffffff612d8816565b6001600160a01b038086166000818152601d602090815260409182902094909455805185815290519193928916926000805160206137dd83398151915292918290030190a3612a4385836126d2565b5050611910565b6001600160a01b0383166000908152601d6020526040902054612a73908263ffffffff61336216565b6001600160a01b038085166000908152601d60205260408082209390935590841681522054612aa8908263ffffffff612d8816565b6001600160a01b038084166000818152601d602090815260409182902094909455805185815290519193928716926000805160206137dd83398151915292918290030190a3505050565b60008184841115612b815760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b46578181015183820152602001612b2e565b50505050905090810190601f168015612b735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006001600160a01b038216612bd05760405162461bcd60e51b81526004018080602001828103825260228152602001806137996022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b612bf9826123e7565b15612c355760405162461bcd60e51b81526004018080602001828103825260298152602001806138216029913960400191505060405180910390fd5b612c3e816123e7565b612c795760405162461bcd60e51b815260040180806020018281038252602c815260200180613663602c913960400191505060405180910390fd5b6001600160a01b03808316600081815260216020908152604080832080549587166001600160a01b03199687168117909155835260228252822080546001818101835591845291909220018054909316909117909155600b54612ce19163ffffffff612d8816565b600b556040516001600160a01b0380831691908416907f14fc63225bc85ae786ffdbede4d2704b3f0805ee2bb7129abb2d10376803514090600090a35050565b612d2b8282612b89565b612d665760405162461bcd60e51b81526004018080602001828103825260218152602001806136e26021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600082820183811015612de2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600854600954612dff908363ffffffff612d8816565b1115612e52576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20746f74616c20737570706c7920636170206578636565646564604482015290519081900360640190fd5b6001600160a01b038216612ead576040805162461bcd60e51b815260206004820152601f60248201527f564f4b454e3a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600954612ec0908263ffffffff612d8816565b6009556001600160a01b0382166000908152601d6020526040902054612eec908263ffffffff612d8816565b6001600160a01b0383166000818152601d6020908152604091829020939093558051848152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805182815290516001600160a01b038416916000916000805160206137dd8339815191529181900360200190a35050565b6001600160a01b038216612a4a5760405162461bcd60e51b81526004018080602001828103825260248152602001806135ed6024913960400191505060405180910390fd5b60008082815b600f81101561306e576001600160a01b038083166000908152602160205260409020541680158015906130015750826001600160a01b0316816001600160a01b031614155b801561302457506001600160a01b03811660009081526022602052604090205482105b15613064576130423082600e85600f811061303b57fe5b0154612f71565b613061600e83600f811061305257fe5b0154869063ffffffff612d8816565b94505b9150600101612fbc565b5061308a836127f3600d54600c5461336290919063ffffffff16565b9150811561309c5761309c30836126d2565b6118303085600d54612f71565b6008546009546130bf908463ffffffff612d8816565b1115613112576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20746f74616c20737570706c7920636170206578636565646564604482015290519081900360640190fd5b6001600160a01b03831661316d576040805162461bcd60e51b815260206004820152601f60248201527f564f4b454e3a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600954613180908363ffffffff612d8816565b6009556001600160a01b0383166000908152601d60205260409020546131ac908363ffffffff612d8816565b6001600160a01b038085166000908152601d6020908152604080832094909455808052838220928516825291909152205460ff16613243576001600160a01b038381166000818152601f602090815260408083208054600180820183559185528385200180546001600160a01b031916968816968717905593835281805280832094835293905291909120805460ff191690911790555b806001600160a01b0316836001600160a01b03167fb854b64d06c0e6d93dc3f3697093e30cca6265297271ccd5f3ad69d6e82b40fb846040518082815260200191505060405180910390a36040805183815290516001600160a01b038516916000916000805160206137dd8339815191529181900360200190a3505050565b6001600160a01b0381166133075760405162461bcd60e51b815260040180806020018281038252602681526020018061357c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000612de283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612af2565b6000826133b357506000610f66565b828202828482816133c057fe5b0414612de25760405162461bcd60e51b815260040180806020018281038252602181526020018061372a6021913960400191505060405180910390fd5b6000612de283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836134895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b46578181015183820152602001612b2e565b5082848161349357fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134dd5782800160ff1982351617855561350a565b8280016001018555821561350a579182015b8281111561350a5782358255916020019190600101906134ef565b5061351692915061351a565b5090565b610f0991905b80821115613516576000815560010161352056fe564f4b454e3a20617070726f766520746f20746865207a65726f2061646472657373564f4b454e3a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734275726e696e674d6f64653a2076616c75652069732067726561746572207468616e2031303030564f4b454e3a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365564f4b454e3a20726563697069656e7420697320746865207a65726f2061646472657373564f4b454e3a20617070726f7665206578636565647320617661696c61626c652062616c616e6365564f4b454e2057686974656c6973743a206261746368206c656e677468206973206e6f74206d6174636857686974656c6973743a20726566657265654163636f756e74206973206e6f742077686974656c69737465644f776e61626c653a2063616c6c657220697320746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6557697468647261773a20726563697069656e7420697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7750726f7879526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050726f787920726f6c654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373564f4b454e3a206275726e20616d6f756e7420657863656564732062616c616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef564f4b454e3a20617070726f76652066726f6d20746865207a65726f206164647265737357686974656c6973743a206163636f756e7420697320616c72656164792077686974656c69737465645265736375653a20726563697069656e7420697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206e6577206f776e65722061646472657373564f4b454e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a265627a7a723158204e26dd44b55a6a43ffa435fee457b7473bdf9e5207a533c9bf8b7c7dac94d4cc64736f6c634300050b0032

Deployed Bytecode Sourcemap

9597:23638:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15609:9;:13;15605:80;;15644:29;;;15663:9;15644:29;;;;15651:10;;15644:29;;;;;;;;;;15605:80;9597:23638;15763:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15763:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15763:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21935:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21935:162:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21935:162:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;31812:256;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31812:256:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31812:256:0;;;;:::i;28752:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28752:98:0;;;:::i;32685:124::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32685:124:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;9345:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9345:197:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9345:197:0;;;;:::i;16427:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16427:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;13647:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13647:127:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13647:127:0;-1:-1:-1;;;;;13647:127:0;;:::i;19486:594::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19486:594:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19486:594:0;;;;;;;;;;;;;;;;;:::i;28558:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28558:101:0;;;:::i;13399:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13399:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13399:108:0;-1:-1:-1;;;;;13399:108:0;;:::i;29568:512::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29568:512:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29568:512:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;29568:512:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29568:512:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29568:512:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29568:512:0;;;;;;;;-1:-1:-1;29568:512:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;29568:512:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29568:512:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29568:512:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29568:512:0;;-1:-1:-1;29568:512:0;;-1:-1:-1;;;;;29568:512:0:i;6296:104::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6296:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6296:104:0;-1:-1:-1;;;;;6296:104:0;;:::i;14890:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14890:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14890:137:0;-1:-1:-1;;;;;14890:137:0;;:::i;16108:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16108:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29327:132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29327:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29327:132:0;-1:-1:-1;;;;;29327:132:0;;:::i;16271:75::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16271:75:0;;;:::i;22620:220::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22620:220:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22620:220:0;;;;;;;;:::i;21119:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21119:157:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21119:157:0;;;;;;;;:::i;20236:132::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20236:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20236:132:0;;:::i;32402:208::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32402:208:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32402:208:0;;;;:::i;28926:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28926:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28926:116:0;-1:-1:-1;;;;;28926:116:0;;:::i;:::-;;;;-1:-1:-1;;;;;28926:116:0;;;;;;;;;;;;;;8193:343;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8193:343:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8193:343:0;;;;;;;;:::i;17740:143::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17740:143:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17740:143:0;-1:-1:-1;;;;;17740:143:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17740:143:0;;;;;;;;;;;;;;;;;8955:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8955:78:0;;;:::i;27974:90::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27974:90:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27974:90:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;27974:90:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27974:90:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;27974:90:0;;-1:-1:-1;27974:90:0;-1:-1:-1;27974:90:0;:::i;16605:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16605:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16605:110:0;-1:-1:-1;;;;;16605:110:0;;:::i;7213:334::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7213:334:0;;;:::i;20702:276::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20702:276:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20702:276:0;;;;;;;;:::i;5850:149::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5850:149:0;;;:::i;:::-;;;;-1:-1:-1;;;;;5850:149:0;;;;;;;;;;;;;;;;;;;;;;;;12680:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12680:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12680:129:0;-1:-1:-1;;;;;12680:129:0;;:::i;15914:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15914:87:0;;;:::i;14616:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14616:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14616:129:0;-1:-1:-1;;;;;14616:129:0;;:::i;12430:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12430:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12430:109:0;-1:-1:-1;;;;;12430:109:0;;:::i;32882:350::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32882:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32882:350:0;;;;:::i;23026:271::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23026:271:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23026:271:0;;;;;;;;:::i;18274:737::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18274:737:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18274:737:0;;;;;;;;:::i;14366:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14366:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14366:109:0;-1:-1:-1;;;;;14366:109:0;;:::i;32182:82::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32182:82:0;;;:::i;12954:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12954:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12954:137:0;-1:-1:-1;;;;;12954:137:0;;:::i;28186:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28186:95:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28186:95:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28186:95:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28186:95:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;28186:95:0;;-1:-1:-1;28186:95:0;-1:-1:-1;28186:95:0;:::i;13918:135::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13918:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13918:135:0;-1:-1:-1;;;;;13918:135:0;;:::i;29114:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29114:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29114:129:0;-1:-1:-1;;;;;29114:129:0;;:::i;16805:330::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16805:330:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16805:330:0;-1:-1:-1;;;;;16805:330:0;;:::i;7673:409::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7673:409:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7673:409:0;;;;;;;;;;;;;;;;;:::i;28366:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28366:122:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28366:122:0;-1:-1:-1;;;;;28366:122:0;;:::i;22300:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22300:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22300:134:0;;;;;;;;;;:::i;21462:237::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21462:237:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21462:237:0;;;;;;;;;;;;;;;;;:::i;6978:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6978:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6978:109:0;-1:-1:-1;;;;;6978:109:0;;:::i;15763:83::-;15833:5;15826:12;;;;;;;;-1:-1:-1;;15826:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15800:13;;15826:12;;15833:5;;15826:12;;15833:5;15826:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15763:83;;:::o;21935:162::-;9192:7;;22014:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;22031:36;22040:10;22052:7;22061:5;22031:8;:36::i;:::-;-1:-1:-1;22085:4:0;9221:1;21935:162;;;;:::o;31812:256::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;31881:17;:25;;-1:-1:-1;;31881:25:0;;;;;;;;;;31923:17;31919:142;;;31962:24;;;;;;;31919:142;;;32024:25;;;;;;;31919:142;31812:256;:::o;28752:98::-;28825:17;;;;28752:98;:::o;32685:124::-;32762:16;;;;;;;:20;;;;32685:124::o;9345:197::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;9406:7;:15;;-1:-1:-1;;;;9406:15:0;-1:-1:-1;;;9406:15:0;;;;;;;;;;;;;;9438:7;;;9434:101;;;9467:8;;;;;;;9434:101;;;9513:10;;;;;;;9345:197;:::o;16427:91::-;16498:12;;16427:91;:::o;13647:127::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;13710:21;:8;13723:7;13710:21;:12;:21;:::i;:::-;13747:19;;-1:-1:-1;;;;;13747:19:0;;;;;;;;13647:127;:::o;19486:594::-;9192:7;;19589:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19627:26:0;;19648:4;19627:26;;:53;;-1:-1:-1;;;;;;19657:23:0;;;19627:53;19623:426;;;19697:25;19703:10;19715:6;19697:5;:25::i;:::-;19623:426;;;19794:16;19813:35;19833:6;19841;19813:19;:35::i;:::-;19794:54;;19865:38;19875:6;19883:9;19894:8;19865:9;:38::i;:::-;19918:119;19927:6;19935:10;19947:89;19983:8;19947:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19947:19:0;;;;;;:11;:19;;;;;;;;19967:10;19947:31;;;;;;;;;:89;;:35;:89;:::i;:::-;19918:8;:119::i;:::-;19623:426;;-1:-1:-1;20068:4:0;19486:594;;;;;:::o;28558:101::-;28634:17;;28558:101;:::o;13399:108::-;13454:4;13478:21;:8;13491:7;13478:21;:12;:21;:::i;29568:512::-;29678:4;13220:19;13228:10;13220:7;:19::i;:::-;13212:78;;;;-1:-1:-1;;;13212:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29722:15;:22;29703:8;:15;:41;29695:96;;;;-1:-1:-1;;;29695:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29809:9;29804:245;29828:8;:15;29824:1;:19;29804:245;;;29892:1;-1:-1:-1;;;;;29869:25:0;:8;29878:1;29869:11;;;;;;;;;;;;;;-1:-1:-1;;;;;29869:25:0;;;:54;;;;;29899:24;29911:8;29920:1;29911:11;;;;;;;;;;;;;;29899;:24::i;:::-;29898:25;29869:54;:89;;;;;29927:31;29939:15;29955:1;29939:18;;;;;;;29927:31;29865:173;;;29979:43;29990:8;29999:1;29990:11;;;;;;;;;;;;;;30003:15;30019:1;30003:18;;;;;;;;;;;;;;29979:10;:43::i;:::-;29845:3;;29804:245;;6296:104;6351:4;6386:6;-1:-1:-1;;;;;6386:6:0;;;6375:17;;;;6296:104::o;14890:137::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;14957:24;:8;14973:7;14957:24;:15;:24;:::i;:::-;14997:22;;-1:-1:-1;;;;;14997:22:0;;;;;;;;14890:137;:::o;16108:83::-;16174:9;;;;16108:83;:::o;29327:132::-;-1:-1:-1;;;;;29425:19:0;29398:7;29425:19;;;:10;:19;;;;;:26;;29327:132::o;16271:75::-;16334:4;;16271:75;:::o;22620:220::-;9192:7;;22714:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;22740:10;22761:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22761:32:0;;;;;;;;;;22731:79;;22740:10;22752:7;;22761:48;;22798:10;22761:48;:36;:48;:::i;21119:157::-;9192:7;;21207:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;14184:20;14193:10;14184:8;:20::i;:::-;14176:81;;;;-1:-1:-1;;;14176:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21224:22;21230:7;21239:6;21224:5;:22::i;20236:132::-;9192:7;;20296:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;20313:25;20319:10;20331:6;20313:5;:25::i;:::-;-1:-1:-1;20356:4:0;20236:132;;;:::o;32402:208::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;32463:9;:17;;-1:-1:-1;;32463:17:0;;;;;;;;;;;;;;;;32497:9;;;32493:110;;;32528:12;;;;;;;32493:110;;;32578:13;;;;;;;32402:208;:::o;28926:116::-;-1:-1:-1;;;;;29017:17:0;;;28990:7;29017:17;;;:8;:17;;;;;;;;28926:116::o;8193:343::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8297:23:0;;8289:75;;;;-1:-1:-1;;;8289:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8403:4;8395:21;8437:17;;;;8429:62;;;;;-1:-1:-1;;;8429:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8502:26;;-1:-1:-1;;;;;8502:18:0;;;:26;;;;;8521:6;;8502:26;;;;8521:6;8502:18;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8502:26:0;6199:1;8193:343;;:::o;17740:143::-;-1:-1:-1;;;;;17854:21:0;;;;;;:12;:21;;;;;;;;;17842:33;;;;;;;;;;;;;;;;;17799:30;;17842:33;;;17854:21;17842:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17842:33:0;;;;;;;;;;;;;;;;;;;;;;;17740:143;;;:::o;8955:78::-;9018:7;;-1:-1:-1;;;9018:7:0;;;;;8955:78::o;27974:90::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;28043:13;:5;28051;;28043:13;:::i;:::-;;27974:90;;:::o;16605:110::-;-1:-1:-1;;;;;16689:18:0;16662:7;16689:18;;;:9;:18;;;;;;;16605:110::o;7213:334::-;7280:9;;-1:-1:-1;;;;;7280:9:0;7266:10;:23;7258:80;;;;-1:-1:-1;;;7258:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7357:10;7349:72;;;;-1:-1:-1;;;7349:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7457:6;;;7439:37;;7465:10;;-1:-1:-1;;;;;7457:6:0;;;;7439:37;;;7487:6;:19;;-1:-1:-1;;;;;;7487:19:0;;;7496:10;7487:19;;;;;7517:22;;;;;;;7213:334::o;20702:276::-;9192:7;;20783:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;20800:22;20806:7;20815:6;20800:5;:22::i;:::-;20833:115;20842:7;20851:10;20863:84;20900:6;20863:84;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20863:20:0;;;;;;:11;:20;;;;;;;;20884:10;20863:32;;;;;;;;;:84;;:36;:84;:::i;5850:149::-;5888:20;5954:6;;5982:9;-1:-1:-1;;;;;5954:6:0;;;;5982:9;;;5850:149::o;12680:129::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;12744:21;:8;12757:7;12744:21;:12;:21;:::i;:::-;12781:20;;-1:-1:-1;;;;;12781:20:0;;;;;;;;12680:129;:::o;15914:87::-;15986:7;15979:14;;;;;;;;-1:-1:-1;;15979:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15953:13;;15979:14;;15986:7;;15979:14;;15986:7;15979:14;;;;;;;;;;;;;;;;;;;;;;;;14616:129;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;14680:21;:8;14693:7;14680:21;:12;:21;:::i;:::-;14717:20;;-1:-1:-1;;;;;14717:20:0;;;;;;;;14616:129;:::o;12430:109::-;12486:4;12510:21;:8;12523:7;12510:21;:12;:21;:::i;32882:350::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;32965:4;32956:5;:13;;;;32948:65;;;;-1:-1:-1;;;32948:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33030:9;;;;33026:199;;33056:16;:24;;-1:-1:-1;;33056:24:0;;;;;;;;;33100:15;;;;-1:-1:-1;;33100:15:0;33026:199;;;33157:16;:20;;-1:-1:-1;;33157:20:0;;;33197:16;;;;33176:1;;33197:16;32882:350;:::o;23026:271::-;9192:7;;23125:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;23142:125;23151:10;23163:7;23172:94;23209:15;23172:94;;;;;;;;;;;;;;;;;23184:10;23172:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;23172:32:0;;;;;;;;;;;:94;;:36;:94;:::i;18274:737::-;9192:7;;18357:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;18418:18;;18408:6;:28;:49;;;;-1:-1:-1;18440:17:0;;;;18408:49;:75;;;;;18461:22;18473:9;18461:11;:22::i;:::-;18408:103;;;;;18488:23;18500:10;18488:11;:23::i;:::-;18487:24;18408:103;18404:576;;;18528:52;18534:10;18554:4;18561:18;;18528:5;:52::i;:::-;18595:33;18606:10;18618:9;18595:10;:33::i;:::-;18643:35;18667:10;18643:23;:35::i;:::-;18404:576;;;-1:-1:-1;;;;;18728:26:0;;18749:4;18728:26;;:53;;-1:-1:-1;;;;;;18758:23:0;;;18728:53;18724:256;;;18798:25;18804:10;18816:6;18798:5;:25::i;18724:256::-;18895:73;18905:10;18917:9;18928:39;18948:10;18960:6;18928:19;:39::i;:::-;18895:9;:73::i;14366:109::-;14422:4;14446:21;:8;14459:7;14446:21;:12;:21;:::i;32182:82::-;32247:9;;;;;;;;32182:82::o;12954:137::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;13021:24;:8;13037:7;13021:24;:15;:24;:::i;:::-;13061:22;;-1:-1:-1;;;;;13061:22:0;;;;;;;;12954:137;:::o;28186:95::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;28258:15;:7;28268:5;;28258:15;:::i;13918:135::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;13984:24;:8;14000:7;13984:24;:15;:24;:::i;:::-;14024:21;;-1:-1:-1;;;;;14024:21:0;;;;;;;;13918:135;:::o;29114:129::-;-1:-1:-1;;;;;29216:19:0;;;;;;:10;:19;;;;;;;;;29209:26;;;;;;;;;;;;;;;;;29180:16;;29209:26;;;29216:19;29209:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29209:26:0;;;;;;;;;;;;;;;;;;;;;;29114:129;;;:::o;16805:330::-;-1:-1:-1;;;;;16908:21:0;;16863:16;16908:21;;;:12;:21;;;;;:28;16951:9;;16947:181;;16982:9;16977:140;17001:5;16997:1;:9;16977:140;;;-1:-1:-1;;;;;17056:21:0;;;;;;:12;:21;;;;;:24;;17043:58;;17056:21;17078:1;;17056:24;;;;;;;;;;;;;;;;;:44;;;-1:-1:-1;;;17056:44:0;;-1:-1:-1;;;;;17056:44:0;;;;;;;;;:24;;;;;:35;;:44;;;;;;;;;;;:24;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;17056:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17056:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17056:44:0;17043:8;;:58;:12;:58;:::i;:::-;17032:69;-1:-1:-1;17008:3:0;;16977:140;;;;16947:181;16805:330;;;;:::o;7673:409::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;7802:9;-1:-1:-1;;;;;7831:23:0;;7823:73;;;;-1:-1:-1;;;7823:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7925:31;;;-1:-1:-1;;;7925:31:0;;7950:4;7925:31;;;;;;7907:15;;-1:-1:-1;;;;;7925:16:0;;;;;:31;;;;;;;;;;;;;;;:16;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;7925:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7925:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7925:31:0;;-1:-1:-1;7977:17:0;;;;7969:60;;;;;-1:-1:-1;;;7969:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8040:6;-1:-1:-1;;;;;8040:15:0;;8056:9;8067:6;8040:34;;;;;;;;;;;;;-1:-1:-1;;;;;8040:34:0;-1:-1:-1;;;;;8040:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8040:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8040:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;;7673:409:0:o;28366:122::-;-1:-1:-1;;;;;28449:17:0;;;28425:4;28449:17;;;:8;:17;;;;;;;:31;;;28366:122::o;22300:134::-;-1:-1:-1;;;;;22399:18:0;;;22372:7;22399:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22300:134::o;21462:237::-;9192:7;;21596:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;14184:20;14193:10;14184:8;:20::i;:::-;14176:81;;;;-1:-1:-1;;;14176:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21613:56;21633:7;21642:6;21650:18;21613:19;:56::i;6978:109::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;7051:28;7070:8;7051:18;:28::i;27407:442::-;-1:-1:-1;;;;;27499:19:0;;27491:68;;;;-1:-1:-1;;;27491:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27578:21:0;;27570:68;;;;-1:-1:-1;;;27570:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27666:35;27686:7;27695:5;27666:19;:35::i;:::-;27657:5;:44;;27649:97;;;;-1:-1:-1;;;27649:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27759:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;27810:31;;;;;;;;;;;;;;;;;27407:442;;;:::o;3252:178::-;3330:18;3334:4;3340:7;3330:3;:18::i;:::-;3329:19;3321:63;;;;;-1:-1:-1;;;3321:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3395:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;3395:27:0;3418:4;3395:27;;;3252:178::o;26840:416::-;26907:16;26926:36;26946:7;26955:6;26926:19;:36::i;:::-;26907:55;;26996:70;27019:8;26996:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26996:18:0;;;;;;:9;:18;;;;;;;:70;;:22;:70;:::i;:::-;-1:-1:-1;;;;;26975:18:0;;;;;;:9;:18;;;;;:91;27092:12;;:26;;27109:8;27092:26;:16;:26;:::i;:::-;27077:12;:41;27136:4;;:18;;27145:8;27136:18;:8;:18;:::i;:::-;27129:4;:25;27170:23;;;;;;;;-1:-1:-1;;;;;27170:23:0;;;;;;;;;;;;;27209:39;;;;;;;;27235:1;;-1:-1:-1;;;;;27209:39:0;;;-1:-1:-1;;;;;;;;;;;27209:39:0;;;;;;;;26840:416;;;:::o;17249:394::-;17333:7;17353:19;17375:43;17398:19;17409:7;17398:10;:19::i;:::-;17375:18;17385:7;17375:9;:18::i;:::-;:22;:43;:22;:43;:::i;:::-;17353:65;;17445:11;17435:6;:21;17431:150;;17480:6;17473:13;;;;;17431:150;17519:15;;17515:66;;17558:11;-1:-1:-1;17551:18:0;;17515:66;17593:42;;;-1:-1:-1;;;17593:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23483:966;-1:-1:-1;;;;;23580:23:0;;23572:72;;;;-1:-1:-1;;;23572:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:9;;;;;;;:30;;;;;23675:16;23684:6;23675:8;:16::i;:::-;23674:17;23661:30;:54;;;;;23696:19;23705:9;23696:8;:19::i;:::-;23695:20;23661:54;23657:151;;;23740:19;23752:6;23740:11;:19::i;:::-;23732:64;;;;;-1:-1:-1;;;23732:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23824:16;;;;;;;:20;23820:622;;23892:16;;23861:17;;23881:38;;23914:4;;23881:28;;:6;;23892:16;;;;;23881:10;:28::i;:::-;:32;:38;:32;:38;:::i;:::-;23861:58;-1:-1:-1;23934:16:0;23953:21;:6;23861:58;23953:21;:10;:21;:::i;:::-;-1:-1:-1;;;;;24011:17:0;;;;;;:9;:17;;;;;;23934:40;;-1:-1:-1;24011:31:0;;23934:40;24011:31;:21;:31;:::i;:::-;-1:-1:-1;;;;;23991:17:0;;;;;;;:9;:17;;;;;;:51;;;;24080:20;;;;;;;:34;;24105:8;24080:34;:24;:34;:::i;:::-;-1:-1:-1;;;;;24057:20:0;;;;;;;:9;:20;;;;;;;;;:57;;;;24134:37;;;;;;;24057:20;;24134:37;;;;-1:-1:-1;;;;;;;;;;;24134:37:0;;;;;;;;24188:24;24194:6;24202:9;24188:5;:24::i;:::-;23820:622;;;;;-1:-1:-1;;;;;24276:17:0;;;;;;:9;:17;;;;;;:29;;24298:6;24276:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;24256:17:0;;;;;;;:9;:17;;;;;;:49;;;;24343:20;;;;;;;:32;;24368:6;24343:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;24320:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;24395:35;;;;;;;24320:20;;24395:35;;;;-1:-1:-1;;;;;;;;;;;24395:35:0;;;;;;;;23483:966;;;:::o;1098:192::-;1184:7;1220:12;1212:6;;;;1204:29;;;;-1:-1:-1;;;1204:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1204:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1256:5:0;;;1098:192::o;3796:203::-;3868:4;-1:-1:-1;;;;;3893:21:0;;3885:68;;;;-1:-1:-1;;;3885:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3971:20:0;:11;:20;;;;;;;;;;;;;;;3796:203::o;30214:469::-;30303:20;30315:7;30303:11;:20::i;:::-;30302:21;30294:75;;;;-1:-1:-1;;;30294:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30388:27;30400:14;30388:11;:27::i;:::-;30380:84;;;;-1:-1:-1;;;30380:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30477:17:0;;;;;;;:8;:17;;;;;;;;:34;;;;;-1:-1:-1;;;;;;30477:34:0;;;;;;;;30522:26;;:10;:26;;;;27:10:-1;;30477:34:0;23:18:-1;;;45:23;;30522:40:0;;;;;;;;;;;;;;;;;;;30593:17;;:24;;;:21;:24;:::i;:::-;30573:17;:44;30635:40;;-1:-1:-1;;;;;30635:40:0;;;;;;;;;;;;;30214:469;;:::o;3510:183::-;3590:18;3594:4;3600:7;3590:3;:18::i;:::-;3582:64;;;;-1:-1:-1;;;3582:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3657:20:0;3680:5;3657:20;;;;;;;;;;;:28;;-1:-1:-1;;3657:28:0;;;3510:183::o;461:181::-;519:7;551:5;;;575:6;;;;567:46;;;;;-1:-1:-1;;;567:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;633:1;461:181;-1:-1:-1;;;461:181:0:o;25209:432::-;25312:4;;25284:12;;:24;;25301:6;25284:24;:16;:24;:::i;:::-;:32;;25276:77;;;;;-1:-1:-1;;;25276:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25372:21:0;;25364:65;;;;;-1:-1:-1;;;25364:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25457:12;;:24;;25474:6;25457:24;:16;:24;:::i;:::-;25442:12;:39;-1:-1:-1;;;;;25513:18:0;;;;;;:9;:18;;;;;;:30;;25536:6;25513:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;25492:18:0;;;;;;:9;:18;;;;;;;;;:51;;;;25559:21;;;;;;;25492:18;;25559:21;;;;;;;;;25596:37;;;;;;;;-1:-1:-1;;;;;25596:37:0;;;25613:1;;-1:-1:-1;;;;;;;;;;;25596:37:0;;;;;;;;25209:432;;:::o;24635:344::-;-1:-1:-1;;;;;24728:23:0;;24720:72;;;;-1:-1:-1;;;24720:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30734:944;30803:27;;30894:7;30803:27;30912:439;30932:25;30928:1;:29;30912:439;;;-1:-1:-1;;;;;30999:19:0;;;30979:17;30999:19;;;:8;:19;;;;;;;31039:23;;;;;:49;;;31079:9;-1:-1:-1;;;;;31066:22:0;:9;-1:-1:-1;;;;;31066:22:0;;;31039:49;:85;;;;-1:-1:-1;;;;;;31092:21:0;;;;;;:10;:21;;;;;:28;:32;-1:-1:-1;31039:85:0;31035:267;;;31145:54;31159:4;31166:9;31177:18;31196:1;31177:21;;;;;;;;;31145:5;:54::i;:::-;31240:46;31264:18;31283:1;31264:21;;;;;;;;;31240:19;;:46;:23;:46;:::i;:::-;31218:68;;31035:267;31330:9;-1:-1:-1;30959:3:0;;30912:439;;;;31395:66;31441:19;31395:41;31418:17;;31395:18;;:22;;:41;;;;:::i;:66::-;31380:81;-1:-1:-1;31476:16:0;;31472:83;;31509:34;31523:4;31530:12;31509:5;:34::i;:::-;31622:48;31636:4;31643:7;31652:17;;31622:5;:48::i;25886:742::-;26035:4;;26007:12;;:24;;26024:6;26007:24;:16;:24;:::i;:::-;:32;;25999:77;;;;;-1:-1:-1;;;25999:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26095:21:0;;26087:65;;;;;-1:-1:-1;;;26087:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26180:12;;:24;;26197:6;26180:24;:16;:24;:::i;:::-;26165:12;:39;-1:-1:-1;;;;;26236:18:0;;;;;;:9;:18;;;;;;:30;;26259:6;26236:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;26215:18:0;;;;;;;:9;:18;;;;;;;;:51;;;;26284:28;;;;;;:57;;;;;;;;;;;;;26279:216;;-1:-1:-1;;;;;26358:21:0;;;;;;;:12;:21;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;26358:46:0;;;;;;;;;-1:-1:-1;;;;;;26358:46:0;;;;;;;;;26419:28;;;;;;;;;:57;;;;;;;;;;:64;;-1:-1:-1;;26419:64:0;;;;;;26279:216;26548:18;-1:-1:-1;;;;;26512:55:0;26531:7;-1:-1:-1;;;;;26512:55:0;;26540:6;26512:55;;;;;;;;;;;;;;;;;;26583:37;;;;;;;;-1:-1:-1;;;;;26583:37:0;;;26600:1;;-1:-1:-1;;;;;;;;;;;26583:37:0;;;;;;;;25886:742;;;:::o;6581:234::-;-1:-1:-1;;;;;6655:22:0;;6647:73;;;;-1:-1:-1;;;6647:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6759:6;;;6738:38;;-1:-1:-1;;;;;6738:38:0;;;;6759:6;;;6738:38;;;6787:9;:20;;-1:-1:-1;;;;;;6787:20:0;-1:-1:-1;;;;;6787:20:0;;;;;;;;;;6581:234::o;792:136::-;850:7;877:43;881:1;884;877:43;;;;;;;;;;;;;;;;;:3;:43::i;1405:250::-;1463:7;1487:6;1483:47;;-1:-1:-1;1517:1:0;1510:8;;1483:47;1554:5;;;1558:1;1554;:5;:1;1578:5;;;;;:10;1570:56;;;;-1:-1:-1;;;1570:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1822:132;1880:7;1907:39;1911:1;1914;1907:39;;;;;;;;;;;;;;;;;2227:7;2329:12;2322:5;2314:28;;;;-1:-1:-1;;;2314:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2314:28:0;;2364:1;2360;:5;;;;;;;2141:232;-1:-1:-1;;;;2141:232:0:o;9597:23638::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9597:23638:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9597:23638:0;;;-1:-1:-1;9597:23638:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://4e26dd44b55a6a43ffa435fee457b7473bdf9e5207a533c9bf8b7c7dac94d4cc
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.