ETH Price: $3,160.72 (-1.04%)
 

Overview

Max Total Supply

4,000,000,000 TORI

Holders

1,897

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 TORI

Value
$0.00
0x760bc0070606bea1b5e32e74906851c1e72b2387
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Storichain is a DApp and storytellers agreement protocol that create stories, distribute and manage story IPs. It is also a protocol that provides a contract for story creation contracts.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ToriToken

Compiler Version
v0.5.2+commit.1df8f40c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-07-11
*/

pragma solidity ^0.5.2;
// tested in solidity 0.5.8
// using openzeppelin-solidity-2.2.0

// import "../../utils/Address.sol";
/**
 * Utility library of inline functions on addresses
 */
library Address {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}


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

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

        return c;
    }

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

        return c;
    }

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

        return c;
    }

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

        return c;
    }

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



// import "./IERC20.sol";
/**
 * @title ERC20 interface
 * @dev see https://eips.ethereum.org/EIPS/eip-20
 */
interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function totalSupply() external view returns (uint256);

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

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

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

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


/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require((value == 0) || (token.allowance(address(this), spender) == 0));
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must equal true).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.

        require(address(token).isContract());

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success);

        if (returndata.length > 0) { // Return data is optional
            require(abi.decode(returndata, (bool)));
        }
    }
}
/////////////////////////////////////////////////////////////////////////
// ownership/Ownable.sol
///////////////////////////////////////////////////////////////////////
contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Approve an address to spend another addresses' tokens.
     * @param owner The address that owns the tokens.
     * @param spender The address that will spend the tokens.
     * @param value The number of tokens that can be spent.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        require(spender != address(0));
        require(owner != address(0));

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

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

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

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

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

    /**
     * @return the number of decimals of the token.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

/////////////////////////////////////////////////////////////////////////
// ownership/Ownable.sol
///////////////////////////////////////////////////////////////////////
contract Ownable {
    address private _owner;

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

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

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

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

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

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

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

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

/////////////////////////////////////////////////////////////////////////
// LockerPool Contract
/////////////////////////////////////////////////////////////////////////
contract LockerPool is Ownable {
    using SafeERC20 for IERC20;
    using SafeMath for uint256;

    IERC20 public token;
    uint256 public lockMonths;

    uint256 public INITIAL_LOCK_AMOUNT;

    uint256 public lockDays;
    uint256 public lockDaysTime;

    modifier checkBeneficiaryExist(address _addr) {
        require(beneficiaryList.length-1 != 0);
        require(userBeneficiaryMap[_addr] != 0);
        require(beneficiaryList[userBeneficiaryMap[_addr]].beneficiaryAddr == _addr);
        _;
    }

    function balanceOfPool() public view returns (uint256){
        return token.balanceOf(address(this));
    }

    function getRemainAmount() public view returns (uint256) {
        return INITIAL_LOCK_AMOUNT.sub(getAllocatedAmount());
    }

    function totalBeneficiaryCount() public view returns (uint256) {
        return beneficiaryList.length-1;
    }

    function getAllocatedAmount() public view returns (uint256){
        uint256 _beneficiaryCount = beneficiaryList.length;
        uint256 totalValue;
        for (uint256 i=1; i < _beneficiaryCount; i++) { // start from 1, for using 0 as null
            totalValue = totalValue.add(beneficiaryList[i].initialAmount);
        }
        return totalValue;
    }

    function _checkIsReleasable(address addr, uint256 releasingPointId) internal view returns(bool){
        if (beneficiaryList[userBeneficiaryMap[addr]].releasingPointStateList[releasingPointId] == false &&
            now >= beneficiaryList[userBeneficiaryMap[addr]].releasingPointDateList[releasingPointId]) {
                return true;
        }
        else{
            return false;
        }
    }

    function checkIsReleasableById(uint256 id, uint256 releasingPointId) internal view returns(bool){
        if (beneficiaryList[id].releasingPointStateList[releasingPointId] == false &&
            now >= beneficiaryList[id].releasingPointDateList[releasingPointId]) {
                return true;
        }
        else{
            return false;
        }
    }

    function getUnlockedAmountPocket(address addr) public checkBeneficiaryExist(addr) view returns (uint256) {

        uint256 totalValue;
        for (uint256 i=0; i < lockMonths; i++) {

            if (_checkIsReleasable(addr, i)){
                totalValue = totalValue.add(beneficiaryList[userBeneficiaryMap[addr]].releasingPointValueList[i]);
            }
        }
        return totalValue;
    }

    function getTransferCompletedAmount() public view returns (uint256) {
        uint256 _beneficiaryCount = beneficiaryList.length;
        uint256 totalValue;
        for (uint256 i=1; i < _beneficiaryCount; i++) { // start from 1, for using 0 as null
            totalValue = totalValue.add(beneficiaryList[i].transferCompletedAmount);
        }
        return totalValue;
    }

    function getReleasingPoint(uint256 beneficiaryId, uint256 index) public view returns (uint256 _now, uint256 date, uint256 value, bool state, bool releasable){
        return (now, beneficiaryList[beneficiaryId].releasingPointDateList[index], beneficiaryList[beneficiaryId].releasingPointValueList[index], beneficiaryList[beneficiaryId].releasingPointStateList[index], checkIsReleasableById(beneficiaryId, index));
    }

    event AllocateLockupToken(address indexed beneficiaryAddr, uint256 initialAmount, uint256 lockupPeriodStartDate, uint256 releaseStartDate, uint256 releaseEndDate, uint256 id);

    struct Beneficiary {
        uint256 id;
        address beneficiaryAddr;
        uint256 initialAmount;
        uint256 transferCompletedAmount;
        uint256 lockupPeriodStartDate;  // ownerGivedDate
        uint256 releaseStartDate; // lockupPeriodEnxDate
        uint256[] releasingPointDateList;
        uint256[] releasingPointValueList;
        bool[] releasingPointStateList;
        uint256 releaseEndDate;
        uint8 bType;
    }

    Beneficiary[] public beneficiaryList;
    mapping (address => uint256) public userBeneficiaryMap;
    /**
     * @dev Constructor that gives msg.sender all of existing tokens.
     */
    constructor (uint256 _lockMonths, uint256 _lockAmount, address poolOwner, address tokenAddr) public Ownable(poolOwner){
        require(36 >= _lockMonths); // optional
        token = IERC20(tokenAddr);
        lockMonths = _lockMonths;
        INITIAL_LOCK_AMOUNT = _lockAmount;
        lockDays = lockMonths * 30;  // 1 mounth ~= 30 days
        lockDaysTime = lockDays * 60 * 60 * 24; // 1 day == 86400 sec
        beneficiaryList.length = beneficiaryList.length.add(1); // start from 1, for using 0 as null
    }

    function allocateLockupToken(address _beneficiaryAddr, uint256 amount, uint8 _type) onlyOwner public returns (uint256 _beneficiaryId) {
        require(userBeneficiaryMap[_beneficiaryAddr] == 0);  // already check
        require(getRemainAmount() >= amount);
        Beneficiary memory beneficiary = Beneficiary({
            id: beneficiaryList.length,
            beneficiaryAddr: _beneficiaryAddr,
            initialAmount: amount,
            transferCompletedAmount: 0,
            lockupPeriodStartDate: uint256(now), // now == block.timestamp
            releaseStartDate: uint256(now).add(lockDaysTime),
            releasingPointDateList: new uint256[](lockMonths), // not return in ABCI v1
            releasingPointValueList: new uint256[](lockMonths),
            releasingPointStateList: new bool[](lockMonths),
            releaseEndDate: 0,
            bType: _type
            });

        beneficiary.releaseEndDate = beneficiary.releaseStartDate.add(lockDaysTime);
        uint256 remainAmount = beneficiary.initialAmount;
        for (uint256 i=0; i < lockMonths; i++) {
            beneficiary.releasingPointDateList[i] = beneficiary.releaseStartDate.add(lockDaysTime.div(lockMonths).mul(i.add(1)));
            beneficiary.releasingPointStateList[i] = false;
            if (i.add(1) != lockMonths){
                beneficiary.releasingPointValueList[i] = uint256(beneficiary.initialAmount.div(lockMonths));
                remainAmount = remainAmount.sub(beneficiary.releasingPointValueList[i]);
            }
            else{
                beneficiary.releasingPointValueList[i] = remainAmount;
            }
        }

        beneficiaryList.push(beneficiary);
        userBeneficiaryMap[_beneficiaryAddr] = beneficiary.id;

        emit AllocateLockupToken(beneficiary.beneficiaryAddr, beneficiary.initialAmount, beneficiary.lockupPeriodStartDate, beneficiary.releaseStartDate, beneficiary.releaseEndDate, beneficiary.id);
        return beneficiary.id;
    }
    event Claim(address indexed beneficiaryAddr, uint256 indexed beneficiaryId, uint256 value);
    function claim () public checkBeneficiaryExist(msg.sender) returns (uint256) {
        uint256 unlockedAmount = getUnlockedAmountPocket(msg.sender);
        require(unlockedAmount > 0);

        uint256 totalValue;
        for (uint256 i=0; i < lockMonths; i++) {
            if (_checkIsReleasable(msg.sender, i)){
                beneficiaryList[userBeneficiaryMap[msg.sender]].releasingPointStateList[i] = true;
                totalValue = totalValue.add(beneficiaryList[userBeneficiaryMap[msg.sender]].releasingPointValueList[i]);
            }
        }
        require(unlockedAmount == totalValue);
        token.safeTransfer(msg.sender, totalValue);
        beneficiaryList[userBeneficiaryMap[msg.sender]].transferCompletedAmount = beneficiaryList[userBeneficiaryMap[msg.sender]].transferCompletedAmount.add(totalValue);
        emit Claim(beneficiaryList[userBeneficiaryMap[msg.sender]].beneficiaryAddr, beneficiaryList[userBeneficiaryMap[msg.sender]].id, totalValue);
        return totalValue;
    }
}

/////////////////////////////////////////////////////////////////////////
// ToriToken Contract
/////////////////////////////////////////////////////////////////////////
contract ToriToken is ERC20, ERC20Detailed {
    using SafeERC20 for IERC20;
    using SafeMath for uint256;
    uint8 public constant DECIMALS = 18;
    uint256 public constant INITIAL_SUPPLY = 4000000000 * (10 ** uint256(DECIMALS));

    uint256 public remainReleased = INITIAL_SUPPLY;

    address private _owner;

    // no lockup ( with addresses )
    address public initialSale = 0x4dEF0A02D30cdf62AB6e513e978dB8A58ed86B53;
    address public saleCPool = 0xF3963A437E0e156e8102414DE3a9CC6E38829ea1;
    address public ecoPool = 0xf6e25f35C3c5cF40035B7afD1e9F5198594f600e;
    address public reservedPool = 0x557e4529D5784D978fCF7A5a20a184a78AF597D5;
    address public marketingPool = 0xEeE05AfD6E1e02b6f86Dd1664689cC46Ab0D7B20;

    uint256 public initialSaleAmount = 600000000 ether;
    uint256 public saleCPoolAmount = 360000000 ether;
    uint256 public ecoPoolAmount = 580000000 ether;
    uint256 public reservedPoolAmount = 600000000 ether;
    uint256 public marketingPoolAmount = 80000000 ether;

    // with lockup ( with addresses )
    address public saleBPoolOwner = 0xB7F1ea2af2a9Af419F093f62bDD67Df914b0ff2E;
    address public airDropPoolOwner = 0x590d6d6817ed53142BF69F16725D596dAaE9a6Ce;
    address public companyPoolOwner = 0x1b0E91D484eb69424100A48c74Bfb450ea494445;
    address public productionPartnerPoolOwner = 0x0c0CD85EA55Ea1B6210ca89827FA15f9F10D56F6;
    address public advisorPoolOwner = 0x68F0D15D17Aa71afB14d72C97634977495dF4d0E;
    address public teamPoolOwner = 0x5A353e276F68558bEA884b13017026A6F1067951;

    uint256 public saleBPoolAmount = 420000000 ether;
    uint256 public airDropPoolAmount = 200000000 ether;
    uint256 public companyPoolAmount = 440000000 ether;
    uint256 public productionPartnerPoolAmount = 200000000 ether;
    uint256 public advisorPoolAmount = 120000000 ether;
    uint256 public teamPoolAmount = 400000000 ether;

    uint8 public saleBPoolLockupPeriod = 12;
    uint8 public airDropPoolLockupPeriod = 3;
    uint8 public companyPoolLockupPeriod = 12;
    uint8 public productionPartnerPoolLockupPeriod = 6;
    uint8 public advisorPoolLockupPeriod = 12;
    uint8 public teamPoolLockupPeriod = 24;

    LockerPool public saleBPool;
    LockerPool public airDropPool;
    LockerPool public companyPool;
    LockerPool public productionPartnerPool;
    LockerPool public advisorPool;
    LockerPool public teamPool;

    bool private _deployedOuter;
    bool private _deployedInner;

    function deployLockersOuter() public {
        require(!_deployedOuter);
        saleBPool = new LockerPool(saleBPoolLockupPeriod, saleBPoolAmount, saleBPoolOwner, address(this));
        airDropPool = new LockerPool(airDropPoolLockupPeriod, airDropPoolAmount, airDropPoolOwner, address(this));
        productionPartnerPool = new LockerPool(productionPartnerPoolLockupPeriod, productionPartnerPoolAmount, productionPartnerPoolOwner, address(this));
        _deployedOuter = true;
        _mint(address(saleBPool), saleBPoolAmount);
        _mint(address(airDropPool), airDropPoolAmount);
        _mint(address(productionPartnerPool), productionPartnerPoolAmount);
    }

    function deployLockersInner() public {
        require(!_deployedInner);
        companyPool = new LockerPool(companyPoolLockupPeriod, companyPoolAmount, companyPoolOwner, address(this));
        advisorPool = new LockerPool(advisorPoolLockupPeriod, advisorPoolAmount, advisorPoolOwner, address(this));
        teamPool = new LockerPool(teamPoolLockupPeriod, teamPoolAmount, teamPoolOwner, address(this));
        _deployedInner = true;
        _mint(address(companyPool), companyPoolAmount);
        _mint(address(advisorPool), advisorPoolAmount);
        _mint(address(teamPool), teamPoolAmount);
    }

    constructor () public ERC20Detailed("Storichain", "TORI", DECIMALS) {
        _mint(address(initialSale), initialSaleAmount);
        _mint(address(saleCPool), saleCPoolAmount);
        _mint(address(ecoPool), ecoPoolAmount);
        _mint(address(reservedPool), reservedPoolAmount);
        _mint(address(marketingPool), marketingPoolAmount);
        _deployedOuter = false;
        _deployedInner = false;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"advisorPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"marketingPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"productionPartnerPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"DECIMALS","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleBPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservedPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"productionPartnerPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"teamPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ecoPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorPoolLockupPeriod","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"remainReleased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialSale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleCPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropPoolOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleCPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleBPoolLockupPeriod","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleBPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deployLockersInner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"teamPoolOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initialSaleAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"productionPartnerPoolLockupPeriod","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"marketingPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deployLockersOuter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ecoPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleBPoolOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyPoolOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"teamPoolAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorPoolOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyPoolLockupPeriod","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservedPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropPoolLockupPeriod","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"teamPoolLockupPeriod","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"productionPartnerPoolOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

6080604052601260ff16600a0a63ee6b280002600655734def0a02d30cdf62ab6e513e978db8a58ed86b53600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f3963a437e0e156e8102414de3a9cc6e38829ea1600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f6e25f35c3c5cf40035b7afd1e9f5198594f600e600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073557e4529d5784d978fcf7a5a20a184a78af597d5600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073eee05afd6e1e02b6f86dd1664689cc46ab0d7b20600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b01f04ef12cb04cf158000000600d556b0129c8f71ad02e2a68000000600e556b01dfc3c700884a60c4000000600f556b01f04ef12cb04cf1580000006010556a422ca8b0a00a425000000060115573b7f1ea2af2a9af419f093f62bdd67df914b0ff2e601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073590d6d6817ed53142bf69f16725d596daae9a6ce601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731b0e91d484eb69424100a48c74bfb450ea494445601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730c0cd85ea55ea1b6210ca89827fa15f9f10d56f6601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507368f0d15d17aa71afb14d72c97634977495df4d0e601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735a353e276f68558bea884b13017026a6f1067951601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b015b6a759f4835dc240000006018556aa56fa5b99019a5c80000006019556b016bf59fcb70386cb8000000601a556aa56fa5b99019a5c8000000601b556a6342fd08f00f6378000000601c556b014adf4b7320334b90000000601d55600c601e60006101000a81548160ff021916908360ff1602179055506003601e60016101000a81548160ff021916908360ff160217905550600c601e60026101000a81548160ff021916908360ff1602179055506006601e60036101000a81548160ff021916908360ff160217905550600c601e60046101000a81548160ff021916908360ff1602179055506018601e60056101000a81548160ff021916908360ff1602179055503480156200051d57600080fd5b506040805190810160405280600a81526020017f53746f7269636861696e000000000000000000000000000000000000000000008152506040805190810160405280600481526020017f544f52490000000000000000000000000000000000000000000000000000000081525060128260039080519060200190620005a4929190620008ea565b508160049080519060200190620005bd929190620008ea565b5080600560006101000a81548160ff021916908360ff1602179055505050506200061b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d5462000753640100000000026401000000009004565b6200065a600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e5462000753640100000000026401000000009004565b62000699600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f5462000753640100000000026401000000009004565b620006d8600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660105462000753640100000000026401000000009004565b62000717600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660115462000753640100000000026401000000009004565b6000602360146101000a81548160ff0219169083151502179055506000602360156101000a81548160ff02191690831515021790555062000999565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200079057600080fd5b620007b581600254620008c864010000000002620022b5179091906401000000009004565b6002819055506200081c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620008c864010000000002620022b5179091906401000000009004565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110151515620008e057600080fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200092d57805160ff19168380011785556200095e565b828001600101855582156200095e579182015b828111156200095d57825182559160200191906001019062000940565b5b5090506200096d919062000971565b5090565b6200099691905b808211156200099257600081600090555060010162000978565b5090565b90565b61443380620009a96000396000f3fe60806040523480156200001157600080fd5b506004361062000339576000357c010000000000000000000000000000000000000000000000000000000090048063862adb7011620001c4578063ca6f02bc116200011c578063e6fe546d11620000ce578063f4e2bc8411620000a4578063f4e2bc841462000e81578063f69c90311462000ecd578063f745ba811462000ef3578063fe42fd111462000f195762000339565b8063e6fe546d1462000dc3578063efbace721462000e0f578063f0e63edf1462000e355762000339565b8063ca6f02bc1462000c38578063d9214b431462000c44578063daeb15a51462000c90578063dd62ed3e1462000cdc578063e139bd6e1462000d57578063e48661781462000da35762000339565b8063a5ae77931162000176578063a5ae77931462000afd578063a9059cbb1462000b1d578063aca8cf651462000b86578063b587376d1462000bac578063bbc7d0b91462000bcc578063bcdb43061462000c185762000339565b8063862adb70146200096e57806391485424146200099457806395d89b4114620009b4578063988e59941462000a3c578063a03f31d21462000a48578063a457c2d71462000a945762000339565b806336631fb31162000296578063420b506f11620002485780637c320853116200021e5780637c320853146200086a578063843e76c114620008b657806384833123146200090257806385c61287146200094e5762000339565b8063420b506f14620007a35780634276622f14620007c357806370a08231146200080f5762000339565b806336631fb3146200063c5780633896916614620006885780633950935114620006a85780633963650414620007115780633b68a9ca146200075d5780633d6641fe146200077d5762000339565b806323b872dd11620002f057806323b872dd14620004db5780632e0f262514620005645780632f206c14146200058a5780632ff2e9dc14620005d6578063313ce56714620005f65780633484c899146200061c5762000339565b806306fdde03146200033e578063095ea7b314620003c657806311fdff0c146200042f57806318160ddd146200047b5780631d0f8f2d146200049b57806321bc7cc414620004bb575b600080fd5b6200034862000f65565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156200038a5780820151818401526020810190506200036d565b50505050905090810190601f168015620003b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6200041560048036036040811015620003de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200100b565b604051808215151515815260200191505060405180910390f35b6200043962001024565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620004856200104a565b6040518082815260200191505060405180910390f35b620004a562001054565b6040518082815260200191505060405180910390f35b620004c56200105a565b6040518082815260200191505060405180910390f35b6200054a60048036036060811015620004f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001060565b604051808215151515815260200191505060405180910390f35b6200056e62001117565b604051808260ff1660ff16815260200191505060405180910390f35b620005946200111c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620005e062001142565b6040518082815260200191505060405180910390f35b6200060062001153565b604051808260ff1660ff16815260200191505060405180910390f35b620006266200116a565b6040518082815260200191505060405180910390f35b6200064662001170565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200069262001196565b6040518082815260200191505060405180910390f35b620006f760048036036040811015620006c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200119c565b604051808215151515815260200191505060405180910390f35b6200071b62001245565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620007676200126b565b6040518082815260200191505060405180910390f35b6200078762001271565b604051808260ff1660ff16815260200191505060405180910390f35b620007ad62001284565b6040518082815260200191505060405180910390f35b620007cd6200128a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000854600480360360208110156200082757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620012b0565b6040518082815260200191505060405180910390f35b62000874620012f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620008c06200131e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200090c62001344565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620009586200136a565b6040518082815260200191505060405180910390f35b6200097862001370565b604051808260ff1660ff16815260200191505060405180910390f35b6200099e62001383565b6040518082815260200191505060405180910390f35b620009be62001389565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000a00578082015181840152602081019050620009e3565b50505050905090810190601f16801562000a2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b62000a466200142f565b005b62000a5262001844565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000ae36004803603604081101562000aac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200186a565b604051808215151515815260200191505060405180910390f35b62000b0762001913565b6040518082815260200191505060405180910390f35b62000b6c6004803603604081101562000b3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001919565b604051808215151515815260200191505060405180910390f35b62000b9062001932565b604051808260ff1660ff16815260200191505060405180910390f35b62000bb662001945565b6040518082815260200191505060405180910390f35b62000bd66200194b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000c2262001971565b6040518082815260200191505060405180910390f35b62000c4262001977565b005b62000c4e62001d8c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000c9a62001db2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000d416004803603604081101562000cf457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001dd8565b6040518082815260200191505060405180910390f35b62000d6162001e5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000dad62001e85565b6040518082815260200191505060405180910390f35b62000dcd62001e8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000e1962001eb1565b604051808260ff1660ff16815260200191505060405180910390f35b62000e3f62001ec4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000e8b62001eea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000ed762001f10565b604051808260ff1660ff16815260200191505060405180910390f35b62000efd62001f23565b604051808260ff1660ff16815260200191505060405180910390f35b62000f2362001f36565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620010015780601f1062000fd55761010080835404028352916020019162001001565b820191906000526020600020905b81548152906001019060200180831162000fe357829003601f168201915b5050505050905090565b60006200101a33848462001f5c565b6001905092915050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60115481565b601b5481565b60006200106f848484620020c1565b6200110c84336200110685600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200229290919063ffffffff16565b62001f5c565b600190509392505050565b601281565b601e60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260ff16600a0a63ee6b28000281565b6000600560009054906101000a900460ff16905090565b60105481565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b60006200123b33846200123585600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620022b590919063ffffffff16565b62001f5c565b6001905092915050565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b601e60049054906101000a900460ff1681565b60065481565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b601e60009054906101000a900460ff1681565b60185481565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620014255780601f10620013f95761010080835404028352916020019162001425565b820191906000526020600020905b8154815290600101906020018083116200140757829003601f168201915b5050505050905090565b602360159054906101000a900460ff161515156200144c57600080fd5b601e60029054906101000a900460ff16601a54601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306200148d62002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001524573d6000803e3d6000fd5b50602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60049054906101000a900460ff16601c54601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630620015a662002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f0801580156200163d573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60059054906101000a900460ff16601d54601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630620016bf62002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001756573d6000803e3d6000fd5b50602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602360156101000a81548160ff021916908315150217905550620017e2602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a54620022d7565b62001812602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c54620022d7565b62001842602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d54620022d7565b565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006200190933846200190385600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200229290919063ffffffff16565b62001f5c565b6001905092915050565b600d5481565b600062001928338484620020c1565b6001905092915050565b601e60039054906101000a900460ff1681565b60195481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b602360149054906101000a900460ff161515156200199457600080fd5b601e60009054906101000a900460ff16601854601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630620019d562002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001a6c573d6000803e3d6000fd5b50601e60066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60019054906101000a900460ff16601954601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163062001aee62002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001b85573d6000803e3d6000fd5b50601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60039054906101000a900460ff16601b54601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163062001c0762002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001c9e573d6000803e3d6000fd5b50602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602360146101000a81548160ff02191690831515021790555062001d2a601e60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601854620022d7565b62001d5a601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601954620022d7565b62001d8a602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b54620022d7565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60029054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60019054906101000a900460ff1681565b601e60059054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562001f9957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151562001fd657600080fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620020fe57600080fd5b62002151816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200229290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620021e6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620022b590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000828211151515620022a457600080fd5b600082840390508091505092915050565b6000808284019050838110151515620022cd57600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200231457600080fd5b6200232b81600254620022b590919063ffffffff16565b60028190555062002384816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620022b590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b604051611fc680620024428339019056fe60806040523480156200001157600080fd5b5060405160808062001fc6833981018060405260808110156200003357600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505081806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350836024101515156200013157600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360028190555082600381905550601e600254026004819055506018603c80600454020202600581905550620001c66001600680549050620001e0640100000000026200159f179091906401000000009004565b600681620001d5919062000202565b50505050506200036f565b6000808284019050838110151515620001f857600080fd5b8091505092915050565b8154818355818111156200023257600b0281600b02836000526020600020918201910162000231919062000237565b5b505050565b620002f791905b80821115620002f3576000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160009055600382016000905560048201600090556005820160009055600682016000620002a99190620002fa565b600782016000620002bb9190620002fa565b600882016000620002cd91906200031d565b6009820160009055600a820160006101000a81549060ff021916905550600b016200023e565b5090565b90565b50805460008255906000526020600020908101906200031a919062000347565b50565b50805460008255601f01602090049060005260206000209081019062000344919062000347565b50565b6200036c91905b80821115620003685760008160009055506001016200034e565b5090565b90565b611c47806200037f6000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480638f32d59b116100bf578063bcba01211161008e578063bcba012114610401578063bce727481461041f578063f74cc27b1461048e578063fb6195af146104e6578063fc0c546a1461050457610133565b80638f32d59b146102c45780639e761bbb146102e65780639f46fc371461038b578063a62b4d59146103a957610133565b80631e7dd42e116101065780631e7dd42e146101b05780634e71d92d146102205780636e6ff8a91461023e578063864de5f31461025c5780638da5cb5b1461027a57610133565b80630cc349bd146101385780630f0a92d1146101565780631158808614610174578063160b890614610192575b600080fd5b61014061054e565b6040518082815260200191505060405180910390f35b61015e610554565b6040518082815260200191505060405180910390f35b61017c610564565b6040518082815260200191505060405180910390f35b61019a610661565b6040518082815260200191505060405180910390f35b6101e6600480360360408110156101c657600080fd5b8101908080359060200190929190803590602001909291905050506106c7565b6040518086815260200185815260200184815260200183151515158152602001821515151581526020019550505050505060405180910390f35b6102286107ab565b6040518082815260200191505060405180910390f35b610246610ca2565b6040518082815260200191505060405180910390f35b610264610ca8565b6040518082815260200191505060405180910390f35b610282610cae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102cc610cd7565b604051808215151515815260200191505060405180910390f35b610312600480360360208110156102fc57600080fd5b8101908080359060200190929190505050610d2e565b604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018381526020018260ff1660ff1681526020019850505050505050505060405180910390f35b610393610db2565b6040518082815260200191505060405180910390f35b6103eb600480360360208110156103bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610db8565b6040518082815260200191505060405180910390f35b610409610dd0565b6040518082815260200191505060405180910390f35b6104786004803603606081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803560ff169060200190929190505050610df3565b6040518082815260200191505060405180910390f35b6104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061132b565b6040518082815260200191505060405180910390f35b6104ee611513565b6040518082815260200191505060405180910390f35b61050c611579565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60025481565b6000600160068054905003905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561062157600080fd5b505afa158015610635573d6000803e3d6000fd5b505050506040513d602081101561064b57600080fd5b8101908080519060200190929190505050905090565b6000806006805490509050600080600190505b828110156106be576106af60068281548110151561068e57fe5b90600052602060002090600b0201600301548361159f90919063ffffffff16565b91508080600101915050610674565b50809250505090565b6000806000806000426006888154811015156106df57fe5b90600052602060002090600b0201600601878154811015156106fd57fe5b906000526020600020015460068981548110151561071757fe5b90600052602060002090600b02016007018881548110151561073557fe5b906000526020600020015460068a81548110151561074f57fe5b90600052602060002090600b02016008018981548110151561076d57fe5b90600052602060002090602091828204019190069054906101000a900460ff166107978b8b6115c0565b945094509450945094509295509295909350565b6000336000600160068054905003141515156107c657600080fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415151561081557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166006600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110151561087a57fe5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156108ce57600080fd5b60006108d93361132b565b90506000811115156108ea57600080fd5b600080600090505b600254811015610a3b576109063382611671565b15610a2e5760016006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110151561095b57fe5b90600052602060002090600b02016008018281548110151561097957fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550610a2b6006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811015156109f357fe5b90600052602060002090600b020160070182815481101515610a1157fe5b90600052602060002001548361159f90919063ffffffff16565b91505b80806001019150506108f2565b508082141515610a4a57600080fd5b610a973382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117a09092919063ffffffff16565b610b09816006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515610ae957fe5b90600052602060002090600b02016003015461159f90919063ffffffff16565b6006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515610b5757fe5b90600052602060002090600b0201600301819055506006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515610bba57fe5b90600052602060002090600b0201600001546006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515610c1a57fe5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf7836040518082815260200191505060405180910390a380935050505090565b60045481565b60055481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600681815481101515610d3d57fe5b90600052602060002090600b02016000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401549080600501549080600901549080600a0160009054906101000a900460ff16905088565b60035481565b60076020528060005260406000206000915090505481565b6000610dee610ddd611513565b60035461188d90919063ffffffff16565b905090565b6000610dfd610cd7565b1515610e0857600080fd5b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141515610e5657600080fd5b82610e5f610dd0565b10151515610e6c57600080fd5b610e74611a5f565b6101606040519081016040528060068054905081526020018673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200160008152602001428152602001610ed06005544261159f90919063ffffffff16565b8152602001600254604051908082528060200260200182016040528015610f065781602001602082028038833980820191505090505b508152602001600254604051908082528060200260200182016040528015610f3d5781602001602082028038833980820191505090505b508152602001600254604051908082528060200260200182016040528015610f745781602001602082028038833980820191505090505b508152602001600081526020018460ff168152509050610fa36005548260a0015161159f90919063ffffffff16565b8161012001818152505060008160400151905060008090505b60025481101561111c57611018611005610fe060018461159f90919063ffffffff16565b610ff76002546005546118af90919063ffffffff16565b6118d990919063ffffffff16565b8460a0015161159f90919063ffffffff16565b8360c001518281518110151561102a57fe5b906020019060200201818152505060008361010001518281518110151561104d57fe5b906020019060200201901515908115158152505060025461107860018361159f90919063ffffffff16565b1415156110ed5761109860025484604001516118af90919063ffffffff16565b8360e00151828151811015156110aa57fe5b90602001906020020181815250506110e68360e00151828151811015156110cd57fe5b906020019060200201518361188d90919063ffffffff16565b915061110f565b818360e001518281518110151561110057fe5b90602001906020020181815250505b8080600101915050610fbc565b506006829080600181540180825580915050906001820390600052602060002090600b0201600090919290919091506000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060190805190602001906111e0929190611ad3565b5060e08201518160070190805190602001906111fd929190611ad3565b5061010082015181600801908051906020019061121b929190611b20565b50610120820151816009015561014082015181600a0160006101000a81548160ff021916908360ff1602179055505050508160000151600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816020015173ffffffffffffffffffffffffffffffffffffffff167f613364de2e5ee0b93e119bbe44d1cb7b90a787dbcf8dcb2e5d6290389910734e836040015184608001518560a001518661012001518760000151604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a28160000151925050509392505050565b60008160006001600680549050031415151561134657600080fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415151561139557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166006600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811015156113fa57fe5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561144e57600080fd5b600080600090505b6002548110156115085761146a8582611671565b156114fb576114f86006600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811015156114c057fe5b90600052602060002090600b0201600701828154811015156114de57fe5b90600052602060002001548361159f90919063ffffffff16565b91505b8080600101915050611456565b508092505050919050565b6000806006805490509050600080600190505b828110156115705761156160068281548110151561154057fe5b90600052602060002090600b0201600201548361159f90919063ffffffff16565b91508080600101915050611526565b50809250505090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082840190508381101515156115b657600080fd5b8091505092915050565b60008015156006848154811015156115d457fe5b90600052602060002090600b0201600801838154811015156115f257fe5b90600052602060002090602091828204019190069054906101000a900460ff161515148015611658575060068381548110151561162b57fe5b90600052602060002090600b02016006018281548110151561164957fe5b90600052602060002001544210155b15611666576001905061166b565b600090505b92915050565b60008015156006600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811015156116c457fe5b90600052602060002090600b0201600801838154811015156116e257fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514801561178757506006600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110151561175a57fe5b90600052602060002090600b02016006018281548110151561177857fe5b90600052602060002001544210155b15611795576001905061179a565b600090505b92915050565b611888838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb90507c0100000000000000000000000000000000000000000000000000000000028484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611917565b505050565b600082821115151561189e57600080fd5b600082840390508091505092915050565b600080821115156118bf57600080fd5b600082848115156118cc57fe5b0490508091505092915050565b6000808314156118ec5760009050611911565b600082840290508284828115156118ff57fe5b0414151561190c57600080fd5b809150505b92915050565b6119368273ffffffffffffffffffffffffffffffffffffffff16611a4c565b151561194157600080fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083101515611992578051825260208201915060208101905060208303925061196d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f4576040519150601f19603f3d011682016040523d82523d6000602084013e6119f9565b606091505b5091509150811515611a0a57600080fd5b600081511115611a4657808060200190516020811015611a2957600080fd5b81019080805190602001909291905050501515611a4557600080fd5b5b50505050565b600080823b905060008111915050919050565b6101606040519081016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160608152602001606081526020016060815260200160008152602001600060ff1681525090565b828054828255906000526020600020908101928215611b0f579160200282015b82811115611b0e578251825591602001919060010190611af3565b5b509050611b1c9190611bc6565b5090565b82805482825590600052602060002090601f01602090048101928215611bb55791602002820160005b83821115611b8657835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302611b49565b8015611bb35782816101000a81549060ff0219169055600101602081600001049283019260010302611b86565b505b509050611bc29190611beb565b5090565b611be891905b80821115611be4576000816000905550600101611bcc565b5090565b90565b611c1891905b80821115611c1457600081816101000a81549060ff021916905550600101611bf1565b5090565b9056fea165627a7a723058202ef5b64c0505e269edc751ac2fbea1170a4e3617acee3fe29c22f58d63bfe1940029a165627a7a72305820cb314032be27c8de44f82e82e0cfbf8351243720d1f88a24b998c714409ab5c40029

Deployed Bytecode

0x60806040523480156200001157600080fd5b506004361062000339576000357c010000000000000000000000000000000000000000000000000000000090048063862adb7011620001c4578063ca6f02bc116200011c578063e6fe546d11620000ce578063f4e2bc8411620000a4578063f4e2bc841462000e81578063f69c90311462000ecd578063f745ba811462000ef3578063fe42fd111462000f195762000339565b8063e6fe546d1462000dc3578063efbace721462000e0f578063f0e63edf1462000e355762000339565b8063ca6f02bc1462000c38578063d9214b431462000c44578063daeb15a51462000c90578063dd62ed3e1462000cdc578063e139bd6e1462000d57578063e48661781462000da35762000339565b8063a5ae77931162000176578063a5ae77931462000afd578063a9059cbb1462000b1d578063aca8cf651462000b86578063b587376d1462000bac578063bbc7d0b91462000bcc578063bcdb43061462000c185762000339565b8063862adb70146200096e57806391485424146200099457806395d89b4114620009b4578063988e59941462000a3c578063a03f31d21462000a48578063a457c2d71462000a945762000339565b806336631fb31162000296578063420b506f11620002485780637c320853116200021e5780637c320853146200086a578063843e76c114620008b657806384833123146200090257806385c61287146200094e5762000339565b8063420b506f14620007a35780634276622f14620007c357806370a08231146200080f5762000339565b806336631fb3146200063c5780633896916614620006885780633950935114620006a85780633963650414620007115780633b68a9ca146200075d5780633d6641fe146200077d5762000339565b806323b872dd11620002f057806323b872dd14620004db5780632e0f262514620005645780632f206c14146200058a5780632ff2e9dc14620005d6578063313ce56714620005f65780633484c899146200061c5762000339565b806306fdde03146200033e578063095ea7b314620003c657806311fdff0c146200042f57806318160ddd146200047b5780631d0f8f2d146200049b57806321bc7cc414620004bb575b600080fd5b6200034862000f65565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156200038a5780820151818401526020810190506200036d565b50505050905090810190601f168015620003b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6200041560048036036040811015620003de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200100b565b604051808215151515815260200191505060405180910390f35b6200043962001024565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620004856200104a565b6040518082815260200191505060405180910390f35b620004a562001054565b6040518082815260200191505060405180910390f35b620004c56200105a565b6040518082815260200191505060405180910390f35b6200054a60048036036060811015620004f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001060565b604051808215151515815260200191505060405180910390f35b6200056e62001117565b604051808260ff1660ff16815260200191505060405180910390f35b620005946200111c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620005e062001142565b6040518082815260200191505060405180910390f35b6200060062001153565b604051808260ff1660ff16815260200191505060405180910390f35b620006266200116a565b6040518082815260200191505060405180910390f35b6200064662001170565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200069262001196565b6040518082815260200191505060405180910390f35b620006f760048036036040811015620006c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200119c565b604051808215151515815260200191505060405180910390f35b6200071b62001245565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620007676200126b565b6040518082815260200191505060405180910390f35b6200078762001271565b604051808260ff1660ff16815260200191505060405180910390f35b620007ad62001284565b6040518082815260200191505060405180910390f35b620007cd6200128a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000854600480360360208110156200082757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620012b0565b6040518082815260200191505060405180910390f35b62000874620012f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620008c06200131e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200090c62001344565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620009586200136a565b6040518082815260200191505060405180910390f35b6200097862001370565b604051808260ff1660ff16815260200191505060405180910390f35b6200099e62001383565b6040518082815260200191505060405180910390f35b620009be62001389565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000a00578082015181840152602081019050620009e3565b50505050905090810190601f16801562000a2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b62000a466200142f565b005b62000a5262001844565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000ae36004803603604081101562000aac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200186a565b604051808215151515815260200191505060405180910390f35b62000b0762001913565b6040518082815260200191505060405180910390f35b62000b6c6004803603604081101562000b3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001919565b604051808215151515815260200191505060405180910390f35b62000b9062001932565b604051808260ff1660ff16815260200191505060405180910390f35b62000bb662001945565b6040518082815260200191505060405180910390f35b62000bd66200194b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000c2262001971565b6040518082815260200191505060405180910390f35b62000c4262001977565b005b62000c4e62001d8c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000c9a62001db2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000d416004803603604081101562000cf457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001dd8565b6040518082815260200191505060405180910390f35b62000d6162001e5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000dad62001e85565b6040518082815260200191505060405180910390f35b62000dcd62001e8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000e1962001eb1565b604051808260ff1660ff16815260200191505060405180910390f35b62000e3f62001ec4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000e8b62001eea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000ed762001f10565b604051808260ff1660ff16815260200191505060405180910390f35b62000efd62001f23565b604051808260ff1660ff16815260200191505060405180910390f35b62000f2362001f36565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620010015780601f1062000fd55761010080835404028352916020019162001001565b820191906000526020600020905b81548152906001019060200180831162000fe357829003601f168201915b5050505050905090565b60006200101a33848462001f5c565b6001905092915050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60115481565b601b5481565b60006200106f848484620020c1565b6200110c84336200110685600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200229290919063ffffffff16565b62001f5c565b600190509392505050565b601281565b601e60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260ff16600a0a63ee6b28000281565b6000600560009054906101000a900460ff16905090565b60105481565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b60006200123b33846200123585600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620022b590919063ffffffff16565b62001f5c565b6001905092915050565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b601e60049054906101000a900460ff1681565b60065481565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b601e60009054906101000a900460ff1681565b60185481565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620014255780601f10620013f95761010080835404028352916020019162001425565b820191906000526020600020905b8154815290600101906020018083116200140757829003601f168201915b5050505050905090565b602360159054906101000a900460ff161515156200144c57600080fd5b601e60029054906101000a900460ff16601a54601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306200148d62002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001524573d6000803e3d6000fd5b50602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60049054906101000a900460ff16601c54601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630620015a662002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f0801580156200163d573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60059054906101000a900460ff16601d54601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630620016bf62002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001756573d6000803e3d6000fd5b50602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602360156101000a81548160ff021916908315150217905550620017e2602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a54620022d7565b62001812602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c54620022d7565b62001842602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d54620022d7565b565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006200190933846200190385600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200229290919063ffffffff16565b62001f5c565b6001905092915050565b600d5481565b600062001928338484620020c1565b6001905092915050565b601e60039054906101000a900460ff1681565b60195481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b602360149054906101000a900460ff161515156200199457600080fd5b601e60009054906101000a900460ff16601854601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630620019d562002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001a6c573d6000803e3d6000fd5b50601e60066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60019054906101000a900460ff16601954601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163062001aee62002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001b85573d6000803e3d6000fd5b50601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60039054906101000a900460ff16601b54601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163062001c0762002430565b808560ff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051809103906000f08015801562001c9e573d6000803e3d6000fd5b50602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602360146101000a81548160ff02191690831515021790555062001d2a601e60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601854620022d7565b62001d5a601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601954620022d7565b62001d8a602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b54620022d7565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60029054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60019054906101000a900460ff1681565b601e60059054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562001f9957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151562001fd657600080fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620020fe57600080fd5b62002151816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200229290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620021e6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620022b590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000828211151515620022a457600080fd5b600082840390508091505092915050565b6000808284019050838110151515620022cd57600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200231457600080fd5b6200232b81600254620022b590919063ffffffff16565b60028190555062002384816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620022b590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b604051611fc680620024428339019056fe60806040523480156200001157600080fd5b5060405160808062001fc6833981018060405260808110156200003357600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505081806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350836024101515156200013157600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360028190555082600381905550601e600254026004819055506018603c80600454020202600581905550620001c66001600680549050620001e0640100000000026200159f179091906401000000009004565b600681620001d5919062000202565b50505050506200036f565b6000808284019050838110151515620001f857600080fd5b8091505092915050565b8154818355818111156200023257600b0281600b02836000526020600020918201910162000231919062000237565b5b505050565b620002f791905b80821115620002f3576000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160009055600382016000905560048201600090556005820160009055600682016000620002a99190620002fa565b600782016000620002bb9190620002fa565b600882016000620002cd91906200031d565b6009820160009055600a820160006101000a81549060ff021916905550600b016200023e565b5090565b90565b50805460008255906000526020600020908101906200031a919062000347565b50565b50805460008255601f01602090049060005260206000209081019062000344919062000347565b50565b6200036c91905b80821115620003685760008160009055506001016200034e565b5090565b90565b611c47806200037f6000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480638f32d59b116100bf578063bcba01211161008e578063bcba012114610401578063bce727481461041f578063f74cc27b1461048e578063fb6195af146104e6578063fc0c546a1461050457610133565b80638f32d59b146102c45780639e761bbb146102e65780639f46fc371461038b578063a62b4d59146103a957610133565b80631e7dd42e116101065780631e7dd42e146101b05780634e71d92d146102205780636e6ff8a91461023e578063864de5f31461025c5780638da5cb5b1461027a57610133565b80630cc349bd146101385780630f0a92d1146101565780631158808614610174578063160b890614610192575b600080fd5b61014061054e565b6040518082815260200191505060405180910390f35b61015e610554565b6040518082815260200191505060405180910390f35b61017c610564565b6040518082815260200191505060405180910390f35b61019a610661565b6040518082815260200191505060405180910390f35b6101e6600480360360408110156101c657600080fd5b8101908080359060200190929190803590602001909291905050506106c7565b6040518086815260200185815260200184815260200183151515158152602001821515151581526020019550505050505060405180910390f35b6102286107ab565b6040518082815260200191505060405180910390f35b610246610ca2565b6040518082815260200191505060405180910390f35b610264610ca8565b6040518082815260200191505060405180910390f35b610282610cae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102cc610cd7565b604051808215151515815260200191505060405180910390f35b610312600480360360208110156102fc57600080fd5b8101908080359060200190929190505050610d2e565b604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018381526020018260ff1660ff1681526020019850505050505050505060405180910390f35b610393610db2565b6040518082815260200191505060405180910390f35b6103eb600480360360208110156103bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610db8565b6040518082815260200191505060405180910390f35b610409610dd0565b6040518082815260200191505060405180910390f35b6104786004803603606081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803560ff169060200190929190505050610df3565b6040518082815260200191505060405180910390f35b6104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061132b565b6040518082815260200191505060405180910390f35b6104ee611513565b6040518082815260200191505060405180910390f35b61050c611579565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60025481565b6000600160068054905003905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561062157600080fd5b505afa158015610635573d6000803e3d6000fd5b505050506040513d602081101561064b57600080fd5b8101908080519060200190929190505050905090565b6000806006805490509050600080600190505b828110156106be576106af60068281548110151561068e57fe5b90600052602060002090600b0201600301548361159f90919063ffffffff16565b91508080600101915050610674565b50809250505090565b6000806000806000426006888154811015156106df57fe5b90600052602060002090600b0201600601878154811015156106fd57fe5b906000526020600020015460068981548110151561071757fe5b90600052602060002090600b02016007018881548110151561073557fe5b906000526020600020015460068a81548110151561074f57fe5b90600052602060002090600b02016008018981548110151561076d57fe5b90600052602060002090602091828204019190069054906101000a900460ff166107978b8b6115c0565b945094509450945094509295509295909350565b6000336000600160068054905003141515156107c657600080fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415151561081557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166006600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110151561087a57fe5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156108ce57600080fd5b60006108d93361132b565b90506000811115156108ea57600080fd5b600080600090505b600254811015610a3b576109063382611671565b15610a2e5760016006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110151561095b57fe5b90600052602060002090600b02016008018281548110151561097957fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550610a2b6006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811015156109f357fe5b90600052602060002090600b020160070182815481101515610a1157fe5b90600052602060002001548361159f90919063ffffffff16565b91505b80806001019150506108f2565b508082141515610a4a57600080fd5b610a973382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117a09092919063ffffffff16565b610b09816006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515610ae957fe5b90600052602060002090600b02016003015461159f90919063ffffffff16565b6006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515610b5757fe5b90600052602060002090600b0201600301819055506006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515610bba57fe5b90600052602060002090600b0201600001546006600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515610c1a57fe5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf7836040518082815260200191505060405180910390a380935050505090565b60045481565b60055481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600681815481101515610d3d57fe5b90600052602060002090600b02016000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401549080600501549080600901549080600a0160009054906101000a900460ff16905088565b60035481565b60076020528060005260406000206000915090505481565b6000610dee610ddd611513565b60035461188d90919063ffffffff16565b905090565b6000610dfd610cd7565b1515610e0857600080fd5b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141515610e5657600080fd5b82610e5f610dd0565b10151515610e6c57600080fd5b610e74611a5f565b6101606040519081016040528060068054905081526020018673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200160008152602001428152602001610ed06005544261159f90919063ffffffff16565b8152602001600254604051908082528060200260200182016040528015610f065781602001602082028038833980820191505090505b508152602001600254604051908082528060200260200182016040528015610f3d5781602001602082028038833980820191505090505b508152602001600254604051908082528060200260200182016040528015610f745781602001602082028038833980820191505090505b508152602001600081526020018460ff168152509050610fa36005548260a0015161159f90919063ffffffff16565b8161012001818152505060008160400151905060008090505b60025481101561111c57611018611005610fe060018461159f90919063ffffffff16565b610ff76002546005546118af90919063ffffffff16565b6118d990919063ffffffff16565b8460a0015161159f90919063ffffffff16565b8360c001518281518110151561102a57fe5b906020019060200201818152505060008361010001518281518110151561104d57fe5b906020019060200201901515908115158152505060025461107860018361159f90919063ffffffff16565b1415156110ed5761109860025484604001516118af90919063ffffffff16565b8360e00151828151811015156110aa57fe5b90602001906020020181815250506110e68360e00151828151811015156110cd57fe5b906020019060200201518361188d90919063ffffffff16565b915061110f565b818360e001518281518110151561110057fe5b90602001906020020181815250505b8080600101915050610fbc565b506006829080600181540180825580915050906001820390600052602060002090600b0201600090919290919091506000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060190805190602001906111e0929190611ad3565b5060e08201518160070190805190602001906111fd929190611ad3565b5061010082015181600801908051906020019061121b929190611b20565b50610120820151816009015561014082015181600a0160006101000a81548160ff021916908360ff1602179055505050508160000151600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816020015173ffffffffffffffffffffffffffffffffffffffff167f613364de2e5ee0b93e119bbe44d1cb7b90a787dbcf8dcb2e5d6290389910734e836040015184608001518560a001518661012001518760000151604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a28160000151925050509392505050565b60008160006001600680549050031415151561134657600080fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415151561139557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166006600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811015156113fa57fe5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561144e57600080fd5b600080600090505b6002548110156115085761146a8582611671565b156114fb576114f86006600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811015156114c057fe5b90600052602060002090600b0201600701828154811015156114de57fe5b90600052602060002001548361159f90919063ffffffff16565b91505b8080600101915050611456565b508092505050919050565b6000806006805490509050600080600190505b828110156115705761156160068281548110151561154057fe5b90600052602060002090600b0201600201548361159f90919063ffffffff16565b91508080600101915050611526565b50809250505090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082840190508381101515156115b657600080fd5b8091505092915050565b60008015156006848154811015156115d457fe5b90600052602060002090600b0201600801838154811015156115f257fe5b90600052602060002090602091828204019190069054906101000a900460ff161515148015611658575060068381548110151561162b57fe5b90600052602060002090600b02016006018281548110151561164957fe5b90600052602060002001544210155b15611666576001905061166b565b600090505b92915050565b60008015156006600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811015156116c457fe5b90600052602060002090600b0201600801838154811015156116e257fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514801561178757506006600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110151561175a57fe5b90600052602060002090600b02016006018281548110151561177857fe5b90600052602060002001544210155b15611795576001905061179a565b600090505b92915050565b611888838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb90507c0100000000000000000000000000000000000000000000000000000000028484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611917565b505050565b600082821115151561189e57600080fd5b600082840390508091505092915050565b600080821115156118bf57600080fd5b600082848115156118cc57fe5b0490508091505092915050565b6000808314156118ec5760009050611911565b600082840290508284828115156118ff57fe5b0414151561190c57600080fd5b809150505b92915050565b6119368273ffffffffffffffffffffffffffffffffffffffff16611a4c565b151561194157600080fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083101515611992578051825260208201915060208101905060208303925061196d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f4576040519150601f19603f3d011682016040523d82523d6000602084013e6119f9565b606091505b5091509150811515611a0a57600080fd5b600081511115611a4657808060200190516020811015611a2957600080fd5b81019080805190602001909291905050501515611a4557600080fd5b5b50505050565b600080823b905060008111915050919050565b6101606040519081016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160608152602001606081526020016060815260200160008152602001600060ff1681525090565b828054828255906000526020600020908101928215611b0f579160200282015b82811115611b0e578251825591602001919060010190611af3565b5b509050611b1c9190611bc6565b5090565b82805482825590600052602060002090601f01602090048101928215611bb55791602002820160005b83821115611b8657835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302611b49565b8015611bb35782816101000a81549060ff0219169055600101602081600001049283019260010302611b86565b505b509050611bc29190611beb565b5090565b611be891905b80821115611be4576000816000905550600101611bcc565b5090565b90565b611c1891905b80821115611c1457600081816101000a81549060ff021916905550600101611bf1565b5090565b9056fea165627a7a723058202ef5b64c0505e269edc751ac2fbea1170a4e3617acee3fe29c22f58d63bfe1940029a165627a7a72305820cb314032be27c8de44f82e82e0cfbf8351243720d1f88a24b998c714409ab5c40029

Deployed Bytecode Sourcemap

26002:4252:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26002:4252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15150:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15150:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9576:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9576:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28381:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7729:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26983:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27756:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10197:228;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10197:228:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26118:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28229:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26160:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15466:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26925:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28335:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27823:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10951:203;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10951:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28417:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26872:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28134:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26248:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28263:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8039:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8039:106:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26371:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26449:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27163:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26817:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27936:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27587:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15300:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15300:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29209:613;;;:::i;:::-;;27505:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11685:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11685:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26760:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8789:140;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8789:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28077:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27642;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26678:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27699:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28522:679;;;:::i;:::-;;26525:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27082:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8484:131;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8484:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27246:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27880:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27422:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28029:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26599:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28299:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27982:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28182:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27329:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15150:83;15187:13;15220:5;15213:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15150:83;:::o;9576:148::-;9641:4;9658:36;9667:10;9679:7;9688:5;9658:8;:36::i;:::-;9712:4;9705:11;;9576:148;;;;:::o;28381:29::-;;;;;;;;;;;;;:::o;7729:91::-;7773:7;7800:12;;7793:19;;7729:91;:::o;26983:51::-;;;;:::o;27756:60::-;;;;:::o;10197:228::-;10276:4;10293:26;10303:4;10309:2;10313:5;10293:9;:26::i;:::-;10330:65;10339:4;10345:10;10357:37;10388:5;10357:8;:14;10366:4;10357:14;;;;;;;;;;;;;;;:26;10372:10;10357:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;10330:8;:65::i;:::-;10413:4;10406:11;;10197:228;;;;;:::o;26118:35::-;26151:2;26118:35;:::o;28229:27::-;;;;;;;;;;;;;:::o;26160:79::-;26151:2;26221:17;;26215:2;:23;26201:10;:38;26160:79;:::o;15466:83::-;15507:5;15532:9;;;;;;;;;;;15525:16;;15466:83;:::o;26925:51::-;;;;:::o;28335:39::-;;;;;;;;;;;;;:::o;27823:50::-;;;;:::o;10951:203::-;11031:4;11048:76;11057:10;11069:7;11078:45;11112:10;11078:8;:20;11087:10;11078:20;;;;;;;;;;;;;;;:29;11099:7;11078:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;11048:8;:76::i;:::-;11142:4;11135:11;;10951:203;;;;:::o;28417:26::-;;;;;;;;;;;;;:::o;26872:46::-;;;;:::o;28134:41::-;;;;;;;;;;;;;:::o;26248:46::-;;;;:::o;28263:29::-;;;;;;;;;;;;;:::o;8039:106::-;8094:7;8121:9;:16;8131:5;8121:16;;;;;;;;;;;;;;;;8114:23;;8039:106;;;:::o;26371:71::-;;;;;;;;;;;;;:::o;26449:69::-;;;;;;;;;;;;;:::o;27163:76::-;;;;;;;;;;;;;:::o;26817:48::-;;;;:::o;27936:39::-;;;;;;;;;;;;;:::o;27587:48::-;;;;:::o;15300:87::-;15339:13;15372:7;15365:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15300:87;:::o;29209:613::-;29266:14;;;;;;;;;;;29265:15;29257:24;;;;;;;;29321:23;;;;;;;;;;;29346:17;;29365:16;;;;;;;;;;;29391:4;29306:91;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29306:91:0;29292:11;;:105;;;;;;;;;;;;;;;;;;29437:23;;;;;;;;;;;29462:17;;29481:16;;;;;;;;;;;29507:4;29422:91;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29422:91:0;29408:11;;:105;;;;;;;;;;;;;;;;;;29550:20;;;;;;;;;;;29572:14;;29588:13;;;;;;;;;;;29611:4;29535:82;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29535:82:0;29524:8;;:93;;;;;;;;;;;;;;;;;;29645:4;29628:14;;:21;;;;;;;;;;;;;;;;;;29660:46;29674:11;;;;;;;;;;;29688:17;;29660:5;:46::i;:::-;29717;29731:11;;;;;;;;;;;29745:17;;29717:5;:46::i;:::-;29774:40;29788:8;;;;;;;;;;;29799:14;;29774:5;:40::i;:::-;29209:613::o;27505:73::-;;;;;;;;;;;;;:::o;11685:213::-;11770:4;11787:81;11796:10;11808:7;11817:50;11851:15;11817:8;:20;11826:10;11817:20;;;;;;;;;;;;;;;:29;11838:7;11817:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;11787:8;:81::i;:::-;11886:4;11879:11;;11685:213;;;;:::o;26760:50::-;;;;:::o;8789:140::-;8850:4;8867:32;8877:10;8889:2;8893:5;8867:9;:32::i;:::-;8917:4;8910:11;;8789:140;;;;:::o;28077:50::-;;;;;;;;;;;;;:::o;27642:::-;;;;:::o;26678:73::-;;;;;;;;;;;;;:::o;27699:50::-;;;;:::o;28522:679::-;28579:14;;;;;;;;;;;28578:15;28570:24;;;;;;;;28632:21;;;;;;;;;;;28655:15;;28672:14;;;;;;;;;;;28696:4;28617:85;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28617:85:0;28605:9;;:97;;;;;;;;;;;;;;;;;;28742:23;;;;;;;;;;;28767:17;;28786:16;;;;;;;;;;;28812:4;28727:91;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28727:91:0;28713:11;;:105;;;;;;;;;;;;;;;;;;28868:33;;;;;;;;;;;28903:27;;28932:26;;;;;;;;;;;28968:4;28853:121;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28853:121:0;28829:21;;:145;;;;;;;;;;;;;;;;;;29002:4;28985:14;;:21;;;;;;;;;;;;;;;;;;29017:42;29031:9;;;;;;;;;;;29043:15;;29017:5;:42::i;:::-;29070:46;29084:11;;;;;;;;;;;29098:17;;29070:5;:46::i;:::-;29127:66;29141:21;;;;;;;;;;;29165:27;;29127:5;:66::i;:::-;28522:679::o;26525:67::-;;;;;;;;;;;;;:::o;27082:74::-;;;;;;;;;;;;;:::o;8484:131::-;8556:7;8583:8;:15;8592:5;8583:15;;;;;;;;;;;;;;;:24;8599:7;8583:24;;;;;;;;;;;;;;;;8576:31;;8484:131;;;;:::o;27246:76::-;;;;;;;;;;;;;:::o;27880:47::-;;;;:::o;27422:76::-;;;;;;;;;;;;;:::o;28029:41::-;;;;;;;;;;;;;:::o;26599:72::-;;;;;;;;;;;;;:::o;28299:29::-;;;;;;;;;;;;;:::o;27982:40::-;;;;;;;;;;;;;:::o;28182:38::-;;;;;;;;;;;;;:::o;27329:86::-;;;;;;;;;;;;;:::o;13784:254::-;13896:1;13877:21;;:7;:21;;;;13869:30;;;;;;;;13935:1;13918:19;;:5;:19;;;;13910:28;;;;;;;;13978:5;13951:8;:15;13960:5;13951:15;;;;;;;;;;;;;;;:24;13967:7;13951:24;;;;;;;;;;;;;;;:32;;;;14015:7;13999:31;;14008:5;13999:31;;;14024:5;13999:31;;;;;;;;;;;;;;;;;;13784:254;;;:::o;12125:262::-;12227:1;12213:16;;:2;:16;;;;12205:25;;;;;;;;12261:26;12281:5;12261:9;:15;12271:4;12261:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;12243:9;:15;12253:4;12243:15;;;;;;;;;;;;;;;:44;;;;12314:24;12332:5;12314:9;:13;12324:2;12314:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;12298:9;:13;12308:2;12298:13;;;;;;;;;;;;;;;:40;;;;12369:2;12354:25;;12363:4;12354:25;;;12373:5;12354:25;;;;;;;;;;;;;;;;;;12125:262;;;:::o;2478:150::-;2536:7;2569:1;2564;:6;;2556:15;;;;;;;;2582:9;2598:1;2594;:5;2582:17;;2619:1;2612:8;;;2478:150;;;;:::o;2716:::-;2774:7;2794:9;2810:1;2806;:5;2794:17;;2835:1;2830;:6;;2822:15;;;;;;;;2857:1;2850:8;;;2716:150;;;;:::o;12739:269::-;12833:1;12814:21;;:7;:21;;;;12806:30;;;;;;;;12864:23;12881:5;12864:12;;:16;;:23;;;;:::i;:::-;12849:12;:38;;;;12919:29;12942:5;12919:9;:18;12929:7;12919:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;12898:9;:18;12908:7;12898:18;;;;;;;;;;;;;;;:50;;;;12985:7;12964:36;;12981:1;12964:36;;;12994:5;12964:36;;;;;;;;;;;;;;;;;;12739:269;;:::o;26002:4252::-;;;;;;;;;;:::o

Swarm Source

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