ETH Price: $4,037.63 (+4.71%)

Token

ERC-20: Cremanon (CRC)
 

Overview

Max Total Supply

1,000,000,000 CRC

Holders

4,040

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10 CRC

Value
$0.00
0xf83eedf279ad1748efcd148f73999752b426e7c3
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Cremanon

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity 0.5.0;

// File: node_modules\openzeppelin-solidity\contracts\token\ERC20\IERC20.sol

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through `transferFrom`. This is
     * zero by default.
     *
     * This value changes when `approve` or `transferFrom` are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * > 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
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: node_modules\openzeppelin-solidity\contracts\math\SafeMath.sol

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot 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, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC20\ERC20.sol

/**
 * @dev Implementation of the `IERC20` interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using `_mint`.
 * For a generic mechanism see `ERC20Mintable`.
 *
 * *For a detailed writeup see our guide [How to implement supply
 * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an `Approval` event is emitted on calls to `transferFrom`.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See `IERC20.approve`.
 */
contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) internal _balances;

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

    uint256 private _totalSupply;

    /**
     * @dev See `IERC20.totalSupply`.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See `IERC20.balanceOf`.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See `IERC20.transfer`.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See `IERC20.allowance`.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See `IERC20.approve`.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev See `IERC20.transferFrom`.
     *
     * Emits an `Approval` event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of `ERC20`;
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `value`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to `transfer`, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a `Transfer` event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

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

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a `Transfer` event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

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

     /**
     * @dev Destoys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a `Transfer` event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0), "ERC20: burn from the zero address");

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an `Approval` event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Destoys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See `_burn` and `_approve`.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
    }
}

// File: contracts\CremanonToken.sol

contract CremanonToken is ERC20 {
    string public name = ""; // solium-disable-line uppercase
    string public symbol = ""; // solium-disable-line uppercase
    uint8 public constant decimals = 18; // solium-disable-line uppercase
    uint256 public initialSupply = 0;

    constructor(string memory _name, string memory _symbol, uint256 _initialSupply) public {
        name = _name;
        symbol = _symbol;
        initialSupply = _initialSupply * 10**uint256(decimals);
        super._mint(msg.sender, initialSupply);
        owner = msg.sender;
    }

    //ownership
    address public owner;

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

    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

 /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(owner);
        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), "Already owner");
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }

    //crc contract
    address public crc;

    event CrcTransferred(
    address indexed previousCrc,
    address indexed newCrc
    );

    function transferCrc(address _newCrc) public onlyOwner {
        require(_newCrc != address(0), "Invalid Address");
        emit CrcTransferred(crc, _newCrc);
        crc = _newCrc;
    }
    
    modifier onlyCrc() {
        require(msg.sender == crc, "Not crc");
        _;
    }

    //mintable
    event Mint(address indexed to, uint256 amount);

    function mint(
        address _to,
        uint256 _amount
    )
      public onlyCrc
      returns (bool)
    {
        super._mint(_to, _amount);
        emit Mint(_to, _amount);
        return true;
    }

    //burnable
    event Burn(address indexed burner, uint256 value);

    function burn(address _who, uint256 _value) public onlyCrc returns (bool) {
        require(_value <= super.balanceOf(_who), "Balance is too small.");

        super._burn(_who, _value);
        emit Burn(_who, _value);

        return true;
    }
}

// File: contracts\Cremanon.sol

contract Cremanon is ERC20 {
    string public constant name = "Cremanon"; // solium-disable-line uppercase
    string public constant symbol = "CRC"; // solium-disable-line uppercase
    // string public constant name = "Cremanon"; // solium-disable-line uppercase
    // string public constant symbol = "CRC"; // solium-disable-line uppercase
    uint8 public constant decimals = 18; // solium-disable-line uppercase
    uint256 public constant initialSupply = 10 * 10000 * 10000 * (10 ** uint256(decimals));
    //CremanonToken private constant _crt = CremanonToken(0xF6E46Bc5cC050476c8ab0A82519f3623b5b7bFc5);

    address[] public stakeHolders;

    struct ProposalInfo {
        uint8 mode;
        uint256 amount;
        CremanonToken ct;
        mapping (address => bool) agreement;
    }
    mapping (address => ProposalInfo) public proposals;
    
    event AddStakeHolder(address indexed stakeHolder);
    event RemoveStakeHolder(address indexed stakeHolder);
    
    event MakeProposal(address indexed target, uint8 mode, uint256 amount, address token);
    event AgreeProposal(address indexed target, address stakeHolder);

    constructor() public {
        super._mint(msg.sender, initialSupply);
        owner = msg.sender;
    }

    modifier onlyStakeHolder() {
        bool validation = false;
        for (uint i=0; i < stakeHolders.length; i++){
            if (stakeHolders[i] == msg.sender) {
                validation = true;
                break;
            }
        }
        require(validation, "Not stake holder");
        _;
    }

    function addStakeHolder(address newStakeHolder) public onlyOwner {
        bool flag = false;
        for (uint i=0; i < stakeHolders.length; i++){
            if (stakeHolders[i] == newStakeHolder) flag = true;
        }
        require(!flag, "Already stake holder");
        stakeHolders.push(newStakeHolder);
        emit AddStakeHolder(newStakeHolder);
    }

    function removeStakeHolder(address oldStakeHolder) public onlyOwner {
        for (uint i=0; i < stakeHolders.length; i++){
            if (stakeHolders[i] == oldStakeHolder) {
                stakeHolders[i] = stakeHolders[stakeHolders.length - 1];
                stakeHolders.length--;
                emit RemoveStakeHolder(oldStakeHolder);
                break;
            }
        }
    }

    function makeProposal(address target, uint8 mode, uint256 amount, address token) public onlyOwner {
        proposals[target] = ProposalInfo(mode, amount, CremanonToken(token));
        for (uint i=0; i < stakeHolders.length; i++){
            proposals[target].agreement[stakeHolders[i]] = false;
        }
        emit MakeProposal(target, mode, amount, token);
    }

    function agreeProposal(address target) public onlyStakeHolder {
        proposals[target].agreement[msg.sender] = true;
        emit AgreeProposal(target, msg.sender);
        if (_checkAgreement(target)) {
            if (proposals[target].mode == 1) {
                mint(target, proposals[target].amount, proposals[target].ct);
                proposals[target].mode = 3;
            }
            else if (proposals[target].mode == 2) {
                burn(target, proposals[target].amount, proposals[target].ct);
                proposals[target].mode = 4;
            }
        }
    }

    
    function _checkAgreement(address target) internal view returns (bool) {
        uint num = 0;
        for (uint i=0; i < stakeHolders.length; i++){
            if (proposals[target].agreement[stakeHolders[i]]) {
              num++;
            }
        }
        if (stakeHolders.length == num) return true;
        else return false;
    }

    //crt contract
    // address public crt;

    // event CrtTransferred(
    // address indexed previousCrt,
    // address indexed newCrt
    // );

    // function transferCrt(address _newCrt) public onlyOwner {
    //     require(_newCrt != address(0), "Invalid Address");
    //     emit CrtTransferred(crt, _newCrt);
    //     crt = _newCrt;
    // }

    //token wallet contract
    address public tokenWallet;

    event TokenWalletTransferred(
    address indexed previousTokenWallet,
    address indexed newTokenWallet
    );

    function transferTokenWallet(address _newTokenWallet) public onlyOwner {
        require(_newTokenWallet != address(0), "Invalid Address");
        emit TokenWalletTransferred(tokenWallet, _newTokenWallet);
        tokenWallet = _newTokenWallet;
    }

    //ownership
    address public owner;

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

    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

 /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(owner);
        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), "Already owner");
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }

    //pausable
    event Pause();
    event Unpause();

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

    /**
    * @dev Modifier to make a function callable only when the contract is paused.
    */
    modifier whenPaused() {
        require(paused, "Not paused now");
        _;
    }

    /**
    * @dev called by the owner to pause, triggers stopped state
    */
    function pause() public onlyOwner whenNotPaused {
        paused = true;
        emit Pause();
    }

    /**
    * @dev called by the owner to unpause, returns to normal state
    */
    function unpause() public onlyOwner whenPaused {
        paused = false;
        emit Unpause();
    }

    //freezable
    event Frozen(address target);
    event Unfrozen(address target);

    mapping(address => bool) internal freezes;

    modifier whenNotFrozen() {
        require(!freezes[msg.sender], "Sender account is locked.");
        _;
    }

    function freeze(address _target) public onlyOwner {
        freezes[_target] = true;
        emit Frozen(_target);
    }

    function unfreeze(address _target) public onlyOwner {
        freezes[_target] = false;
        emit Unfrozen(_target);
    }

    function isFrozen(address _target) public view returns (bool) {
        return freezes[_target];
    }

    function transfer(
        address _to,
        uint256 _value
    )
      public
      whenNotFrozen
      whenNotPaused
      returns (bool)
    {
        releaseLock(msg.sender);
        return super.transfer(_to, _value);
    }

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
      public
      whenNotPaused
      returns (bool)
    {
        require(!freezes[_from], "From account is locked.");
        releaseLock(_from);
        return super.transferFrom(_from, _to, _value);
    }

    //mintable
    event Mint(address indexed to, uint256 amount);

    function mint(
        address _to,
        uint256 _amount,
        CremanonToken ct
    )
      internal
      returns (bool)
    {
        require(tokenWallet != address(0), "token wallet is not set");
        ct.mint(tokenWallet, _amount*10);
        // crt.call(abi.encodeWithSignature("mint(address,uint256)",_to, _amount*10));
        super._mint(_to, _amount);
        emit Mint(_to, _amount);
        
        return true;
    }

    //burnable
    event Burn(address indexed burner, uint256 value);

    function burn(address _who, uint256 _value, CremanonToken ct) internal {
        require(_value <= super.balanceOf(_who), "Balance is too small.");
        require(tokenWallet != address(0), "token wallet is not set");

        ct.burn(tokenWallet, _value*10);
        _burn(_who, _value);
        emit Burn(_who, _value);
    }

    //lockable
    struct LockInfo {
        uint256 releaseTime;
        uint256 balance;
    }
    mapping(address => LockInfo[]) internal lockInfo;

    event Lock(address indexed holder, uint256 value, uint256 releaseTime);
    event Unlock(address indexed holder, uint256 value);

    function balanceOf(address _holder) public view returns (uint256 balance) {
        uint256 lockedBalance = 0;
        for(uint256 i = 0; i < lockInfo[_holder].length ; i++ ) {
            lockedBalance = lockedBalance.add(lockInfo[_holder][i].balance);
        }
        return super.balanceOf(_holder).add(lockedBalance);
    }

    function releaseLock(address _holder) internal {

        for(uint256 i = 0; i < lockInfo[_holder].length ; i++ ) {
            if (lockInfo[_holder][i].releaseTime <= now) {
                _balances[_holder] = _balances[_holder].add(lockInfo[_holder][i].balance);
                emit Unlock(_holder, lockInfo[_holder][i].balance);
                lockInfo[_holder][i].balance = 0;

                if (i != lockInfo[_holder].length - 1) {
                    lockInfo[_holder][i] = lockInfo[_holder][lockInfo[_holder].length - 1];
                    i--;
                }
                lockInfo[_holder].length--;

            }
        }
    }
    function lockCount(address _holder) public view returns (uint256) {
        return lockInfo[_holder].length;
    }
    function lockState(address _holder, uint256 _idx) public view returns (uint256, uint256) {
        return (lockInfo[_holder][_idx].releaseTime, lockInfo[_holder][_idx].balance);
    }

    function lock(address _holder, uint256 _amount, uint256 _releaseTime) public onlyOwner {
        require(super.balanceOf(_holder) >= _amount, "Balance is too small.");
        _balances[_holder] = _balances[_holder].sub(_amount);
        lockInfo[_holder].push(
            LockInfo(_releaseTime, _amount)
        );
        emit Lock(_holder, _amount, _releaseTime);
    }

    function lockAfter(address _holder, uint256 _amount, uint256 _afterTime) public onlyOwner {
        require(super.balanceOf(_holder) >= _amount, "Balance is too small.");
        _balances[_holder] = _balances[_holder].sub(_amount);
        lockInfo[_holder].push(
            LockInfo(now + _afterTime, _amount)
        );
        emit Lock(_holder, _amount, now + _afterTime);
    }

    function unlock(address _holder, uint256 i) public onlyOwner {
        require(i < lockInfo[_holder].length, "No lock information.");

        _balances[_holder] = _balances[_holder].add(lockInfo[_holder][i].balance);
        emit Unlock(_holder, lockInfo[_holder][i].balance);
        lockInfo[_holder][i].balance = 0;

        if (i != lockInfo[_holder].length - 1) {
            lockInfo[_holder][i] = lockInfo[_holder][lockInfo[_holder].length - 1];
        }
        lockInfo[_holder].length--;
    }

    function transferWithLock(address _to, uint256 _value, uint256 _releaseTime) public onlyOwner returns (bool) {
        require(_to != address(0), "wrong address");
        require(_value <= super.balanceOf(owner), "Not enough balance");

        _balances[owner] = _balances[owner].sub(_value);
        lockInfo[_to].push(
            LockInfo(_releaseTime, _value)
        );
        emit Transfer(owner, _to, _value);
        emit Lock(_to, _value, _releaseTime);

        return true;
    }

    function transferWithLockAfter(address _to, uint256 _value, uint256 _afterTime) public onlyOwner returns (bool) {
        require(_to != address(0), "wrong address");
        require(_value <= super.balanceOf(owner), "Not enough balance");

        _balances[owner] = _balances[owner].sub(_value);
        lockInfo[_to].push(
            LockInfo(now + _afterTime, _value)
        );
        emit Transfer(owner, _to, _value);
        emit Lock(_to, _value, now + _afterTime);

        return true;
    }

    function currentTime() public view returns (uint256) {
        return now;
    }

    function afterTime(uint256 _value) public view returns (uint256) {
        return now + _value;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_value","type":"uint256"}],"name":"afterTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"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":false,"inputs":[{"name":"target","type":"address"},{"name":"mode","type":"uint8"},{"name":"amount","type":"uint256"},{"name":"token","type":"address"}],"name":"makeProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newStakeHolder","type":"address"}],"name":"addStakeHolder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"}],"name":"agreeProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","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":"","type":"address"}],"name":"proposals","outputs":[{"name":"mode","type":"uint8"},{"name":"amount","type":"uint256"},{"name":"ct","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialSupply","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":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"}],"name":"unfreeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"oldStakeHolder","type":"address"}],"name":"removeStakeHolder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_idx","type":"uint256"}],"name":"lockState","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"i","type":"uint256"}],"name":"unlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_afterTime","type":"uint256"}],"name":"lockAfter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"}],"name":"freeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_afterTime","type":"uint256"}],"name":"transferWithLockAfter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"stakeHolders","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentTime","outputs":[{"name":"","type":"uint256"}],"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":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_releaseTime","type":"uint256"}],"name":"transferWithLock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"lockCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_releaseTime","type":"uint256"}],"name":"lock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_target","type":"address"}],"name":"isFrozen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newTokenWallet","type":"address"}],"name":"transferTokenWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"stakeHolder","type":"address"}],"name":"AddStakeHolder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"stakeHolder","type":"address"}],"name":"RemoveStakeHolder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"mode","type":"uint8"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"token","type":"address"}],"name":"MakeProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"stakeHolder","type":"address"}],"name":"AgreeProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousTokenWallet","type":"address"},{"indexed":true,"name":"newTokenWallet","type":"address"}],"name":"TokenWalletTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"target","type":"address"}],"name":"Frozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"target","type":"address"}],"name":"Unfrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"releaseTime","type":"uint256"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Unlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040526000600660146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506200005a33601260ff16600a0a633b9aca0002620000a16401000000000262005410176401000000009004565b33600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200030a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6200016c816002546200027f6401000000000262005137179091906401000000009004565b600281905550620001d3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200027f6401000000000262005137179091906401000000009004565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080828401905083811015151562000300576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b615bb4806200031a6000396000f3fe6080604052600436106101d8576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806304859ceb146101dd57806306fdde031461022c578063095ea7b3146102bc5780630cbc90d81461032f57806311a76f37146103b757806317ee9c1d1461040857806318160ddd1461045957806323b872dd14610484578063313ce567146105175780633341b44514610548578063378dc3dc146105ed57806339509351146106185780633f4ba83a1461068b57806345c8b1a6146106a257806345f412b0146106f357806346cf1bb5146107445780635c975abb146107ba57806370a08231146107e9578063715018a61461084e5780637eee288d146108655780638456cb59146108c05780638a57af6b146108d75780638d1fdf2f1461093c5780638da5cb5b1461098d578063927a4a7b146109e457806395d89b4114610a61578063a457c2d714610af1578063a9059cbb14610b64578063acad41a414610bd7578063bff99c6c14610c52578063d18e81b314610ca9578063dd62ed3e14610cd4578063de6baccb14610d59578063df03458614610dd6578063e2ab691d14610e3b578063e583983614610ea0578063e64fd8b014610f09578063f2fde38b14610f5a575b600080fd5b3480156101e957600080fd5b506102166004803603602081101561020057600080fd5b8101908080359060200190929190505050610fab565b6040518082815260200191505060405180910390f35b34801561023857600080fd5b50610241610fb7565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610281578082015181840152602081019050610266565b50505050905090810190601f1680156102ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c857600080fd5b50610315600480360360408110156102df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ff0565b604051808215151515815260200191505060405180910390f35b34801561033b57600080fd5b506103b56004803603608081101561035257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611007565b005b3480156103c357600080fd5b50610406600480360360208110156103da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061133d565b005b34801561041457600080fd5b506104576004803603602081101561042b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115bd565b005b34801561046557600080fd5b5061046e611ac6565b6040518082815260200191505060405180910390f35b34801561049057600080fd5b506104fd600480360360608110156104a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ad0565b604051808215151515815260200191505060405180910390f35b34801561052357600080fd5b5061052c611c36565b604051808260ff1660ff16815260200191505060405180910390f35b34801561055457600080fd5b506105976004803603602081101561056b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3b565b604051808460ff1660ff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b3480156105f957600080fd5b50610602611c92565b6040518082815260200191505060405180910390f35b34801561062457600080fd5b506106716004803603604081101561063b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ca3565b604051808215151515815260200191505060405180910390f35b34801561069757600080fd5b506106a0611d48565b005b3480156106ae57600080fd5b506106f1600480360360208110156106c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eda565b005b3480156106ff57600080fd5b506107426004803603602081101561071657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061205d565b005b34801561075057600080fd5b5061079d6004803603604081101561076757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122aa565b604051808381526020018281526020019250505060405180910390f35b3480156107c657600080fd5b506107cf612374565b604051808215151515815260200191505060405180910390f35b3480156107f557600080fd5b506108386004803603602081101561080c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612387565b6040518082815260200191505060405180910390f35b34801561085a57600080fd5b50610863612481565b005b34801561087157600080fd5b506108be6004803603604081101561088857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125ef565b005b3480156108cc57600080fd5b506108d5612b21565b005b3480156108e357600080fd5b5061093a600480360360608110156108fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612cb4565b005b34801561094857600080fd5b5061098b6004803603602081101561095f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f81565b005b34801561099957600080fd5b506109a2613104565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109f057600080fd5b50610a4760048036036060811015610a0757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061312a565b604051808215151515815260200191505060405180910390f35b348015610a6d57600080fd5b50610a76613591565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ab6578082015181840152602081019050610a9b565b50505050905090810190601f168015610ae35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610afd57600080fd5b50610b4a60048036036040811015610b1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506135ca565b604051808215151515815260200191505060405180910390f35b348015610b7057600080fd5b50610bbd60048036036040811015610b8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061366f565b604051808215151515815260200191505060405180910390f35b348015610be357600080fd5b50610c1060048036036020811015610bfa57600080fd5b81019080803590602001909291905050506137d3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c5e57600080fd5b50610c67613811565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cb557600080fd5b50610cbe613837565b6040518082815260200191505060405180910390f35b348015610ce057600080fd5b50610d4360048036036040811015610cf757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061383f565b6040518082815260200191505060405180910390f35b348015610d6557600080fd5b50610dbc60048036036060811015610d7c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506138c6565b604051808215151515815260200191505060405180910390f35b348015610de257600080fd5b50610e2560048036036020811015610df957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d29565b6040518082815260200191505060405180910390f35b348015610e4757600080fd5b50610e9e60048036036060811015610e5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613d75565b005b348015610eac57600080fd5b50610eef60048036036020811015610ec357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061403e565b604051808215151515815260200191505060405180910390f35b348015610f1557600080fd5b50610f5860048036036020811015610f2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614094565b005b348015610f6657600080fd5b50610fa960048036036020811015610f7d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142be565b005b60008142019050919050565b6040805190810160405280600881526020017f4372656d616e6f6e00000000000000000000000000000000000000000000000081525081565b6000610ffd33848461438f565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6060604051908101604052808460ff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815250600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff1602179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505060008090505b6003805490508110156112a6576000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600060038481548110151561121d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506111bb565b508373ffffffffffffffffffffffffffffffffffffffff167fd9ca93b8d66fde8da63a3becbc3572b188204281a02fa7c88c3d8b6dec79fd96848484604051808460ff1660ff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a250505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600080905060008090505b600380549050811015611499578273ffffffffffffffffffffffffffffffffffffffff1660038281548110151561144057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561148c57600191505b808060010191505061140d565b5080151515611510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f416c7265616479207374616b6520686f6c64657200000000000000000000000081525060200191505060405180910390fd5b60038290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508173ffffffffffffffffffffffffffffffffffffffff167ff26c45c485b5a3052e47b2a899afdd980bdf4ba816fdae7fcab64eb25362987c60405160405180910390a25050565b600080905060008090505b600380549050811015611658573373ffffffffffffffffffffffffffffffffffffffff166003828154811015156115fb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561164b5760019150611658565b80806001019150506115c8565b508015156116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f74207374616b6520686f6c6465720000000000000000000000000000000081525060200191505060405180910390fd5b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f5718742f51ed22a3c8324e68af3b7c3386d516ce8906041e6f0c55086d5e9d8833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a26117e982614610565b15611ac2576001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660ff16141561195a576118f882600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661472e565b506003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550611ac1565b6002600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660ff161415611ac057611a6482600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661495d565b60048060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b5050565b6000600254905090565b6000600660149054906101000a900460ff16151515611b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506175736564206279206f776e6572000000000000000000000000000000000081525060200191505060405180910390fd5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611c19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f46726f6d206163636f756e74206973206c6f636b65642e00000000000000000081525060200191505060405180910390fd5b611c2284614c05565b611c2d848484615086565b90509392505050565b601281565b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b601260ff16600a0a633b9aca000281565b6000611d3e3384611d3985600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b61438f565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660149054906101000a900460ff161515611e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420706175736564206e6f7700000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4feb53e305297ab8fb8f3420c95ea04737addc254a7270d8fc4605d2b9c61dba81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6003805490508110156122a6578173ffffffffffffffffffffffffffffffffffffffff1660038281548110151561215b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122995760036001600380549050038154811015156121b957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003828154811015156121f357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060038054809190600190036122509190615ad6565b508173ffffffffffffffffffffffffffffffffffffffff167ff28430624f18cac6b9024ab9e84a4accdef1b5320cf2fbb3d1a38f58c7bf63a260405160405180910390a26122a6565b8080600101915050612128565b5050565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156122f957fe5b906000526020600020906002020160000154600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561235757fe5b906000526020600020906002020160010154915091509250929050565b600660149054906101000a900460ff1681565b6000806000905060008090505b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561245d5761244e600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561242d57fe5b9060005260206000209060020201600101548361513790919063ffffffff16565b91508080600101915050612394565b506124798161246b856151c1565b61513790919063ffffffff16565b915050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612546576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110151561276d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f206c6f636b20696e666f726d6174696f6e2e00000000000000000000000081525060200191505060405180910390fd5b61281b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156127bc57fe5b9060005260206000209060020201600101546000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f1600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156128e157fe5b9060005260206000209060020201600101546040518082815260200191505060405180910390a26000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561295657fe5b9060005260206000209060020201600101819055506001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490500381141515612aca57600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515612a4a57fe5b9060005260206000209060020201600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515612aa457fe5b906000526020600020906002020160008201548160000155600182015481600101559050505b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612b1c9190615b02565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612be6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660149054906101000a900460ff16151515612c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506175736564206279206f776e6572000000000000000000000000000000000081525060200191505060405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81612d83846151c1565b10151515612df9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f42616c616e636520697320746f6f20736d616c6c2e000000000000000000000081525060200191505060405180910390fd5b612e4a826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060408051908101604052808342018152602001848152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508273ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b83834201604051808381526020018281526020019250505060405180910390a2505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613046576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8a5c4736a33c7b7f29a2c34ea9ff9608afc5718d56f6fd6dcbd2d3711a1a491381604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b6132c1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166151c1565b8311151515613338576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b6133ab83600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060408051908101604052808442018152602001858152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b84844201604051808381526020018281526020019250505060405180910390a2600190509392505050565b6040805190810160405280600381526020017f435243000000000000000000000000000000000000000000000000000000000081525081565b6000613665338461366085600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b61438f565b6001905092915050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515613733576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53656e646572206163636f756e74206973206c6f636b65642e0000000000000081525060200191505060405180910390fd5b600660149054906101000a900460ff161515156137b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506175736564206279206f776e6572000000000000000000000000000000000081525060200191505060405180910390fd5b6137c133614c05565b6137cb8383615294565b905092915050565b6003818154811015156137e257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600042905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561398d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613a32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b613a5d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166151c1565b8311151515613ad4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b613b4783600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040805190810160405280848152602001858152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b8484604051808381526020018281526020019250505060405180910390a2600190509392505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613e3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81613e44846151c1565b10151515613eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f42616c616e636520697320746f6f20736d616c6c2e000000000000000000000081525060200191505060405180910390fd5b613f0b826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040805190810160405280838152602001848152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508273ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b8383604051808381526020018281526020019250505060405180910390a2505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614159576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156141fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642041646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0ac1392f3965a7caa0ffa797fd6b9652351d21085508962124ce954b405b308860405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614383576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61438c816152ab565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561445a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f45524332303a20617070726f76652066726f6d20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515614525576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f45524332303a20617070726f766520746f20746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000806000905060008090505b60038054905081101561470b57600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600060038381548110151561467d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146fe5781806001019250505b808060010191505061461d565b50806003805490501415614723576001915050614729565b60009150505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156147f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6b656e2077616c6c6574206973206e6f742073657400000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166340c10f19600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a86026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156148be57600080fd5b505af11580156148d2573d6000803e3d6000fd5b505050506040513d60208110156148e857600080fd5b8101908080519060200190929190505050506149048484615410565b8373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885846040518082815260200191505060405180910390a2600190509392505050565b614966836151c1565b82111515156149dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f42616c616e636520697320746f6f20736d616c6c2e000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515614aa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6b656e2077616c6c6574206973206e6f742073657400000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16639dc29fac600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a85026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614b6c57600080fd5b505af1158015614b80573d6000803e3d6000fd5b505050506040513d6020811015614b9657600080fd5b810190808051906020019092919050505050614bb283836155cd565b8273ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a2505050565b60008090505b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156150825742600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515614ca257fe5b90600052602060002090600202016000015411151561507557614d69600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515614d0a57fe5b9060005260206000209060020201600101546000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f1600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515614e2f57fe5b9060005260206000209060020201600101546040518082815260200191505060405180910390a26000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515614ea457fe5b9060005260206000209060020201600101819055506001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050038114151561502157600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515614f9857fe5b9060005260206000209060020201600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515614ff257fe5b906000526020600020906002020160008201548160000155600182015481600101559050508080600190039150505b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036150739190615b02565b505b8080600101915050614c0b565b5050565b60006150938484846157b0565b61512c843361512785600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b61438f565b600190509392505050565b60008082840190508381101515156151b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000828211151515615283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b60006152a13384846157b0565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515615350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f416c7265616479206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156154b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6154ca8160025461513790919063ffffffff16565b600281905550615521816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515615698576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f45524332303a206275726e2066726f6d20746865207a65726f2061646472657381526020017f730000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6156ad8160025461520990919063ffffffff16565b600281905550615704816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561587b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f45524332303a207472616e736665722066726f6d20746865207a65726f20616481526020017f647265737300000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515615946576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f45524332303a207472616e7366657220746f20746865207a65726f206164647281526020017f657373000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b615997816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615a2a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b815481835581811115615afd57818360005260206000209182019101615afc9190615b34565b5b505050565b815481835581811115615b2f57600202816002028360005260206000209182019101615b2e9190615b59565b5b505050565b615b5691905b80821115615b52576000816000905550600101615b3a565b5090565b90565b615b8591905b80821115615b8157600080820160009055600182016000905550600201615b5f565b5090565b9056fea165627a7a723058209baa3e96ceaa7dd2d9603e0214abac5cdaf0d497caa7ff12eca8ac391ca318da0029

Deployed Bytecode

0x6080604052600436106101d8576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806304859ceb146101dd57806306fdde031461022c578063095ea7b3146102bc5780630cbc90d81461032f57806311a76f37146103b757806317ee9c1d1461040857806318160ddd1461045957806323b872dd14610484578063313ce567146105175780633341b44514610548578063378dc3dc146105ed57806339509351146106185780633f4ba83a1461068b57806345c8b1a6146106a257806345f412b0146106f357806346cf1bb5146107445780635c975abb146107ba57806370a08231146107e9578063715018a61461084e5780637eee288d146108655780638456cb59146108c05780638a57af6b146108d75780638d1fdf2f1461093c5780638da5cb5b1461098d578063927a4a7b146109e457806395d89b4114610a61578063a457c2d714610af1578063a9059cbb14610b64578063acad41a414610bd7578063bff99c6c14610c52578063d18e81b314610ca9578063dd62ed3e14610cd4578063de6baccb14610d59578063df03458614610dd6578063e2ab691d14610e3b578063e583983614610ea0578063e64fd8b014610f09578063f2fde38b14610f5a575b600080fd5b3480156101e957600080fd5b506102166004803603602081101561020057600080fd5b8101908080359060200190929190505050610fab565b6040518082815260200191505060405180910390f35b34801561023857600080fd5b50610241610fb7565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610281578082015181840152602081019050610266565b50505050905090810190601f1680156102ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c857600080fd5b50610315600480360360408110156102df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ff0565b604051808215151515815260200191505060405180910390f35b34801561033b57600080fd5b506103b56004803603608081101561035257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611007565b005b3480156103c357600080fd5b50610406600480360360208110156103da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061133d565b005b34801561041457600080fd5b506104576004803603602081101561042b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115bd565b005b34801561046557600080fd5b5061046e611ac6565b6040518082815260200191505060405180910390f35b34801561049057600080fd5b506104fd600480360360608110156104a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ad0565b604051808215151515815260200191505060405180910390f35b34801561052357600080fd5b5061052c611c36565b604051808260ff1660ff16815260200191505060405180910390f35b34801561055457600080fd5b506105976004803603602081101561056b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3b565b604051808460ff1660ff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b3480156105f957600080fd5b50610602611c92565b6040518082815260200191505060405180910390f35b34801561062457600080fd5b506106716004803603604081101561063b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ca3565b604051808215151515815260200191505060405180910390f35b34801561069757600080fd5b506106a0611d48565b005b3480156106ae57600080fd5b506106f1600480360360208110156106c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eda565b005b3480156106ff57600080fd5b506107426004803603602081101561071657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061205d565b005b34801561075057600080fd5b5061079d6004803603604081101561076757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122aa565b604051808381526020018281526020019250505060405180910390f35b3480156107c657600080fd5b506107cf612374565b604051808215151515815260200191505060405180910390f35b3480156107f557600080fd5b506108386004803603602081101561080c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612387565b6040518082815260200191505060405180910390f35b34801561085a57600080fd5b50610863612481565b005b34801561087157600080fd5b506108be6004803603604081101561088857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125ef565b005b3480156108cc57600080fd5b506108d5612b21565b005b3480156108e357600080fd5b5061093a600480360360608110156108fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612cb4565b005b34801561094857600080fd5b5061098b6004803603602081101561095f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f81565b005b34801561099957600080fd5b506109a2613104565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109f057600080fd5b50610a4760048036036060811015610a0757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061312a565b604051808215151515815260200191505060405180910390f35b348015610a6d57600080fd5b50610a76613591565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ab6578082015181840152602081019050610a9b565b50505050905090810190601f168015610ae35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610afd57600080fd5b50610b4a60048036036040811015610b1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506135ca565b604051808215151515815260200191505060405180910390f35b348015610b7057600080fd5b50610bbd60048036036040811015610b8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061366f565b604051808215151515815260200191505060405180910390f35b348015610be357600080fd5b50610c1060048036036020811015610bfa57600080fd5b81019080803590602001909291905050506137d3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c5e57600080fd5b50610c67613811565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cb557600080fd5b50610cbe613837565b6040518082815260200191505060405180910390f35b348015610ce057600080fd5b50610d4360048036036040811015610cf757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061383f565b6040518082815260200191505060405180910390f35b348015610d6557600080fd5b50610dbc60048036036060811015610d7c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506138c6565b604051808215151515815260200191505060405180910390f35b348015610de257600080fd5b50610e2560048036036020811015610df957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d29565b6040518082815260200191505060405180910390f35b348015610e4757600080fd5b50610e9e60048036036060811015610e5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613d75565b005b348015610eac57600080fd5b50610eef60048036036020811015610ec357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061403e565b604051808215151515815260200191505060405180910390f35b348015610f1557600080fd5b50610f5860048036036020811015610f2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614094565b005b348015610f6657600080fd5b50610fa960048036036020811015610f7d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142be565b005b60008142019050919050565b6040805190810160405280600881526020017f4372656d616e6f6e00000000000000000000000000000000000000000000000081525081565b6000610ffd33848461438f565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6060604051908101604052808460ff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815250600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff1602179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505060008090505b6003805490508110156112a6576000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600060038481548110151561121d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506111bb565b508373ffffffffffffffffffffffffffffffffffffffff167fd9ca93b8d66fde8da63a3becbc3572b188204281a02fa7c88c3d8b6dec79fd96848484604051808460ff1660ff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a250505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600080905060008090505b600380549050811015611499578273ffffffffffffffffffffffffffffffffffffffff1660038281548110151561144057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561148c57600191505b808060010191505061140d565b5080151515611510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f416c7265616479207374616b6520686f6c64657200000000000000000000000081525060200191505060405180910390fd5b60038290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508173ffffffffffffffffffffffffffffffffffffffff167ff26c45c485b5a3052e47b2a899afdd980bdf4ba816fdae7fcab64eb25362987c60405160405180910390a25050565b600080905060008090505b600380549050811015611658573373ffffffffffffffffffffffffffffffffffffffff166003828154811015156115fb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561164b5760019150611658565b80806001019150506115c8565b508015156116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f74207374616b6520686f6c6465720000000000000000000000000000000081525060200191505060405180910390fd5b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f5718742f51ed22a3c8324e68af3b7c3386d516ce8906041e6f0c55086d5e9d8833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a26117e982614610565b15611ac2576001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660ff16141561195a576118f882600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661472e565b506003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550611ac1565b6002600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660ff161415611ac057611a6482600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661495d565b60048060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b5050565b6000600254905090565b6000600660149054906101000a900460ff16151515611b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506175736564206279206f776e6572000000000000000000000000000000000081525060200191505060405180910390fd5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611c19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f46726f6d206163636f756e74206973206c6f636b65642e00000000000000000081525060200191505060405180910390fd5b611c2284614c05565b611c2d848484615086565b90509392505050565b601281565b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b601260ff16600a0a633b9aca000281565b6000611d3e3384611d3985600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b61438f565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660149054906101000a900460ff161515611e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420706175736564206e6f7700000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4feb53e305297ab8fb8f3420c95ea04737addc254a7270d8fc4605d2b9c61dba81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6003805490508110156122a6578173ffffffffffffffffffffffffffffffffffffffff1660038281548110151561215b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122995760036001600380549050038154811015156121b957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003828154811015156121f357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060038054809190600190036122509190615ad6565b508173ffffffffffffffffffffffffffffffffffffffff167ff28430624f18cac6b9024ab9e84a4accdef1b5320cf2fbb3d1a38f58c7bf63a260405160405180910390a26122a6565b8080600101915050612128565b5050565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156122f957fe5b906000526020600020906002020160000154600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561235757fe5b906000526020600020906002020160010154915091509250929050565b600660149054906101000a900460ff1681565b6000806000905060008090505b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561245d5761244e600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561242d57fe5b9060005260206000209060020201600101548361513790919063ffffffff16565b91508080600101915050612394565b506124798161246b856151c1565b61513790919063ffffffff16565b915050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612546576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110151561276d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f206c6f636b20696e666f726d6174696f6e2e00000000000000000000000081525060200191505060405180910390fd5b61281b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156127bc57fe5b9060005260206000209060020201600101546000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f1600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156128e157fe5b9060005260206000209060020201600101546040518082815260200191505060405180910390a26000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561295657fe5b9060005260206000209060020201600101819055506001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490500381141515612aca57600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515612a4a57fe5b9060005260206000209060020201600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515612aa457fe5b906000526020600020906002020160008201548160000155600182015481600101559050505b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612b1c9190615b02565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612be6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660149054906101000a900460ff16151515612c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506175736564206279206f776e6572000000000000000000000000000000000081525060200191505060405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81612d83846151c1565b10151515612df9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f42616c616e636520697320746f6f20736d616c6c2e000000000000000000000081525060200191505060405180910390fd5b612e4a826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060408051908101604052808342018152602001848152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508273ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b83834201604051808381526020018281526020019250505060405180910390a2505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613046576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8a5c4736a33c7b7f29a2c34ea9ff9608afc5718d56f6fd6dcbd2d3711a1a491381604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b6132c1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166151c1565b8311151515613338576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b6133ab83600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060408051908101604052808442018152602001858152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b84844201604051808381526020018281526020019250505060405180910390a2600190509392505050565b6040805190810160405280600381526020017f435243000000000000000000000000000000000000000000000000000000000081525081565b6000613665338461366085600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b61438f565b6001905092915050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515613733576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53656e646572206163636f756e74206973206c6f636b65642e0000000000000081525060200191505060405180910390fd5b600660149054906101000a900460ff161515156137b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506175736564206279206f776e6572000000000000000000000000000000000081525060200191505060405180910390fd5b6137c133614c05565b6137cb8383615294565b905092915050565b6003818154811015156137e257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600042905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561398d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613a32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b613a5d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166151c1565b8311151515613ad4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b613b4783600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040805190810160405280848152602001858152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b8484604051808381526020018281526020019250505060405180910390a2600190509392505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613e3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81613e44846151c1565b10151515613eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f42616c616e636520697320746f6f20736d616c6c2e000000000000000000000081525060200191505060405180910390fd5b613f0b826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040805190810160405280838152602001848152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508273ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b8383604051808381526020018281526020019250505060405180910390a2505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614159576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156141fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642041646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0ac1392f3965a7caa0ffa797fd6b9652351d21085508962124ce954b405b308860405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614383576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61438c816152ab565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561445a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f45524332303a20617070726f76652066726f6d20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515614525576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f45524332303a20617070726f766520746f20746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000806000905060008090505b60038054905081101561470b57600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600060038381548110151561467d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146fe5781806001019250505b808060010191505061461d565b50806003805490501415614723576001915050614729565b60009150505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156147f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6b656e2077616c6c6574206973206e6f742073657400000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166340c10f19600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a86026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156148be57600080fd5b505af11580156148d2573d6000803e3d6000fd5b505050506040513d60208110156148e857600080fd5b8101908080519060200190929190505050506149048484615410565b8373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885846040518082815260200191505060405180910390a2600190509392505050565b614966836151c1565b82111515156149dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f42616c616e636520697320746f6f20736d616c6c2e000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515614aa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6b656e2077616c6c6574206973206e6f742073657400000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16639dc29fac600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a85026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614b6c57600080fd5b505af1158015614b80573d6000803e3d6000fd5b505050506040513d6020811015614b9657600080fd5b810190808051906020019092919050505050614bb283836155cd565b8273ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a2505050565b60008090505b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156150825742600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515614ca257fe5b90600052602060002090600202016000015411151561507557614d69600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515614d0a57fe5b9060005260206000209060020201600101546000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f1600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515614e2f57fe5b9060005260206000209060020201600101546040518082815260200191505060405180910390a26000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515614ea457fe5b9060005260206000209060020201600101819055506001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050038114151561502157600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515614f9857fe5b9060005260206000209060020201600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515614ff257fe5b906000526020600020906002020160008201548160000155600182015481600101559050508080600190039150505b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036150739190615b02565b505b8080600101915050614c0b565b5050565b60006150938484846157b0565b61512c843361512785600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b61438f565b600190509392505050565b60008082840190508381101515156151b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000828211151515615283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b60006152a13384846157b0565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515615350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f416c7265616479206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156154b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6154ca8160025461513790919063ffffffff16565b600281905550615521816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515615698576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f45524332303a206275726e2066726f6d20746865207a65726f2061646472657381526020017f730000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6156ad8160025461520990919063ffffffff16565b600281905550615704816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561587b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f45524332303a207472616e736665722066726f6d20746865207a65726f20616481526020017f647265737300000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515615946576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f45524332303a207472616e7366657220746f20746865207a65726f206164647281526020017f657373000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b615997816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461520990919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615a2a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461513790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b815481835581811115615afd57818360005260206000209182019101615afc9190615b34565b5b505050565b815481835581811115615b2f57600202816002028360005260206000209182019101615b2e9190615b59565b5b505050565b615b5691905b80821115615b52576000816000905550600101615b3a565b5090565b90565b615b8591905b80821115615b8157600080820160009055600182016000905550600201615b5f565b5090565b9056fea165627a7a723058209baa3e96ceaa7dd2d9603e0214abac5cdaf0d497caa7ff12eca8ac391ca318da0029

Deployed Bytecode Sourcemap

17684:13161:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30739:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30739:103:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30739:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17718:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17718:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;17718:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9099:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9099:148:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9099:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20090:375;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20090:375:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;20090:375:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19297:371;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19297:371:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19297:371:0;;;;;;;;;;;;;;;;;;;;;;20473:606;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20473:606:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20473:606:0;;;;;;;;;;;;;;;;;;;;;;8122:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8122:91:0;;;;;;;;;;;;;;;;;;;;;;;25401:317;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25401:317:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25401:317:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18038:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18038:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;18503:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18503:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18503:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18113:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18113:86:0;;;;;;;;;;;;;;;;;;;;;;;10383:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10383:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10383:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24396:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24396:105:0;;;;;;24903:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24903:128:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24903:128:0;;;;;;;;;;;;;;;;;;;;;;19676:406;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19676:406:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19676:406:0;;;;;;;;;;;;;;;;;;;;;;28108:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28108:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28108:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23682:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23682:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26970:335;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26970:335:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26970:335:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22860:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22860:124:0;;;;;;29088:516;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29088:516:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29088:516:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24200:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24200:103:0;;;;;;28689:391;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28689:391:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28689:391:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24772:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24772:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24772:123:0;;;;;;;;;;;;;;;;;;;;;;22294:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22294:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30125:516;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30125:516:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30125:516:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17798:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17798:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;17798:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11092:216;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11092:216:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11092:216:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25151:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25151:242:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25151:242:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18312:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18312:29:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18312:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21856:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21856:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30649:82;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30649:82:0;;;;;;;;;;;;;;;;;;;;;;;8818:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8818:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8818:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29612:505;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29612:505:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29612:505:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27986:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27986:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27986:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28301:380;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28301:380:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28301:380:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25039:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25039:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25039:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22014:255;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22014:255:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22014:255:0;;;;;;;;;;;;;;;;;;;;;;23154:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23154:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23154:111:0;;;;;;;;;;;;;;;;;;;;;;30739:103;30795:7;30828:6;30822:3;:12;30815:19;;30739:103;;;:::o;17718:40::-;;;;;;;;;;;;;;;;;;;;:::o;9099:148::-;9164:4;9181:36;9190:10;9202:7;9211:5;9181:8;:36::i;:::-;9235:4;9228:11;;9099:148;;;;:::o;20090:375::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20219:48;;;;;;;;;20232:4;20219:48;;;;;;20238:6;20219:48;;;;20260:5;20219:48;;;;;20199:9;:17;20209:6;20199:17;;;;;;;;;;;;;;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20283:6;20290:1;20283:8;;20278:123;20297:12;:19;;;;20293:1;:23;20278:123;;;20384:5;20337:9;:17;20347:6;20337:17;;;;;;;;;;;;;;;:27;;:44;20365:12;20378:1;20365:15;;;;;;;;;;;;;;;;;;;;;;;;;;;20337:44;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;20318:3;;;;;;;20278:123;;;;20429:6;20416:41;;;20437:4;20443:6;20451:5;20416:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20090:375;;;;:::o;19297:371::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19373:9;19385:5;19373:17;;19406:6;19413:1;19406:8;;19401:121;19420:12;:19;;;;19416:1;:23;19401:121;;;19483:14;19464:33;;:12;19477:1;19464:15;;;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;19460:50;;;19506:4;19499:11;;19460:50;19441:3;;;;;;;19401:121;;;;19541:4;19540:5;19532:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19581:12;19599:14;19581:33;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;19581:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19645:14;19630:30;;;;;;;;;;;;22578:1;19297:371;:::o;20473:606::-;19005:15;19023:5;19005:23;;19044:6;19051:1;19044:8;;19039:181;19058:12;:19;;;;19054:1;:23;19039:181;;;19121:10;19102:29;;:12;19115:1;19102:15;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;19098:111;;;19165:4;19152:17;;19188:5;;19098:111;19079:3;;;;;;;19039:181;;;;19238:10;19230:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20588:4;20546:9;:17;20556:6;20546:17;;;;;;;;;;;;;;;:27;;:39;20574:10;20546:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20622:6;20608:33;;;20630:10;20608:33;;;;;;;;;;;;;;;;;;;;;;20656:23;20672:6;20656:15;:23::i;:::-;20652:420;;;20726:1;20700:9;:17;20710:6;20700:17;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:27;;;20696:365;;;20748:60;20753:6;20761:9;:17;20771:6;20761:17;;;;;;;;;;;;;;;:24;;;20787:9;:17;20797:6;20787:17;;;;;;;;;;;;;;;:20;;;;;;;;;;;;20748:4;:60::i;:::-;;20852:1;20827:9;:17;20837:6;20827:17;;;;;;;;;;;;;;;:22;;;:26;;;;;;;;;;;;;;;;;;20696:365;;;20918:1;20892:9;:17;20902:6;20892:17;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:27;;;20888:173;;;20940:60;20945:6;20953:9;:17;20963:6;20953:17;;;;;;;;;;;;;;;:24;;;20979:9;:17;20989:6;20979:17;;;;;;;;;;;;;;;:20;;;;;;;;;;;;20940:4;:60::i;:::-;21044:1;21019:9;:17;21029:6;21019:17;;;;;;;;;;;;;;;:22;;;:26;;;;;;;;;;;;;;;;;;20888:173;20696:365;20652:420;20473:606;;:::o;8122:91::-;8166:7;8193:12;;8186:19;;8122:91;:::o;25401:317::-;25552:4;23870:6;;;;;;;;;;;23869:7;23861:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25583:7;:14;25591:5;25583:14;;;;;;;;;;;;;;;;;;;;;;;;;25582:15;25574:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25636:18;25648:5;25636:11;:18::i;:::-;25672:38;25691:5;25698:3;25703:6;25672:18;:38::i;:::-;25665:45;;25401:317;;;;;:::o;18038:35::-;18071:2;18038:35;:::o;18503:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18113:86::-;18071:2;18181:17;;18175:2;:23;18153:18;:46;18113:86;:::o;10383:206::-;10463:4;10480:79;10489:10;10501:7;10510:48;10547:10;10510:11;:23;10522:10;10510:23;;;;;;;;;;;;;;;:32;10534:7;10510:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;10480:8;:79::i;:::-;10577:4;10570:11;;10383:206;;;;:::o;24396:105::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24065:6;;;;;;;;;;;24057:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24463:5;24454:6;;:14;;;;;;;;;;;;;;;;;;24484:9;;;;;;;;;;24396:105::o;24903:128::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24985:5;24966:7;:16;24974:7;24966:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;25006:17;25015:7;25006:17;;;;;;;;;;;;;;;;;;;;;;24903:128;:::o;19676:406::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19760:6;19767:1;19760:8;;19755:320;19774:12;:19;;;;19770:1;:23;19755:320;;;19837:14;19818:33;;:12;19831:1;19818:15;;;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;19814:250;;;19890:12;19925:1;19903:12;:19;;;;:23;19890:37;;;;;;;;;;;;;;;;;;;;;;;;;;;19872:12;19885:1;19872:15;;;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;19946:12;:21;;;;;;;;;;;;:::i;:::-;;20009:14;19991:33;;;;;;;;;;;;20043:5;;19814:250;19795:3;;;;;;;19755:320;;;;19676:406;:::o;28108:185::-;28179:7;28188;28216:8;:17;28225:7;28216:17;;;;;;;;;;;;;;;28234:4;28216:23;;;;;;;;;;;;;;;;;;;;:35;;;28253:8;:17;28262:7;28253:17;;;;;;;;;;;;;;;28271:4;28253:23;;;;;;;;;;;;;;;;;;;;:31;;;28208:77;;;;28108:185;;;;;:::o;23682:26::-;;;;;;;;;;;;;:::o;26970:335::-;27027:15;27055:21;27079:1;27055:25;;27095:9;27107:1;27095:13;;27091:146;27114:8;:17;27123:7;27114:17;;;;;;;;;;;;;;;:24;;;;27110:1;:28;27091:146;;;27178:47;27196:8;:17;27205:7;27196:17;;;;;;;;;;;;;;;27214:1;27196:20;;;;;;;;;;;;;;;;;;;;:28;;;27178:13;:17;;:47;;;;:::i;:::-;27162:63;;27141:3;;;;;;;27091:146;;;;27254:43;27283:13;27254:24;27270:7;27254:15;:24::i;:::-;:28;;:43;;;;:::i;:::-;27247:50;;;26970:335;;;:::o;22860:124::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22941:5;;;;;;;;;;;22922:25;;;;;;;;;;;;22974:1;22958:5;;:18;;;;;;;;;;;;;;;;;;22860:124::o;29088:516::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29172:8;:17;29181:7;29172:17;;;;;;;;;;;;;;;:24;;;;29168:1;:28;29160:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29255:52;29278:8;:17;29287:7;29278:17;;;;;;;;;;;;;;;29296:1;29278:20;;;;;;;;;;;;;;;;;;;;:28;;;29255:9;:18;29265:7;29255:18;;;;;;;;;;;;;;;;:22;;:52;;;;:::i;:::-;29234:9;:18;29244:7;29234:18;;;;;;;;;;;;;;;:73;;;;29330:7;29323:45;;;29339:8;:17;29348:7;29339:17;;;;;;;;;;;;;;;29357:1;29339:20;;;;;;;;;;;;;;;;;;;;:28;;;29323:45;;;;;;;;;;;;;;;;;;29410:1;29379:8;:17;29388:7;29379:17;;;;;;;;;;;;;;;29397:1;29379:20;;;;;;;;;;;;;;;;;;;;:28;;:32;;;;29460:1;29433:8;:17;29442:7;29433:17;;;;;;;;;;;;;;;:24;;;;:28;29428:1;:33;;29424:136;;;29501:8;:17;29510:7;29501:17;;;;;;;;;;;;;;;29546:1;29519:8;:17;29528:7;29519:17;;;;;;;;;;;;;;;:24;;;;:28;29501:47;;;;;;;;;;;;;;;;;;;;29478:8;:17;29487:7;29478:17;;;;;;;;;;;;;;;29496:1;29478:20;;;;;;;;;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;;29424:136;29570:8;:17;29579:7;29570:17;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:::i;:::-;;29088:516;;:::o;24200:103::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23870:6;;;;;;;;;;;23869:7;23861:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24268:4;24259:6;;:13;;;;;;;;;;;;;;;;;;24288:7;;;;;;;;;;24200:103::o;28689:391::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28826:7;28798:24;28814:7;28798:15;:24::i;:::-;:35;;28790:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28891:31;28914:7;28891:9;:18;28901:7;28891:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;28870:9;:18;28880:7;28870:18;;;;;;;;;;;;;;;:52;;;;28933:8;:17;28942:7;28933:17;;;;;;;;;;;;;;;28970:35;;;;;;;;;28985:10;28979:3;:16;28970:35;;;;28997:7;28970:35;;;28933:83;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;28933:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29037:7;29032:40;;;29046:7;29061:10;29055:3;:16;29032:40;;;;;;;;;;;;;;;;;;;;;;;;28689:391;;;:::o;24772:123::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24852:4;24833:7;:16;24841:7;24833:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;24872:15;24879:7;24872:15;;;;;;;;;;;;;;;;;;;;;;24772:123;:::o;22294:20::-;;;;;;;;;;;;;:::o;30125:516::-;30231:4;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30271:1;30256:17;;:3;:17;;;;30248:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30320:22;30336:5;;;;;;;;;;;30320:15;:22::i;:::-;30310:6;:32;;30302:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30397:28;30418:6;30397:9;:16;30407:5;;;;;;;;;;;30397:16;;;;;;;;;;;;;;;;:20;;:28;;;;:::i;:::-;30378:9;:16;30388:5;;;;;;;;;;;30378:16;;;;;;;;;;;;;;;:47;;;;30436:8;:13;30445:3;30436:13;;;;;;;;;;;;;;;30469:34;;;;;;;;;30484:10;30478:3;:16;30469:34;;;;30496:6;30469:34;;;30436:78;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;30436:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30546:3;30530:28;;30539:5;;;;;;;;;;;30530:28;;;30551:6;30530:28;;;;;;;;;;;;;;;;;;30579:3;30574:35;;;30584:6;30598:10;30592:3;:16;30574:35;;;;;;;;;;;;;;;;;;;;;;;;30629:4;30622:11;;30125:516;;;;;:::o;17798:37::-;;;;;;;;;;;;;;;;;;;;:::o;11092:216::-;11177:4;11194:84;11203:10;11215:7;11224:53;11261:15;11224:11;:23;11236:10;11224:23;;;;;;;;;;;;;;;:32;11248:7;11224:32;;;;;;;;;;;;;;;;:36;;:53;;;;:::i;:::-;11194:8;:84::i;:::-;11296:4;11289:11;;11092:216;;;;:::o;25151:242::-;25295:4;24695:7;:19;24703:10;24695:19;;;;;;;;;;;;;;;;;;;;;;;;;24694:20;24686:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23870:6;;;;;;;;;;;23869:7;23861:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25317:23;25329:10;25317:11;:23::i;:::-;25358:27;25373:3;25378:6;25358:14;:27::i;:::-;25351:34;;25151:242;;;;:::o;18312:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21856:26::-;;;;;;;;;;;;;:::o;30649:82::-;30693:7;30720:3;30713:10;;30649:82;:::o;8818:134::-;8890:7;8917:11;:18;8929:5;8917:18;;;;;;;;;;;;;;;:27;8936:7;8917:27;;;;;;;;;;;;;;;;8910:34;;8818:134;;;;:::o;29612:505::-;29715:4;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29755:1;29740:17;;:3;:17;;;;29732:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29804:22;29820:5;;;;;;;;;;;29804:15;:22::i;:::-;29794:6;:32;;29786:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29881:28;29902:6;29881:9;:16;29891:5;;;;;;;;;;;29881:16;;;;;;;;;;;;;;;;:20;;:28;;;;:::i;:::-;29862:9;:16;29872:5;;;;;;;;;;;29862:16;;;;;;;;;;;;;;;:47;;;;29920:8;:13;29929:3;29920:13;;;;;;;;;;;;;;;29953:30;;;;;;;;;29962:12;29953:30;;;;29976:6;29953:30;;;29920:74;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;29920:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30026:3;30010:28;;30019:5;;;;;;;;;;;30010:28;;;30031:6;30010:28;;;;;;;;;;;;;;;;;;30059:3;30054:31;;;30064:6;30072:12;30054:31;;;;;;;;;;;;;;;;;;;;;;;;30105:4;30098:11;;29612:505;;;;;:::o;27986:116::-;28043:7;28070:8;:17;28079:7;28070:17;;;;;;;;;;;;;;;:24;;;;28063:31;;27986:116;;;:::o;28301:380::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28435:7;28407:24;28423:7;28407:15;:24::i;:::-;:35;;28399:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28500:31;28523:7;28500:9;:18;28510:7;28500:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;28479:9;:18;28489:7;28479:18;;;;;;;;;;;;;;;:52;;;;28542:8;:17;28551:7;28542:17;;;;;;;;;;;;;;;28579:31;;;;;;;;;28588:12;28579:31;;;;28602:7;28579:31;;;28542:79;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;28542:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28642:7;28637:36;;;28651:7;28660:12;28637:36;;;;;;;;;;;;;;;;;;;;;;;;28301:380;;;:::o;25039:104::-;25095:4;25119:7;:16;25127:7;25119:16;;;;;;;;;;;;;;;;;;;;;;;;;25112:23;;25039:104;;;:::o;22014:255::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22131:1;22104:29;;:15;:29;;;;22096:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22205:15;22169:52;;22192:11;;;;;;;;;;;22169:52;;;;;;;;;;;;22246:15;22232:11;;:29;;;;;;;;;;;;;;;;;;22014:255;:::o;23154:111::-;22548:5;;;;;;;;;;;22534:19;;:10;:19;;;22526:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23228:29;23247:9;23228:18;:29::i;:::-;23154:111;:::o;13894:335::-;14004:1;13987:19;;:5;:19;;;;13979:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14085:1;14066:21;;:7;:21;;;;14058:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14169:5;14139:11;:18;14151:5;14139:18;;;;;;;;;;;;;;;:27;14158:7;14139:27;;;;;;;;;;;;;;;:35;;;;14206:7;14190:31;;14199:5;14190:31;;;14215:5;14190:31;;;;;;;;;;;;;;;;;;13894:335;;;:::o;21093:351::-;21157:4;21174:8;21185:1;21174:12;;21202:6;21209:1;21202:8;;21197:158;21216:12;:19;;;;21212:1;:23;21197:158;;;21260:9;:17;21270:6;21260:17;;;;;;;;;;;;;;;:27;;:44;21288:12;21301:1;21288:15;;;;;;;;;;;;;;;;;;;;;;;;;;;21260:44;;;;;;;;;;;;;;;;;;;;;;;;;21256:88;;;21323:5;;;;;;;21256:88;21237:3;;;;;;;21197:158;;;;21392:3;21369:12;:19;;;;:26;21365:71;;;21404:4;21397:11;;;;;21365:71;21431:5;21424:12;;;21093:351;;;;:::o;25797:452::-;25925:4;25978:1;25955:25;;:11;;;;;;;;;;;:25;;;;25947:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26019:2;:7;;;26027:11;;;;;;;;;;;26048:2;26040:7;:10;26019:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26019:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26019:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26019:32:0;;;;;;;;;;;;;;;;;26150:25;26162:3;26167:7;26150:11;:25::i;:::-;26196:3;26191:18;;;26201:7;26191:18;;;;;;;;;;;;;;;;;;26237:4;26230:11;;25797:452;;;;;:::o;26331:335::-;26431:21;26447:4;26431:15;:21::i;:::-;26421:6;:31;;26413:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26520:1;26497:25;;:11;;;;;;;;;;;:25;;;;26489:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26563:2;:7;;;26571:11;;;;;;;;;;;26591:2;26584:6;:9;26563:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26563:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26563:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26563:31:0;;;;;;;;;;;;;;;;;26605:19;26611:4;26617:6;26605:5;:19::i;:::-;26645:4;26640:18;;;26651:6;26640:18;;;;;;;;;;;;;;;;;;26331:335;;;:::o;27313:667::-;27377:9;27389:1;27377:13;;27373:600;27396:8;:17;27405:7;27396:17;;;;;;;;;;;;;;;:24;;;;27392:1;:28;27373:600;;;27484:3;27448:8;:17;27457:7;27448:17;;;;;;;;;;;;;;;27466:1;27448:20;;;;;;;;;;;;;;;;;;;;:32;;;:39;;27444:518;;;27529:52;27552:8;:17;27561:7;27552:17;;;;;;;;;;;;;;;27570:1;27552:20;;;;;;;;;;;;;;;;;;;;:28;;;27529:9;:18;27539:7;27529:18;;;;;;;;;;;;;;;;:22;;:52;;;;:::i;:::-;27508:9;:18;27518:7;27508:18;;;;;;;;;;;;;;;:73;;;;27612:7;27605:45;;;27621:8;:17;27630:7;27621:17;;;;;;;;;;;;;;;27639:1;27621:20;;;;;;;;;;;;;;;;;;;;:28;;;27605:45;;;;;;;;;;;;;;;;;;27700:1;27669:8;:17;27678:7;27669:17;;;;;;;;;;;;;;;27687:1;27669:20;;;;;;;;;;;;;;;;;;;;:28;;:32;;;;27758:1;27731:8;:17;27740:7;27731:17;;;;;;;;;;;;;;;:24;;;;:28;27726:1;:33;;27722:178;;;27807:8;:17;27816:7;27807:17;;;;;;;;;;;;;;;27852:1;27825:8;:17;27834:7;27825:17;;;;;;;;;;;;;;;:24;;;;:28;27807:47;;;;;;;;;;;;;;;;;;;;27784:8;:17;27793:7;27784:17;;;;;;;;;;;;;;;27802:1;27784:20;;;;;;;;;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;;27877:3;;;;;;;;27722:178;27918:8;:17;27927:7;27918:17;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:::i;:::-;;27444:518;27423:3;;;;;;;27373:600;;;;27313:667;:::o;9718:256::-;9807:4;9824:36;9834:6;9842:9;9853:6;9824:9;:36::i;:::-;9871:73;9880:6;9888:10;9900:43;9936:6;9900:11;:19;9912:6;9900:19;;;;;;;;;;;;;;;:31;9920:10;9900:31;;;;;;;;;;;;;;;;:35;;:43;;;;:::i;:::-;9871:8;:73::i;:::-;9962:4;9955:11;;9718:256;;;;;:::o;3798:181::-;3856:7;3876:9;3892:1;3888;:5;3876:17;;3917:1;3912;:6;;3904:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3970:1;3963:8;;;3798:181;;;;:::o;8276:110::-;8333:7;8360:9;:18;8370:7;8360:18;;;;;;;;;;;;;;;;8353:25;;8276:110;;;:::o;4254:184::-;4312:7;4345:1;4340;:6;;4332:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4392:9;4408:1;4404;:5;4392:17;;4429:1;4422:8;;;4254:184;;;;:::o;8599:156::-;8668:4;8685:40;8695:10;8707:9;8718:6;8685:9;:40::i;:::-;8743:4;8736:11;;8599:156;;;;:::o;23408:206::-;23504:1;23483:23;;:9;:23;;;;23475:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23568:9;23540:38;;23561:5;;;;;;;;;;;23540:38;;;;;;;;;;;;23597:9;23589:5;;:17;;;;;;;;;;;;;;;;;;23408:206;:::o;12508:308::-;12603:1;12584:21;;:7;:21;;;;12576:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12669:24;12686:6;12669:12;;:16;;:24;;;;:::i;:::-;12654:12;:39;;;;12725:30;12748:6;12725:9;:18;12735:7;12725:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;12704:9;:18;12714:7;12704:18;;;;;;;;;;;;;;;:51;;;;12792:7;12771:37;;12788:1;12771:37;;;12801:6;12771:37;;;;;;;;;;;;;;;;;;12508:308;;:::o;13148:306::-;13242:1;13223:21;;:7;:21;;;;13215:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13310:23;13327:5;13310:12;;:16;;:23;;;;:::i;:::-;13295:12;:38;;;;13365:29;13388:5;13365:9;:18;13375:7;13365:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;13344:9;:18;13354:7;13344:18;;;;;;;;;;;;;;;:50;;;;13436:1;13410:36;;13419:7;13410:36;;;13440:5;13410:36;;;;;;;;;;;;;;;;;;13148:306;;:::o;11798:429::-;11914:1;11896:20;;:6;:20;;;;11888:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11998:1;11977:23;;:9;:23;;;;11969:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12073:29;12095:6;12073:9;:17;12083:6;12073:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;12053:9;:17;12063:6;12053:17;;;;;;;;;;;;;;;:49;;;;12136:32;12161:6;12136:9;:20;12146:9;12136:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12113:9;:20;12123:9;12113:20;;;;;;;;;;;;;;;:55;;;;12201:9;12184:35;;12193:6;12184:35;;;12212:6;12184:35;;;;;;;;;;;;;;;;;;11798:429;;;:::o;17684:13161::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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