ETH Price: $3,272.74 (-0.44%)

Token

dCOCK (dCOCK)
 

Overview

Max Total Supply

23.011116094591909908 dCOCK

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.285579946666666666 dCOCK

Value
$0.00
0x790f717af667f91b87fbe7063034565542fd3929
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:
dCOCKv2

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-02
*/

pragma solidity ^0.6.0;

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.
     *
     * IMPORTANT: 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);
}

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }

    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override 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 virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        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 `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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 virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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 virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        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 virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _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 virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

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

    /**
     * @dev Destroys `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 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

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

    /**
     * @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 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

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

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

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

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

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

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

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

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

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * 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-contracts/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) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * 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, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        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) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

contract dCOCKv2 is ERC20 {
    
    struct stakeTracker {
        uint256 lastBlockChecked;
        uint256 rewards;
        uint256 crumbsStaked;
        
        uint256 lastBlockCheckedLP;
        uint256 rewardsLP;
        uint256 crumbsStakedLP;
    }

    address private owner;
    
    uint256 private rewardsVar;
    uint256 private rewardsVarLP;
    
    using SafeERC20 for IERC20;
    using SafeMath for uint256;
 
    address private crumbsAddress;
    IERC20 private crumbsToken;
    
    //LP
    address private crumbsAddressLP;
    IERC20 private crumbsTokenLP;

    uint256 private _totalCrumbsStaked;
    mapping(address => stakeTracker) private _stakedBalances;
    
    //LP
    uint256 private _totalCrumbsStakedLP;
    mapping(address => stakeTracker) private _stakedBalancesLP;
    
    constructor() public ERC20("dCOCK", "dCOCK") {
        owner = msg.sender;
        _mint(msg.sender, 1 * (10 ** 18));
        rewardsVar = 100000000;
        rewardsVarLP = 100000000; //changed to 100000000
    }
    
    event Staked(address indexed user, uint256 amount, uint256 totalCrumbsStaked);
    event Withdrawn(address indexed user, uint256 amount);
    event Rewards(address indexed user, uint256 reward);
    
    event StakedLP(address indexed user, uint256 amount, uint256 totalCrumbsStakedLP);
    event WithdrawnLP(address indexed user, uint256 amountLP);
    event RewardsLP(address indexed user, uint256 rewardLP);
    
    modifier _onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    modifier updateStakingReward(address account) {
        if (block.number > _stakedBalances[account].lastBlockChecked) {
            uint256 rewardBlocks = block.number
                                        .sub(_stakedBalances[account].lastBlockChecked);
                                        
                                        
             
            if (_stakedBalances[account].crumbsStaked > 0) {
                _stakedBalances[account].rewards = _stakedBalances[account].rewards
                                                                            .add(
                                                                            _stakedBalances[account].crumbsStaked
                                                                            .mul(rewardBlocks)
                                                                            / rewardsVar);
            }
                    
            _stakedBalances[account].lastBlockChecked = block.number;
            
            emit Rewards(account, _stakedBalances[account].rewards);                                                     
        }
        _;
    }
    
    modifier updateStakingRewardLP(address account) {
        if (block.number > _stakedBalancesLP[account].lastBlockCheckedLP) {
            uint256 rewardBlocksLP = block.number
                                        .sub(_stakedBalancesLP[account].lastBlockCheckedLP);
                                        
                                        
             
            if (_stakedBalancesLP[account].crumbsStakedLP > 0) {
                _stakedBalancesLP[account].rewardsLP = _stakedBalancesLP[account].rewardsLP
                                                                            .add(
                                                                            _stakedBalancesLP[account].crumbsStakedLP
                                                                            .mul(rewardBlocksLP)
                                                                            / rewardsVarLP);
            }
                    
            _stakedBalancesLP[account].lastBlockCheckedLP = block.number;
            
            emit RewardsLP(account, _stakedBalancesLP[account].rewardsLP);                                                     
        }
        _;
    }


    function setCrumbsAddress(address _crumbsAddress) public _onlyOwner returns(uint256) {
        crumbsAddress = _crumbsAddress;
        crumbsToken = IERC20(_crumbsAddress);
    }
    
    function setCrumbsAddressLP(address _crumbsAddressLP) public _onlyOwner returns(uint256) {
        crumbsAddressLP = _crumbsAddressLP;
        crumbsTokenLP = IERC20(_crumbsAddressLP);
    }
    
    function updatingStakingReward(address account) public returns(uint256) {
        if (block.number > _stakedBalances[account].lastBlockChecked) {
            uint256 rewardBlocks = block.number
                                        .sub(_stakedBalances[account].lastBlockChecked);
                                        
                                        
            if (_stakedBalances[account].crumbsStaked > 0) {
                _stakedBalances[account].rewards = _stakedBalances[account].rewards
                                                                            .add(
                                                                            _stakedBalances[account].crumbsStaked
                                                                            .mul(rewardBlocks)
                                                                            / rewardsVar);
            }
                                                
            _stakedBalances[account].lastBlockChecked = block.number;
                                                
            emit Rewards(account, _stakedBalances[account].rewards);                                                     
        
        }
        return(_stakedBalances[account].rewards);
    }
    
    function updatingStakingRewardLP(address account) public returns(uint256) {
        if (block.number > _stakedBalancesLP[account].lastBlockCheckedLP) {
            uint256 rewardBlocksLP = block.number
                                        .sub(_stakedBalancesLP[account].lastBlockCheckedLP);
                                        
                                        
            if (_stakedBalancesLP[account].crumbsStakedLP > 0) {
                _stakedBalancesLP[account].rewardsLP = _stakedBalancesLP[account].rewardsLP
                                                                            .add(
                                                                            _stakedBalancesLP[account].crumbsStakedLP
                                                                            .mul(rewardBlocksLP)
                                                                            / rewardsVarLP);
            }
                                                
            _stakedBalancesLP[account].lastBlockCheckedLP = block.number;
                                                
            emit RewardsLP(account, _stakedBalancesLP[account].rewardsLP);                                                     
        
        }
        return(_stakedBalancesLP[account].rewardsLP);
    }
    
    function getBlockNum() public view returns (uint256) {
        return block.number;
    }
    
    function getLastBlockCheckedNum(address _account) public view returns (uint256) {
        return _stakedBalances[_account].lastBlockChecked;
    }
    
    function getLastBlockCheckedNumLP(address _account) public view returns (uint256) {
        return _stakedBalancesLP[_account].lastBlockCheckedLP;
    }

    function getAddressStakeAmount(address _account) public view returns (uint256) {
        return _stakedBalances[_account].crumbsStaked;
    }
    
    function getAddressStakeAmountLP(address _account) public view returns (uint256) {
        return _stakedBalancesLP[_account].crumbsStakedLP;
    }
    
    function setRewardsVar(uint256 _amount) public _onlyOwner {
        rewardsVar = _amount;
    }
    
    function setRewardsVarLP(uint256 _amount) public _onlyOwner {
        rewardsVarLP = _amount;
    }
    
    function totalStakedSupply() public view returns (uint256) {
        return _totalCrumbsStaked;
    }
    
    function totalStakedSupplyLP() public view returns (uint256) {
        return _totalCrumbsStakedLP;
    }

    function myRewardsBalance(address account) public view returns (uint256) {
        if (block.number > _stakedBalances[account].lastBlockChecked) {
            uint256 rewardBlocks = block.number
                                        .sub(_stakedBalances[account].lastBlockChecked);
                                        
                                        
             
            if (_stakedBalances[account].crumbsStaked > 0) {
                return _stakedBalances[account].rewards
                                                .add(
                                                _stakedBalances[account].crumbsStaked
                                                .mul(rewardBlocks)
                                                / rewardsVar);
            }                                                  
        }

    }
    
    function myRewardsBalanceLP(address account) public view returns (uint256) {
        if (block.number > _stakedBalancesLP[account].lastBlockCheckedLP) {
            uint256 rewardBlocksLP = block.number
                                        .sub(_stakedBalancesLP[account].lastBlockCheckedLP);
                                        
                                        
             
            if (_stakedBalancesLP[account].crumbsStakedLP > 0) {
                return _stakedBalancesLP[account].rewardsLP
                                                .add(
                                                _stakedBalancesLP[account].crumbsStakedLP
                                                .mul(rewardBlocksLP)
                                                / rewardsVarLP);
            }                                                  
        }

    }

    function stake(uint256 amount) public updateStakingReward(msg.sender) {
        _totalCrumbsStaked = _totalCrumbsStaked.add(amount);
        _stakedBalances[msg.sender].crumbsStaked = _stakedBalances[msg.sender].crumbsStaked.add(amount);
        crumbsToken.safeTransferFrom(msg.sender, address(this), amount);
        emit Staked(msg.sender, amount, _totalCrumbsStaked);
    }
    
    function stakeLP(uint256 amount) public updateStakingRewardLP(msg.sender) {
        _totalCrumbsStakedLP = _totalCrumbsStakedLP.add(amount);
        _stakedBalancesLP[msg.sender].crumbsStakedLP = _stakedBalancesLP[msg.sender].crumbsStakedLP.add(amount);
        crumbsTokenLP.safeTransferFrom(msg.sender, address(this), amount);
        emit StakedLP(msg.sender, amount, _totalCrumbsStakedLP);
    }

    function withdraw(uint256 amount) public updateStakingReward(msg.sender) {
        _totalCrumbsStaked = _totalCrumbsStaked.sub(amount);
        _stakedBalances[msg.sender].crumbsStaked = _stakedBalances[msg.sender].crumbsStaked.sub(amount);
        crumbsToken.safeTransfer(msg.sender, amount);
        emit Withdrawn(msg.sender, amount);
    }
    
    function withdrawLP(uint256 amount) public updateStakingRewardLP(msg.sender) {
        _totalCrumbsStakedLP = _totalCrumbsStakedLP.sub(amount);
        _stakedBalancesLP[msg.sender].crumbsStakedLP = _stakedBalancesLP[msg.sender].crumbsStakedLP.sub(amount);
        crumbsTokenLP.safeTransfer(msg.sender, amount);
        emit WithdrawnLP(msg.sender, amount);
    }
    
   function getReward() public updateStakingReward(msg.sender) {
       uint256 reward = _stakedBalances[msg.sender].rewards;
       _stakedBalances[msg.sender].rewards = 0;
       _mint(msg.sender, reward.mul(8) / 10);
       uint256 fundingPoolReward = reward.mul(2) / 10;
       _mint(crumbsAddress, fundingPoolReward);
       emit Rewards(msg.sender, reward);
   }
   
    function getRewardLP() public updateStakingRewardLP(msg.sender) {
       uint256 rewardLP = _stakedBalancesLP[msg.sender].rewardsLP;
       _stakedBalancesLP[msg.sender].rewardsLP = 0;
       _mint(msg.sender, rewardLP.mul(8) / 10);
       uint256 fundingPoolRewardLP = rewardLP.mul(2) / 10;
       _mint(crumbsAddressLP, fundingPoolRewardLP);
       emit RewardsLP(msg.sender, rewardLP);
   }

    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Rewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardLP","type":"uint256"}],"name":"RewardsLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalCrumbsStaked","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalCrumbsStakedLP","type":"uint256"}],"name":"StakedLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountLP","type":"uint256"}],"name":"WithdrawnLP","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAddressStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAddressStakeAmountLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getLastBlockCheckedNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getLastBlockCheckedNumLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"myRewardsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"myRewardsBalanceLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_crumbsAddress","type":"address"}],"name":"setCrumbsAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_crumbsAddressLP","type":"address"}],"name":"setCrumbsAddressLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setRewardsVar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setRewardsVarLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedSupplyLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updatingStakingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updatingStakingRewardLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600581526020017f64434f434b0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f64434f434b000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620003b1565b508060049080519060200190620000af929190620003b1565b506012600560006101000a81548160ff021916908360ff160217905550505033600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012933670de0b6b3a76400006200014560201b60201c565b6305f5e1006006819055506305f5e10060078190555062000460565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620001fd600083836200032360201b60201c565b62000219816002546200032860201b620038bf1790919060201c565b60028190555062000277816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200032860201b620038bf1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600080828401905083811015620003a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003f457805160ff191683800117855562000425565b8280016001018555821562000425579182015b828111156200042457825182559160200191906001019062000407565b5b50905062000434919062000438565b5090565b6200045d91905b80821115620004595760008160009055506001016200043f565b5090565b90565b61445180620004706000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637c7709a11161010f578063bcdc3cfc116100a2578063e295501a11610071578063e295501a14610a5f578063e4456ecb14610a69578063e5da2cb214610a97578063e60df1b614610ac5576101f0565b8063bcdc3cfc14610943578063be35ef1414610961578063db260b3e146109b9578063dd62ed3e146109e7576101f0565b8063a457c2d7116100de578063a457c2d7146107f1578063a57306dc14610857578063a694fc3a146108af578063a9059cbb146108dd576101f0565b80637c7709a1146106da5780637f6c6f10146107325780637fe301011461075057806395d89b411461076e576101f0565b8063313ce567116101875780634aa12ec7116101565780634aa12ec71461057a5780636667da5b146105d257806370a082311461062a578063780fa43414610682576101f0565b8063313ce5671461048e57806339509351146104b25780633d18b9121461051857806345343e9b14610522576101f0565b806318160ddd116101c357806318160ddd1461038e5780631ead6247146103ac57806323b872dd146103da5780632e1a7d4d14610460576101f0565b806306fdde03146101f5578063095ea7b31461027857806312408859146102de57806313c0a8e214610336575b600080fd5b6101fd610b1d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023d578082015181840152602081019050610222565b50505050905090810190601f16801561026a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c46004803603604081101561028e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bbf565b604051808215151515815260200191505060405180910390f35b610320600480360360208110156102f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bdd565b6040518082815260200191505060405180910390f35b6103786004803603602081101561034c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d91565b6040518082815260200191505060405180910390f35b61039661109f565b6040518082815260200191505060405180910390f35b6103d8600480360360208110156103c257600080fd5b81019080803590602001909291905050506110a9565b005b610446600480360360608110156103f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061110d565b604051808215151515815260200191505060405180910390f35b61048c6004803603602081101561047657600080fd5b81019080803590602001909291905050506111e6565b005b6104966115fe565b604051808260ff1660ff16815260200191505060405180910390f35b6104fe600480360360408110156104c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611615565b604051808215151515815260200191505060405180910390f35b6105206116c8565b005b6105646004803603602081101561053857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae2565b6040518082815260200191505060405180910390f35b6105bc6004803603602081101561059057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc5565b6040518082815260200191505060405180910390f35b610614600480360360208110156105e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed3565b6040518082815260200191505060405180910390f35b61066c6004803603602081101561064057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fb6565b6040518082815260200191505060405180910390f35b6106c46004803603602081101561069857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ffe565b6040518082815260200191505060405180910390f35b61071c600480360360208110156106f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061204a565b6040518082815260200191505060405180910390f35b61073a612096565b6040518082815260200191505060405180910390f35b61075861209e565b6040518082815260200191505060405180910390f35b6107766120a8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107b657808201518184015260208101905061079b565b50505050905090810190601f1680156107e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61083d6004803603604081101561080757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061214a565b604051808215151515815260200191505060405180910390f35b6108996004803603602081101561086d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612217565b6040518082815260200191505060405180910390f35b6108db600480360360208110156108c557600080fd5b81019080803590602001909291905050506123cb565b005b610929600480360360408110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127ef565b604051808215151515815260200191505060405180910390f35b61094b61280d565b6040518082815260200191505060405180910390f35b6109a36004803603602081101561097757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612817565b6040518082815260200191505060405180910390f35b6109e5600480360360208110156109cf57600080fd5b8101908080359060200190929190505050612863565b005b610a49600480360360408110156109fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128c7565b6040518082815260200191505060405180910390f35b610a6761294e565b005b610a9560048036036020811015610a7f57600080fd5b8101908080359060200190929190505050612d68565b005b610ac360048036036020811015610aad57600080fd5b8101908080359060200190929190505050613180565b005b610b0760048036036020811015610adb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135a4565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bb55780601f10610b8a57610100808354040283529160200191610bb5565b820191906000526020600020905b815481529060010190602001808311610b9857829003601f168201915b5050505050905090565b6000610bd3610bcc6135f0565b84846135f8565b6001905092915050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154431115610d8b576000610c80600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501541115610d8957610d81600754610d2883600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b81610d2f57fe5b04600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b915050610d8c565b505b5b919050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154431115611055576000610e34600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501541115610f7c57610f35600754610edc83600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b81610ee357fe5b04600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b43600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055508273ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546040518082815260200191505060405180910390a2505b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050919050565b6000600254905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110357600080fd5b8060078190555050565b600061111a848484613947565b6111db846111266135f0565b6111d68560405180606001604052806028815260200161435c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061118c6135f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c089092919063ffffffff16565b6135f8565b600190509392505050565b33600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001544311156114a9576000611288600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156113d05761138960065461133083600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b8161133757fe5b04600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b43600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508173ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518082815260200191505060405180910390a2505b6114be82600c546137ef90919063ffffffff16565b600c8190555061151982600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546137ef90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506115ac3383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cc89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b6000600560009054906101000a900460ff16905090565b60006116be6116226135f0565b846116b985600160006116336135f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138bf90919063ffffffff16565b6135f8565b6001905092915050565b33600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015443111561198b57600061176a600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156118b25761186b60065461181283600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b8161181957fe5b04600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b43600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508173ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518082815260200191505060405180910390a2505b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611a4133600a611a3460088561383990919063ffffffff16565b81611a3b57fe5b04613d80565b6000600a611a5960028461383990919063ffffffff16565b81611a6057fe5b049050611a8f600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613d80565b3373ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a836040518082815260200191505060405180910390a2505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b3e57600080fd5b81600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154431115611e89576000611c68600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201541115611db057611d69600654611d1083600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b81611d1757fe5b04600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b43600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508273ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518082815260200191505060405180910390a2505b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f2f57600080fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501549050919050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549050919050565b600043905090565b6000600e54905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121405780601f1061211557610100808354040283529160200191612140565b820191906000526020600020905b81548152906001019060200180831161212357829003601f168201915b5050505050905090565b600061220d6121576135f0565b84612208856040518060600160405280602581526020016143f760259139600160006121816135f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c089092919063ffffffff16565b6135f8565b6001905092915050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001544311156123c55760006122ba600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156123c3576123bb60065461236283600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b8161236957fe5b04600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b9150506123c6565b505b5b919050565b33600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015443111561268e57600061246d600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156125b55761256e60065461251583600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b8161251c57fe5b04600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b43600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508173ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518082815260200191505060405180910390a2505b6126a382600c546138bf90919063ffffffff16565b600c819055506126fe82600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546138bf90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550612793333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613f47909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9083600c54604051808381526020018281526020019250505060405180910390a25050565b60006128036127fc6135f0565b8484613947565b6001905092915050565b6000600c54905090565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128bd57600080fd5b8060068190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b33600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154431115612c115760006129f0600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501541115612b3857612af1600754612a9883600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b81612a9f57fe5b04600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b43600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055508173ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546040518082815260200191505060405180910390a2505b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015490506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550612cc733600a612cba60088561383990919063ffffffff16565b81612cc157fe5b04613d80565b6000600a612cdf60028461383990919063ffffffff16565b81612ce657fe5b049050612d15600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613d80565b3373ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7836040518082815260200191505060405180910390a2505050565b33600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015443111561302b576000612e0a600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501541115612f5257612f0b600754612eb283600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b81612eb957fe5b04600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b43600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055508173ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546040518082815260200191505060405180910390a2505b61304082600e546137ef90919063ffffffff16565b600e8190555061309b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546137ef90919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555061312e3383600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cc89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fb9242cc3bd25e29580e62b0ff5fd134d37aaeaa59556787cb5a8dda08852e176836040518082815260200191505060405180910390a25050565b33600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154431115613443576000613222600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154111561336a576133236007546132ca83600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b816132d157fe5b04600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b43600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055508173ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546040518082815260200191505060405180910390a2505b61345882600e546138bf90919063ffffffff16565b600e819055506134b382600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546138bf90919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550613548333084600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613f47909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fb7b233b6521c7f0372a87c02ad816107c5cbe56f7a82c3607d13bb14579fa05d83600e54604051808381526020018281526020019250505060405180910390a25050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561367e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143a96024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142f36022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061383183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c08565b905092915050565b60008083141561384c57600090506138b9565b600082840290508284828161385d57fe5b04146138b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061433b6021913960400191505060405180910390fd5b809150505b92915050565b60008082840190508381101561393d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143846025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806142d06023913960400191505060405180910390fd5b613a5e838383614034565b613ac981604051806060016040528060268152602001614315602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c089092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b5c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138bf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290613cb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c7a578082015181840152602081019050613c5f565b50505050905090810190601f168015613ca75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b613d7b8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614039565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613e2f60008383614034565b613e44816002546138bf90919063ffffffff16565b600281905550613e9b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138bf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b61402e846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614039565b50505050565b505050565b6140588273ffffffffffffffffffffffffffffffffffffffff16614284565b6140ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061411957805182526020820191506020810190506020830392506140f6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461417b576040519150601f19603f3d011682016040523d82523d6000602084013e614180565b606091505b5091509150816141f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561427e5780806020019051602081101561421757600080fd5b810190808051906020019092919050505061427d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806143cd602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156142c657506000801b8214155b9250505091905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122019f546df4762f46b8966008779060714f14af2ad0afb1c74f92f232a9109fcd364736f6c63430006060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637c7709a11161010f578063bcdc3cfc116100a2578063e295501a11610071578063e295501a14610a5f578063e4456ecb14610a69578063e5da2cb214610a97578063e60df1b614610ac5576101f0565b8063bcdc3cfc14610943578063be35ef1414610961578063db260b3e146109b9578063dd62ed3e146109e7576101f0565b8063a457c2d7116100de578063a457c2d7146107f1578063a57306dc14610857578063a694fc3a146108af578063a9059cbb146108dd576101f0565b80637c7709a1146106da5780637f6c6f10146107325780637fe301011461075057806395d89b411461076e576101f0565b8063313ce567116101875780634aa12ec7116101565780634aa12ec71461057a5780636667da5b146105d257806370a082311461062a578063780fa43414610682576101f0565b8063313ce5671461048e57806339509351146104b25780633d18b9121461051857806345343e9b14610522576101f0565b806318160ddd116101c357806318160ddd1461038e5780631ead6247146103ac57806323b872dd146103da5780632e1a7d4d14610460576101f0565b806306fdde03146101f5578063095ea7b31461027857806312408859146102de57806313c0a8e214610336575b600080fd5b6101fd610b1d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023d578082015181840152602081019050610222565b50505050905090810190601f16801561026a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c46004803603604081101561028e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bbf565b604051808215151515815260200191505060405180910390f35b610320600480360360208110156102f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bdd565b6040518082815260200191505060405180910390f35b6103786004803603602081101561034c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d91565b6040518082815260200191505060405180910390f35b61039661109f565b6040518082815260200191505060405180910390f35b6103d8600480360360208110156103c257600080fd5b81019080803590602001909291905050506110a9565b005b610446600480360360608110156103f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061110d565b604051808215151515815260200191505060405180910390f35b61048c6004803603602081101561047657600080fd5b81019080803590602001909291905050506111e6565b005b6104966115fe565b604051808260ff1660ff16815260200191505060405180910390f35b6104fe600480360360408110156104c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611615565b604051808215151515815260200191505060405180910390f35b6105206116c8565b005b6105646004803603602081101561053857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae2565b6040518082815260200191505060405180910390f35b6105bc6004803603602081101561059057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc5565b6040518082815260200191505060405180910390f35b610614600480360360208110156105e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed3565b6040518082815260200191505060405180910390f35b61066c6004803603602081101561064057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fb6565b6040518082815260200191505060405180910390f35b6106c46004803603602081101561069857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ffe565b6040518082815260200191505060405180910390f35b61071c600480360360208110156106f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061204a565b6040518082815260200191505060405180910390f35b61073a612096565b6040518082815260200191505060405180910390f35b61075861209e565b6040518082815260200191505060405180910390f35b6107766120a8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107b657808201518184015260208101905061079b565b50505050905090810190601f1680156107e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61083d6004803603604081101561080757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061214a565b604051808215151515815260200191505060405180910390f35b6108996004803603602081101561086d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612217565b6040518082815260200191505060405180910390f35b6108db600480360360208110156108c557600080fd5b81019080803590602001909291905050506123cb565b005b610929600480360360408110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127ef565b604051808215151515815260200191505060405180910390f35b61094b61280d565b6040518082815260200191505060405180910390f35b6109a36004803603602081101561097757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612817565b6040518082815260200191505060405180910390f35b6109e5600480360360208110156109cf57600080fd5b8101908080359060200190929190505050612863565b005b610a49600480360360408110156109fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128c7565b6040518082815260200191505060405180910390f35b610a6761294e565b005b610a9560048036036020811015610a7f57600080fd5b8101908080359060200190929190505050612d68565b005b610ac360048036036020811015610aad57600080fd5b8101908080359060200190929190505050613180565b005b610b0760048036036020811015610adb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135a4565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bb55780601f10610b8a57610100808354040283529160200191610bb5565b820191906000526020600020905b815481529060010190602001808311610b9857829003601f168201915b5050505050905090565b6000610bd3610bcc6135f0565b84846135f8565b6001905092915050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154431115610d8b576000610c80600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501541115610d8957610d81600754610d2883600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b81610d2f57fe5b04600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b915050610d8c565b505b5b919050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154431115611055576000610e34600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501541115610f7c57610f35600754610edc83600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b81610ee357fe5b04600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b43600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055508273ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546040518082815260200191505060405180910390a2505b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050919050565b6000600254905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110357600080fd5b8060078190555050565b600061111a848484613947565b6111db846111266135f0565b6111d68560405180606001604052806028815260200161435c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061118c6135f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c089092919063ffffffff16565b6135f8565b600190509392505050565b33600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001544311156114a9576000611288600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156113d05761138960065461133083600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b8161133757fe5b04600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b43600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508173ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518082815260200191505060405180910390a2505b6114be82600c546137ef90919063ffffffff16565b600c8190555061151982600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546137ef90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506115ac3383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cc89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b6000600560009054906101000a900460ff16905090565b60006116be6116226135f0565b846116b985600160006116336135f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138bf90919063ffffffff16565b6135f8565b6001905092915050565b33600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015443111561198b57600061176a600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156118b25761186b60065461181283600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b8161181957fe5b04600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b43600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508173ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518082815260200191505060405180910390a2505b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611a4133600a611a3460088561383990919063ffffffff16565b81611a3b57fe5b04613d80565b6000600a611a5960028461383990919063ffffffff16565b81611a6057fe5b049050611a8f600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613d80565b3373ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a836040518082815260200191505060405180910390a2505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b3e57600080fd5b81600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154431115611e89576000611c68600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201541115611db057611d69600654611d1083600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b81611d1757fe5b04600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b43600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508273ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518082815260200191505060405180910390a2505b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f2f57600080fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501549050919050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549050919050565b600043905090565b6000600e54905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121405780601f1061211557610100808354040283529160200191612140565b820191906000526020600020905b81548152906001019060200180831161212357829003601f168201915b5050505050905090565b600061220d6121576135f0565b84612208856040518060600160405280602581526020016143f760259139600160006121816135f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c089092919063ffffffff16565b6135f8565b6001905092915050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001544311156123c55760006122ba600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156123c3576123bb60065461236283600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b8161236957fe5b04600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b9150506123c6565b505b5b919050565b33600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015443111561268e57600061246d600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154436137ef90919063ffffffff16565b90506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411156125b55761256e60065461251583600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461383990919063ffffffff16565b8161251c57fe5b04600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546138bf90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b43600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508173ffffffffffffffffffffffffffffffffffffffff167fc083a1647e3ee591bf42b82564ffb4d16fdbb26068f0080da911c8d8300fd84a600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518082815260200191505060405180910390a2505b6126a382600c546138bf90919063ffffffff16565b600c819055506126fe82600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546138bf90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550612793333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613f47909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9083600c54604051808381526020018281526020019250505060405180910390a25050565b60006128036127fc6135f0565b8484613947565b6001905092915050565b6000600c54905090565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128bd57600080fd5b8060068190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b33600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154431115612c115760006129f0600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501541115612b3857612af1600754612a9883600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b81612a9f57fe5b04600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b43600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055508173ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546040518082815260200191505060405180910390a2505b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015490506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550612cc733600a612cba60088561383990919063ffffffff16565b81612cc157fe5b04613d80565b6000600a612cdf60028461383990919063ffffffff16565b81612ce657fe5b049050612d15600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613d80565b3373ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7836040518082815260200191505060405180910390a2505050565b33600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015443111561302b576000612e0a600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501541115612f5257612f0b600754612eb283600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b81612eb957fe5b04600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b43600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055508173ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546040518082815260200191505060405180910390a2505b61304082600e546137ef90919063ffffffff16565b600e8190555061309b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546137ef90919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555061312e3383600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cc89092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fb9242cc3bd25e29580e62b0ff5fd134d37aaeaa59556787cb5a8dda08852e176836040518082815260200191505060405180910390a25050565b33600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154431115613443576000613222600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154436137ef90919063ffffffff16565b90506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154111561336a576133236007546132ca83600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461383990919063ffffffff16565b816132d157fe5b04600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546138bf90919063ffffffff16565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055505b43600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055508173ffffffffffffffffffffffffffffffffffffffff167f995f5ace624567098ab4d5095755db78dba750bef7f45680431477dad9dadec7600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546040518082815260200191505060405180910390a2505b61345882600e546138bf90919063ffffffff16565b600e819055506134b382600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501546138bf90919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550613548333084600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613f47909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fb7b233b6521c7f0372a87c02ad816107c5cbe56f7a82c3607d13bb14579fa05d83600e54604051808381526020018281526020019250505060405180910390a25050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561367e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143a96024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142f36022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061383183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c08565b905092915050565b60008083141561384c57600090506138b9565b600082840290508284828161385d57fe5b04146138b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061433b6021913960400191505060405180910390fd5b809150505b92915050565b60008082840190508381101561393d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143846025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806142d06023913960400191505060405180910390fd5b613a5e838383614034565b613ac981604051806060016040528060268152602001614315602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c089092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b5c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138bf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290613cb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c7a578082015181840152602081019050613c5f565b50505050905090810190601f168015613ca75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b613d7b8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614039565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613e2f60008383614034565b613e44816002546138bf90919063ffffffff16565b600281905550613e9b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138bf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b61402e846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614039565b50505050565b505050565b6140588273ffffffffffffffffffffffffffffffffffffffff16614284565b6140ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061411957805182526020820191506020810190506020830392506140f6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461417b576040519150601f19603f3d011682016040523d82523d6000602084013e614180565b606091505b5091509150816141f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561427e5780806020019051602081101561421757600080fd5b810190808051906020019092919050505061427d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806143cd602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156142c657506000801b8214155b9250505091905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122019f546df4762f46b8966008779060714f14af2ad0afb1c74f92f232a9109fcd364736f6c63430006060033

Deployed Bytecode Sourcemap

23508:12344:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23508:12344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;6709:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6709:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8815:169;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;8815:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32612:891;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;32612:891:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29196:1336;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29196:1336:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7784:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31394:101;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31394:101:0;;;;;;;;;;;;;;;;;:::i;:::-;;9458:321;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;9458:321:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34317:349;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34317:349:0;;;;;;;;;;;;;;;;;:::i;:::-;;7636:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10188:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;10188:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35058:372;;;:::i;:::-;;27689:193;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27689:193:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27894:1290;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27894:1290:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27496:181;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27496:181:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7947:119;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7947:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31124:149;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31124:149:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30807:154;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30807:154:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30544:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31622:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6911:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6911:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10909:269;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;10909:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31737:863;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31737:863:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33511:382;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33511:382:0;;;;;;;;;;;;;;;;;:::i;:::-;;8279:175;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;8279:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31507:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30969:143;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30969:143:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31285:97;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31285:97:0;;;;;;;;;;;;;;;;;:::i;:::-;;8517:151;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;8517:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35441:400;;;:::i;:::-;;34678:369;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34678:369:0;;;;;;;;;;;;;;;;;:::i;:::-;;33905:404;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33905:404:0;;;;;;;;;;;;;;;;;:::i;:::-;;30647:148;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30647:148:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6709:83;6746:13;6779:5;6772:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6709:83;:::o;8815:169::-;8898:4;8915:39;8924:12;:10;:12::i;:::-;8938:7;8947:6;8915:8;:39::i;:::-;8972:4;8965:11;;8815:169;;;;:::o;32612:891::-;32678:7;32717:17;:26;32735:7;32717:26;;;;;;;;;;;;;;;:45;;;32702:12;:60;32698:796;;;32779:22;32804:105;32863:17;:26;32881:7;32863:26;;;;;;;;;;;;;;;:45;;;32804:12;:58;;:105;;;;:::i;:::-;32779:130;;33071:1;33027:17;:26;33045:7;33027:26;;;;;;;;;;;;;;;:41;;;:45;33023:410;;;33100:317;33404:12;;33241:111;33337:14;33241:17;:26;33259:7;33241:26;;;;;;;;;;;;;;;:41;;;:95;;:111;;;;:::i;:::-;:175;;;;;;33100:17;:26;33118:7;33100:26;;;;;;;;;;;;;;;:36;;;:90;;:317;;;;:::i;:::-;33093:324;;;;;33023:410;32698:796;;32612:891;;;;:::o;29196:1336::-;29261:7;29300:17;:26;29318:7;29300:26;;;;;;;;;;;;;;;:45;;;29285:12;:60;29281:1189;;;29362:22;29387:105;29446:17;:26;29464:7;29446:26;;;;;;;;;;;;;;;:45;;;29387:12;:58;;:105;;;;:::i;:::-;29362:130;;29639:1;29595:17;:26;29613:7;29595:26;;;;;;;;;;;;;;;:41;;;:45;29591:554;;;29700:429;30116:12;;29897:139;30021:14;29897:17;:26;29915:7;29897:26;;;;;;;;;;;;;;;:41;;;:123;;:139;;;;:::i;:::-;:231;;;;;;29700:17;:26;29718:7;29700:26;;;;;;;;;;;;;;;:36;;;:118;;:429;;;;:::i;:::-;29661:17;:26;29679:7;29661:26;;;;;;;;;;;;;;;:36;;:468;;;;29591:554;30257:12;30209:17;:26;30227:7;30209:26;;;;;;;;;;;;;;;:45;;:60;;;;30349:7;30339:56;;;30358:17;:26;30376:7;30358:26;;;;;;;;;;;;;;;:36;;;30339:56;;;;;;;;;;;;;;;;;;29281:1189;;30487:17;:26;30505:7;30487:26;;;;;;;;;;;;;;;:36;;;30480:44;;29196:1336;;;:::o;7784:100::-;7837:7;7864:12;;7857:19;;7784:100;:::o;31394:101::-;25066:5;;;;;;;;;;;25052:19;;:10;:19;;;25044:28;;12:1:-1;9;2:12;25044:28:0;31480:7:::1;31465:12;:22;;;;31394:101:::0;:::o;9458:321::-;9564:4;9581:36;9591:6;9599:9;9610:6;9581:9;:36::i;:::-;9628:121;9637:6;9645:12;:10;:12::i;:::-;9659:89;9697:6;9659:89;;;;;;;;;;;;;;;;;:11;:19;9671:6;9659:19;;;;;;;;;;;;;;;:33;9679:12;:10;:12::i;:::-;9659:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;9628:8;:121::i;:::-;9767:4;9760:11;;9458:321;;;;;:::o;34317:349::-;34378:10;25176:15;:24;25192:7;25176:24;;;;;;;;;;;;;;;:41;;;25161:12;:56;25157:1090;;;25234:20;25257:101;25316:15;:24;25332:7;25316:24;;;;;;;;;;;;;;;:41;;;25257:12;:58;;:101;;;;:::i;:::-;25234:124;;25516:1;25476:15;:24;25492:7;25476:24;;;;;;;;;;;;;;;:37;;;:41;25472:534;;;25573:417;25979:10;;25766:133;25886:12;25766:15;:24;25782:7;25766:24;;;;;;;;;;;;;;;:37;;;:119;;:133;;;;:::i;:::-;:223;;;;;;25573:15;:24;25589:7;25573:24;;;;;;;;;;;;;;;:32;;;:114;;:417;;;;:::i;:::-;25538:15;:24;25554:7;25538:24;;;;;;;;;;;;;;;:32;;:452;;;;25472:534;26086:12;26042:15;:24;26058:7;26042:24;;;;;;;;;;;;;;;:41;;:56;;;;26140:7;26132:50;;;26149:15;:24;26165:7;26149:24;;;;;;;;;;;;;;;:32;;;26132:50;;;;;;;;;;;;;;;;;;25157:1090;;34422:30:::1;34445:6;34422:18;;:22;;:30;;;;:::i;:::-;34401:18;:51;;;;34506:52;34551:6;34506:15;:27;34522:10;34506:27;;;;;;;;;;;;;;;:40;;;:44;;:52;;;;:::i;:::-;34463:15;:27;34479:10;34463:27;;;;;;;;;;;;;;;:40;;:95;;;;34569:44;34594:10;34606:6;34569:11;;;;;;;;;;;:24;;;;:44;;;;;:::i;:::-;34639:10;34629:29;;;34651:6;34629:29;;;;;;;;;;;;;;;;;;34317:349:::0;;:::o;7636:83::-;7677:5;7702:9;;;;;;;;;;;7695:16;;7636:83;:::o;10188:218::-;10276:4;10293:83;10302:12;:10;:12::i;:::-;10316:7;10325:50;10364:10;10325:11;:25;10337:12;:10;:12::i;:::-;10325:25;;;;;;;;;;;;;;;:34;10351:7;10325:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10293:8;:83::i;:::-;10394:4;10387:11;;10188:218;;;;:::o;35058:372::-;35106:10;25176:15;:24;25192:7;25176:24;;;;;;;;;;;;;;;:41;;;25161:12;:56;25157:1090;;;25234:20;25257:101;25316:15;:24;25332:7;25316:24;;;;;;;;;;;;;;;:41;;;25257:12;:58;;:101;;;;:::i;:::-;25234:124;;25516:1;25476:15;:24;25492:7;25476:24;;;;;;;;;;;;;;;:37;;;:41;25472:534;;;25573:417;25979:10;;25766:133;25886:12;25766:15;:24;25782:7;25766:24;;;;;;;;;;;;;;;:37;;;:119;;:133;;;;:::i;:::-;:223;;;;;;25573:15;:24;25589:7;25573:24;;;;;;;;;;;;;;;:32;;;:114;;:417;;;;:::i;:::-;25538:15;:24;25554:7;25538:24;;;;;;;;;;;;;;;:32;;:452;;;;25472:534;26086:12;26042:15;:24;26058:7;26042:24;;;;;;;;;;;;;;;:41;;:56;;;;26140:7;26132:50;;;26149:15;:24;26165:7;26149:24;;;;;;;;;;;;;;;:32;;;26132:50;;;;;;;;;;;;;;;;;;25157:1090;;35128:14:::1;35145:15;:27;35161:10;35145:27;;;;;;;;;;;;;;;:35;;;35128:52;;35228:1;35190:15;:27;35206:10;35190:27;;;;;;;;;;;;;;;:35;;:39;;;;35239:37;35245:10;35273:2;35257:13;35268:1;35257:6;:10;;:13;;;;:::i;:::-;:18;;;;;;35239:5;:37::i;:::-;35286:25;35330:2;35314:13;35325:1;35314:6;:10;;:13;;;;:::i;:::-;:18;;;;;;35286:46;;35342:39;35348:13;;;;;;;;;;;35363:17;35342:5;:39::i;:::-;35404:10;35396:27;;;35416:6;35396:27;;;;;;;;;;;;;;;;;;26257:1;;35058:372:::0;:::o;27689:193::-;27769:7;25066:5;;;;;;;;;;;25052:19;;:10;:19;;;25044:28;;12:1:-1;9;2:12;25044:28:0;27807:16:::1;27789:15;;:34;;;;;;;;;;;;;;;;;;27857:16;27834:13;;:40;;;;;;;;;;;;;;;;;;27689:193:::0;;;:::o;27894:1290::-;27957:7;27996:15;:24;28012:7;27996:24;;;;;;;;;;;;;;;:41;;;27981:12;:56;27977:1149;;;28054:20;28077:101;28136:15;:24;28152:7;28136:24;;;;;;;;;;;;;;;:41;;;28077:12;:58;;:101;;;;:::i;:::-;28054:124;;28321:1;28281:15;:24;28297:7;28281:24;;;;;;;;;;;;;;;:37;;;:41;28277:534;;;28378:417;28784:10;;28571:133;28691:12;28571:15;:24;28587:7;28571:24;;;;;;;;;;;;;;;:37;;;:119;;:133;;;;:::i;:::-;:223;;;;;;28378:15;:24;28394:7;28378:24;;;;;;;;;;;;;;;:32;;;:114;;:417;;;;:::i;:::-;28343:15;:24;28359:7;28343:24;;;;;;;;;;;;;;;:32;;:452;;;;28277:534;28919:12;28875:15;:24;28891:7;28875:24;;;;;;;;;;;;;;;:41;;:56;;;;29009:7;29001:50;;;29018:15;:24;29034:7;29018:24;;;;;;;;;;;;;;;:32;;;29001:50;;;;;;;;;;;;;;;;;;27977:1149;;29143:15;:24;29159:7;29143:24;;;;;;;;;;;;;;;:32;;;29136:40;;27894:1290;;;:::o;27496:181::-;27572:7;25066:5;;;;;;;;;;;25052:19;;:10;:19;;;25044:28;;12:1:-1;9;2:12;25044:28:0;27608:14:::1;27592:13;;:30;;;;;;;;;;;;;;;;;;27654:14;27633:11;;:36;;;;;;;;;;;;;;;;;;27496:181:::0;;;:::o;7947:119::-;8013:7;8040:9;:18;8050:7;8040:18;;;;;;;;;;;;;;;;8033:25;;7947:119;;;:::o;31124:149::-;31196:7;31223:17;:27;31241:8;31223:27;;;;;;;;;;;;;;;:42;;;31216:49;;31124:149;;;:::o;30807:154::-;30880:7;30907:17;:27;30925:8;30907:27;;;;;;;;;;;;;;;:46;;;30900:53;;30807:154;;;:::o;30544:91::-;30588:7;30615:12;30608:19;;30544:91;:::o;31622:107::-;31674:7;31701:20;;31694:27;;31622:107;:::o;6911:87::-;6950:13;6983:7;6976:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6911:87;:::o;10909:269::-;11002:4;11019:129;11028:12;:10;:12::i;:::-;11042:7;11051:96;11090:15;11051:96;;;;;;;;;;;;;;;;;:11;:25;11063:12;:10;:12::i;:::-;11051:25;;;;;;;;;;;;;;;:34;11077:7;11051:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11019:8;:129::i;:::-;11166:4;11159:11;;10909:269;;;;:::o;31737:863::-;31801:7;31840:15;:24;31856:7;31840:24;;;;;;;;;;;;;;;:41;;;31825:12;:56;31821:770;;;31898:20;31921:101;31980:15;:24;31996:7;31980:24;;;;;;;;;;;;;;;:41;;;31921:12;:58;;:101;;;;:::i;:::-;31898:124;;32180:1;32140:15;:24;32156:7;32140:24;;;;;;;;;;;;;;;:37;;;:41;32136:394;;;32209:305;32503:10;;32346:105;32438:12;32346:15;:24;32362:7;32346:24;;;;;;;;;;;;;;;:37;;;:91;;:105;;;;:::i;:::-;:167;;;;;;32209:15;:24;32225:7;32209:24;;;;;;;;;;;;;;;:32;;;:86;;:305;;;;:::i;:::-;32202:312;;;;;32136:394;31821:770;;31737:863;;;;:::o;33511:382::-;33569:10;25176:15;:24;25192:7;25176:24;;;;;;;;;;;;;;;:41;;;25161:12;:56;25157:1090;;;25234:20;25257:101;25316:15;:24;25332:7;25316:24;;;;;;;;;;;;;;;:41;;;25257:12;:58;;:101;;;;:::i;:::-;25234:124;;25516:1;25476:15;:24;25492:7;25476:24;;;;;;;;;;;;;;;:37;;;:41;25472:534;;;25573:417;25979:10;;25766:133;25886:12;25766:15;:24;25782:7;25766:24;;;;;;;;;;;;;;;:37;;;:119;;:133;;;;:::i;:::-;:223;;;;;;25573:15;:24;25589:7;25573:24;;;;;;;;;;;;;;;:32;;;:114;;:417;;;;:::i;:::-;25538:15;:24;25554:7;25538:24;;;;;;;;;;;;;;;:32;;:452;;;;25472:534;26086:12;26042:15;:24;26058:7;26042:24;;;;;;;;;;;;;;;:41;;:56;;;;26140:7;26132:50;;;26149:15;:24;26165:7;26149:24;;;;;;;;;;;;;;;:32;;;26132:50;;;;;;;;;;;;;;;;;;25157:1090;;33613:30:::1;33636:6;33613:18;;:22;;:30;;;;:::i;:::-;33592:18;:51;;;;33697:52;33742:6;33697:15;:27;33713:10;33697:27;;;;;;;;;;;;;;;:40;;;:44;;:52;;;;:::i;:::-;33654:15;:27;33670:10;33654:27;;;;;;;;;;;;;;;:40;;:95;;;;33760:63;33789:10;33809:4;33816:6;33760:11;;;;;;;;;;;:28;;;;:63;;;;;;:::i;:::-;33846:10;33839:46;;;33858:6;33866:18;;33839:46;;;;;;;;;;;;;;;;;;;;;;;;33511:382:::0;;:::o;8279:175::-;8365:4;8382:42;8392:12;:10;:12::i;:::-;8406:9;8417:6;8382:9;:42::i;:::-;8442:4;8435:11;;8279:175;;;;:::o;31507:103::-;31557:7;31584:18;;31577:25;;31507:103;:::o;30969:143::-;31039:7;31066:15;:25;31082:8;31066:25;;;;;;;;;;;;;;;:38;;;31059:45;;30969:143;;;:::o;31285:97::-;25066:5;;;;;;;;;;;25052:19;;:10;:19;;;25044:28;;12:1:-1;9;2:12;25044:28:0;31367:7:::1;31354:10;:20;;;;31285:97:::0;:::o;8517:151::-;8606:7;8633:11;:18;8645:5;8633:18;;;;;;;;;;;;;;;:27;8652:7;8633:27;;;;;;;;;;;;;;;;8626:34;;8517:151;;;;:::o;35441:400::-;35493:10;26356:17;:26;26374:7;26356:26;;;;;;;;;;;;;;;:45;;;26341:12;:60;26337:1130;;;26418:22;26443:105;26502:17;:26;26520:7;26502:26;;;;;;;;;;;;;;;:45;;;26443:12;:58;;:105;;;;:::i;:::-;26418:130;;26710:1;26666:17;:26;26684:7;26666:26;;;;;;;;;;;;;;;:41;;;:45;26662:554;;;26771:429;27187:12;;26968:139;27092:14;26968:17;:26;26986:7;26968:26;;;;;;;;;;;;;;;:41;;;:123;;:139;;;;:::i;:::-;:231;;;;;;26771:17;:26;26789:7;26771:26;;;;;;;;;;;;;;;:36;;;:118;;:429;;;;:::i;:::-;26732:17;:26;26750:7;26732:26;;;;;;;;;;;;;;;:36;;:468;;;;26662:554;27300:12;27252:17;:26;27270:7;27252:26;;;;;;;;;;;;;;;:45;;:60;;;;27356:7;27346:56;;;27365:17;:26;27383:7;27365:26;;;;;;;;;;;;;;;:36;;;27346:56;;;;;;;;;;;;;;;;;;26337:1130;;35515:16:::1;35534:17;:29;35552:10;35534:29;;;;;;;;;;;;;;;:39;;;35515:58;;35625:1;35583:17;:29;35601:10;35583:29;;;;;;;;;;;;;;;:39;;:43;;;;35636:39;35642:10;35672:2;35654:15;35667:1;35654:8;:12;;:15;;;;:::i;:::-;:20;;;;;;35636:5;:39::i;:::-;35685:27;35733:2;35715:15;35728:1;35715:8;:12;;:15;;;;:::i;:::-;:20;;;;;;35685:50;;35745:43;35751:15;;;;;;;;;;;35768:19;35745:5;:43::i;:::-;35813:10;35803:31;;;35825:8;35803:31;;;;;;;;;;;;;;;;;;27477:1;;35441:400:::0;:::o;34678:369::-;34743:10;26356:17;:26;26374:7;26356:26;;;;;;;;;;;;;;;:45;;;26341:12;:60;26337:1130;;;26418:22;26443:105;26502:17;:26;26520:7;26502:26;;;;;;;;;;;;;;;:45;;;26443:12;:58;;:105;;;;:::i;:::-;26418:130;;26710:1;26666:17;:26;26684:7;26666:26;;;;;;;;;;;;;;;:41;;;:45;26662:554;;;26771:429;27187:12;;26968:139;27092:14;26968:17;:26;26986:7;26968:26;;;;;;;;;;;;;;;:41;;;:123;;:139;;;;:::i;:::-;:231;;;;;;26771:17;:26;26789:7;26771:26;;;;;;;;;;;;;;;:36;;;:118;;:429;;;;:::i;:::-;26732:17;:26;26750:7;26732:26;;;;;;;;;;;;;;;:36;;:468;;;;26662:554;27300:12;27252:17;:26;27270:7;27252:26;;;;;;;;;;;;;;;:45;;:60;;;;27356:7;27346:56;;;27365:17;:26;27383:7;27365:26;;;;;;;;;;;;;;;:36;;;27346:56;;;;;;;;;;;;;;;;;;26337:1130;;34789:32:::1;34814:6;34789:20;;:24;;:32;;;;:::i;:::-;34766:20;:55;;;;34879:56;34928:6;34879:17;:29;34897:10;34879:29;;;;;;;;;;;;;;;:44;;;:48;;:56;;;;:::i;:::-;34832:17;:29;34850:10;34832:29;;;;;;;;;;;;;;;:44;;:103;;;;34946:46;34973:10;34985:6;34946:13;;;;;;;;;;;:26;;;;:46;;;;;:::i;:::-;35020:10;35008:31;;;35032:6;35008:31;;;;;;;;;;;;;;;;;;34678:369:::0;;:::o;33905:404::-;33967:10;26356:17;:26;26374:7;26356:26;;;;;;;;;;;;;;;:45;;;26341:12;:60;26337:1130;;;26418:22;26443:105;26502:17;:26;26520:7;26502:26;;;;;;;;;;;;;;;:45;;;26443:12;:58;;:105;;;;:::i;:::-;26418:130;;26710:1;26666:17;:26;26684:7;26666:26;;;;;;;;;;;;;;;:41;;;:45;26662:554;;;26771:429;27187:12;;26968:139;27092:14;26968:17;:26;26986:7;26968:26;;;;;;;;;;;;;;;:41;;;:123;;:139;;;;:::i;:::-;:231;;;;;;26771:17;:26;26789:7;26771:26;;;;;;;;;;;;;;;:36;;;:118;;:429;;;;:::i;:::-;26732:17;:26;26750:7;26732:26;;;;;;;;;;;;;;;:36;;:468;;;;26662:554;27300:12;27252:17;:26;27270:7;27252:26;;;;;;;;;;;;;;;:45;;:60;;;;27356:7;27346:56;;;27365:17;:26;27383:7;27365:26;;;;;;;;;;;;;;;:36;;;27346:56;;;;;;;;;;;;;;;;;;26337:1130;;34013:32:::1;34038:6;34013:20;;:24;;:32;;;;:::i;:::-;33990:20;:55;;;;34103:56;34152:6;34103:17;:29;34121:10;34103:29;;;;;;;;;;;;;;;:44;;;:48;;:56;;;;:::i;:::-;34056:17;:29;34074:10;34056:29;;;;;;;;;;;;;;;:44;;:103;;;;34170:65;34201:10;34221:4;34228:6;34170:13;;;;;;;;;;;:30;;;;:65;;;;;;:::i;:::-;34260:10;34251:50;;;34272:6;34280:20;;34251:50;;;;;;;;;;;;;;;;;;;;;;;;33905:404:::0;;:::o;30647:148::-;30718:7;30745:15;:25;30761:8;30745:25;;;;;;;;;;;;;;;:42;;;30738:49;;30647:148;;;:::o;2881:106::-;2934:15;2969:10;2962:17;;2881:106;:::o;14056:346::-;14175:1;14158:19;;:5;:19;;;;14150:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14256:1;14237:21;;:7;:21;;;;14229:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14340:6;14310:11;:18;14322:5;14310:18;;;;;;;;;;;;;;;:27;14329:7;14310:27;;;;;;;;;;;;;;;:36;;;;14378:7;14362:32;;14371:5;14362:32;;;14387:6;14362:32;;;;;;;;;;;;;;;;;;14056:346;;;:::o;19493:136::-;19551:7;19578:43;19582:1;19585;19578:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;19571:50;;19493:136;;;;:::o;20367:471::-;20425:7;20675:1;20670;:6;20666:47;;;20700:1;20693:8;;;;20666:47;20725:9;20741:1;20737;:5;20725:17;;20770:1;20765;20761;:5;;;;;;:10;20753:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20829:1;20822:8;;;20367:471;;;;;:::o;19037:181::-;19095:7;19115:9;19131:1;19127;:5;19115:17;;19156:1;19151;:6;;19143:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19209:1;19202:8;;;19037:181;;;;:::o;11668:539::-;11792:1;11774:20;;:6;:20;;;;11766:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11876:1;11855:23;;:9;:23;;;;11847:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11931:47;11952:6;11960:9;11971:6;11931:20;:47::i;:::-;12011:71;12033:6;12011:71;;;;;;;;;;;;;;;;;:9;:17;12021:6;12011:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;11991:9;:17;12001:6;11991:17;;;;;;;;;;;;;;;:91;;;;12116:32;12141:6;12116:9;:20;12126:9;12116:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12093:9;:20;12103:9;12093:20;;;;;;;;;;;;;;;:55;;;;12181:9;12164:35;;12173:6;12164:35;;;12192:6;12164:35;;;;;;;;;;;;;;;;;;11668:539;;;:::o;19924:192::-;20010:7;20043:1;20038;:6;;20046:12;20030:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;20030:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20070:9;20086:1;20082;:5;20070:17;;20107:1;20100:8;;;19924:192;;;;;:::o;15616:177::-;15699:86;15719:5;15749:23;;;15774:2;15778:5;15726:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15726:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;15726:58:0;15699:19;:86::i;:::-;15616:177;;;:::o;12488:378::-;12591:1;12572:21;;:7;:21;;;;12564:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12642:49;12671:1;12675:7;12684:6;12642:20;:49::i;:::-;12719:24;12736:6;12719:12;;:16;;:24;;;;:::i;:::-;12704:12;:39;;;;12775:30;12798:6;12775:9;:18;12785:7;12775:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;12754:9;:18;12764:7;12754:18;;;;;;;;;;;;;;;:51;;;;12842:7;12821:37;;12838:1;12821:37;;;12851:6;12821:37;;;;;;;;;;;;;;;;;;12488:378;;:::o;15801:205::-;15902:96;15922:5;15952:27;;;15981:4;15987:2;15991:5;15929:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15929:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;15929:68:0;15902:19;:96::i;:::-;15801:205;;;;:::o;15427:92::-;;;;:::o;17660:1115::-;18265:27;18273:5;18265:25;;;:27::i;:::-;18257:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18402:12;18416:23;18451:5;18443:19;;18463:4;18443:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18443:25:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;18401:67:0;;;;18487:7;18479:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18568:1;18548:10;:17;:21;18544:224;;;18690:10;18679:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18679:30:0;;;;;;;;;;;;;;;;18671:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18544:224;17660:1115;;;;:::o;3845:619::-;3905:4;4167:16;4194:19;4216:66;4194:88;;;;4385:7;4373:20;4361:32;;4425:11;4413:8;:23;;:42;;;;;4452:3;4440:15;;:8;:15;;4413:42;4405:51;;;;3845:619;;;:::o

Swarm Source

ipfs://19f546df4762f46b8966008779060714f14af2ad0afb1c74f92f232a9109fcd3
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.