ETH Price: $2,631.12 (+1.15%)

Token

Pocket Wallet (POCKET)
 

Overview

Max Total Supply

100,000,000 POCKET

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,520,000 POCKET

Value
$0.00
0x67BfD3378BDDEB8A53507dd2d18664dDcDE861EC
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:
PocketWallet

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-31
*/

/**

Website: https://pocketwallet.net/
X (Twitter): https://twitter.com/pocketwalletio
Telegram: https://t.me/PocketWalletETH

**/
pragma solidity 0.8.20;

// SPDX-License-Identifier: MIT


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

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

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);
}

interface IERC20Metadata is IERC20{
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override 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 default value returned by this function, unless
     * it's overridden.
     *
     * 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 virtual override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, 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:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This 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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    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 _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

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

interface ILiquidityPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, 'SafeMath: subtraction overflow');
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    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;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, 'SafeMath: division by zero');
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, 'SafeMath: modulo by zero');
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

interface DividendPayingContractOptionalInterface {
  function withdrawableDividendOf(address _owner) external view returns(uint256);
  function withdrawnDividendOf(address _owner) external view returns(uint256);
  function accumulativeDividendOf(address _owner) external view returns(uint256);
}

interface DividendPayingContractInterface {
  function dividendOf(address _owner) external view returns(uint256);
  function distributeDividends() external payable;
  function withdrawDividend() external;
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );
  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount
  );
}

contract DividendPayingContract is DividendPayingContractInterface, DividendPayingContractOptionalInterface, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 constant internal magnitude = 2**128;

    uint256 internal magnifiedDividendPerShare;
                                                                            
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    
    mapping (address => uint256) public holderBalance;
    uint256 public totalBalance;

    uint256 public totalDividendsDistributed;

    receive() external payable {
        distributeDividends();
    }

    function distributeDividends() public override payable {
        if(totalBalance > 0 && msg.value > 0){
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalBalance
            );
            emit DividendsDistributed(msg.sender, msg.value);

            totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
        }
    }

    function withdrawDividend() external virtual override {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
        withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);

        emit DividendWithdrawn(user, _withdrawableDividend);
        (bool success,) = user.call{value: _withdrawableDividend}("");

        if(!success) {
            withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
            return 0;
        }

        return _withdrawableDividend;
        }

        return 0;
    }

    function withdrawDividendOfUserForCompound(address payable user) external onlyOwner returns (uint256 _withdrawableDividend) {
        _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user] + _withdrawableDividend;
            emit DividendWithdrawn(user, _withdrawableDividend);
        }
        (bool success,) = owner().call{value: _withdrawableDividend}("");
        if(!success) {
            withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
            return 0;
        }
    }

    function dividendOf(address _owner) external view override returns(uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view override returns(uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) external view override returns(uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view override returns(uint256) {
        return magnifiedDividendPerShare.mul(holderBalance[_owner]).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function _increase(address account, uint256 value) internal {
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
    }

    function _reduce(address account, uint256 value) internal {
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = holderBalance[account];
        holderBalance[account] = newBalance;
        if(newBalance > currentBalance) {
        uint256 increaseAmount = newBalance.sub(currentBalance);
        _increase(account, increaseAmount);
        totalBalance += increaseAmount;
        } else if(newBalance < currentBalance) {
        uint256 reduceAmount = currentBalance.sub(newBalance);
        _reduce(account, reduceAmount);
        totalBalance -= reduceAmount;
        }
    }
}


contract RevShare is DividendPayingContract {

    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    mapping (address => bool) public excludedFromDividends;

    constructor() {}

    function getAccount(address _account)
        public view returns (
            address account,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 balance) {
        account = _account;

        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);

        balance = holderBalance[account];
    }
    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
        if(excludedFromDividends[account]) {
    		return;
    	}

        _setBalance(account, newBalance);

    	processAccount(account, true);
    }
    
    function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);

    	if(amount > 0) {
            emit Claim(account, amount, automatic);
    		return true;
    	}

    	return false;
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return totalDividendsDistributed;
    }

	function dividendTokenBalanceOf(address account) public view returns (uint256) {
		return holderBalance[account];
	}

    function getNumberOfDividends() external view returns(uint256) {
        return totalBalance;
    }

    function excludeFromDividends(address account) external onlyOwner {
    	excludedFromDividends[account] = true;

    	_setBalance(account, 0);
    }

    function includeInDividends(address account) external onlyOwner {
    	require(excludedFromDividends[account]);
    	excludedFromDividends[account] = false;
        _setBalance(account, IERC20(owner()).balanceOf(account)); // sets balance back to token balance
    }
}

contract PocketWallet is ERC20, Ownable {

    mapping (address => bool) public excludedFromFees;
    mapping (address => bool) public excludedFromLimits;

    bool public started;

    mapping (address => bool) public isAMMPair;

    address public marketingAddress;
    address public devAddress;

    Tax public buyTax;
    Tax public sellTax;

    RevShare public revShare;

    TokenDistributionForTax public tokensForTax;

    TxLimits public txLimits;
    bool public txLimitsActive = true;

    mapping(address => uint256) private _holderLastTransferBlock; // MEV protection
    bool public antiMEVEnabled = true;

    uint256 public swapTokensAtAmount;

    address public pair;
    IDexRouter public dexRouter;
    address public immutable WETH;


    uint64 public constant FEE_DIVISOR = 10000;

    // structs

    struct TxLimits {
        uint128 transactionLimit;
        uint128 walletLimit;
    }

    struct Tax {
        uint48 marketingTax;
        uint48 devTax;
        uint48 liquidityTax;
        uint48 revShareTax;
        uint48 totalTax;
    }

    struct TokenDistributionForTax {
        uint64 tokensForMarketing;
        uint64 tokensForLiquidity;
        uint64 tokensForDev;
        uint64 tokensForRevShare;
        bool gasSaver;
    }

    // events

    event UpdatedTransactionLimit(uint newMax);
    event UpdatedWalletLimit(uint newMax);
    event SetExcludedFromFees(address _address, bool _isExcluded);
    event SetExcludedFromLimits(address _address, bool _isExcluded);
    event RemovedLimits();
    event BuyTaxUpdated(uint newAmount);
    event SellTaxUpdated(uint newAmount);

    // constructor

    constructor()
        ERC20("Pocket Wallet", "POCKET")
    {   
        _mint(msg.sender, 100_000_000 * 1e18);

        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Chain not configured");
        }

        revShare = new RevShare();

        dexRouter = IDexRouter(_v2Router);

        txLimits.transactionLimit = uint128(totalSupply() * 20 / 1000);
        txLimits.walletLimit = uint128(totalSupply() * 2 / 100);
        swapTokensAtAmount = totalSupply() * 25 / 100000;

        marketingAddress = 0xf39380064D86095eda643Db1100012972Cf91ef0; // update
        devAddress = 0xf39380064D86095eda643Db1100012972Cf91ef0; // update

        buyTax.marketingTax = 900;
        buyTax.liquidityTax = 600;
        buyTax.devTax = 600;
        buyTax.revShareTax = 300;
        buyTax.totalTax = buyTax.marketingTax + buyTax.liquidityTax + buyTax.devTax + buyTax.revShareTax;

        sellTax.marketingTax = 900;
        sellTax.liquidityTax = 600;
        sellTax.devTax = 600;
        sellTax.revShareTax = 300;
        sellTax.totalTax = sellTax.marketingTax + sellTax.liquidityTax + sellTax.devTax + buyTax.revShareTax + sellTax.revShareTax;

        tokensForTax.gasSaver = true;

        WETH = dexRouter.WETH();
        pair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[pair] = true;

        excludedFromLimits[pair] = true;
        excludedFromLimits[msg.sender] = true;
        excludedFromLimits[address(this)] = true;
        excludedFromLimits[_v2Router] = true;

        excludedFromFees[msg.sender] = true;
        excludedFromFees[address(this)] = true;
        excludedFromFees[address(0xdead)] = true;
        excludedFromFees[_v2Router] = true;

        revShare.excludeFromDividends(address(this));
        revShare.excludeFromDividends(address(pair));
        revShare.excludeFromDividends(address(0xdead));
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!excludedFromFees[from] && !excludedFromFees[to]){
            require(started, "Trading not active");
            checkLimits(from, to, amount);
            amount -= handleTax(from, to, amount);
        }

        super._transfer(from,to,amount);

        revShare.setBalance(payable(to), balanceOf(to));
        revShare.setBalance(payable(from), balanceOf(from));
    }

    function checkLimits(address from, address to, uint256 amount) internal {
        if(txLimitsActive){
            bool exFromLimitsTo = excludedFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);
            TxLimits memory _txLimits = txLimits;
            // buy
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !excludedFromLimits[from]) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            }
        }

        if (antiMEVEnabled){
            if(isAMMPair[to]){
                require(_holderLastTransferBlock[from] < block.number, "Anti MEV");
            } else {
                _holderLastTransferBlock[to] = block.number;
                _holderLastTransferBlock[tx.origin] = block.number;
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        if(balanceOf(address(this)) >= swapTokensAtAmount && !isAMMPair[from]) {
            convertTax();
        }
        
        uint128 tax = 0;

        Tax memory taxes;

        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }

        if(taxes.totalTax > 0){
            TokenDistributionForTax memory tokensForTaxUpdate = tokensForTax;
            tax = uint128(amount * taxes.totalTax / FEE_DIVISOR);
            tokensForTaxUpdate.tokensForLiquidity += uint64(tax * taxes.liquidityTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForMarketing += uint64(tax * taxes.marketingTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForDev += uint64(tax * taxes.devTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForRevShare += uint64(tax * taxes.revShareTax / taxes.totalTax / 1e9);
            tokensForTax = tokensForTaxUpdate;
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    function swapTokensForETH(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function convertTax() private {

        uint256 contractBalance = balanceOf(address(this));
        TokenDistributionForTax memory tokensForTaxMem = tokensForTax;
        uint256 totalTokensToSwap = tokensForTaxMem.tokensForLiquidity + tokensForTaxMem.tokensForMarketing + tokensForTaxMem.tokensForDev + tokensForTaxMem.tokensForRevShare;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }

        if(tokensForTaxMem.tokensForLiquidity > 0){
            uint256 liquidityTokens = contractBalance * tokensForTaxMem.tokensForLiquidity / totalTokensToSwap;
            super._transfer(address(this), pair, liquidityTokens);
            try ILiquidityPair(pair).sync(){} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForTaxMem.tokensForLiquidity;
        }

        if(contractBalance > 0){

            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            bool success;

            if(tokensForTaxMem.tokensForDev > 0){
                (success,) = devAddress.call{value: ethBalance * tokensForTaxMem.tokensForDev / totalTokensToSwap}("");  
            }

            if(tokensForTaxMem.tokensForRevShare > 0){
                (success,) = address(revShare).call{value: ethBalance * tokensForTaxMem.tokensForRevShare/ totalTokensToSwap}("");  
            }

            ethBalance = address(this).balance;

            if(ethBalance > 0){
                (success,) = marketingAddress.call{value: ethBalance}("");  
            }
        }

        tokensForTaxMem.tokensForLiquidity = 0;
        tokensForTaxMem.tokensForMarketing = 0;
        tokensForTaxMem.tokensForDev = 0;
        tokensForTaxMem.tokensForRevShare = 0;

        tokensForTax = tokensForTaxMem;
    }

    // owner functions
    function setExcludedFromFee(address _address, bool _isExcluded) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexcluded contract");
        excludedFromFees[_address] = _isExcluded;
        emit SetExcludedFromFees(_address, _isExcluded);
    }

    function setExcludedFromLimit(address _address, bool _isExcluded) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExcluded){
            require(_address != pair, "Cannot remove pair");
        }
        excludedFromLimits[_address] = _isExcluded;
        emit SetExcludedFromLimits(_address, _isExcluded);
    }

    function changeTransactionLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.transactionLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedTransactionLimit(txLimits.transactionLimit);
    }

    function changeWalletLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.walletLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(txLimits.walletLimit);
    }

    function changeSwapTokensAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
    }

    function changeSellTax(uint48 _marketingTax, uint48 _liquidityTax, uint48 _devTax, uint48 _revShareTax) external onlyOwner {
        Tax memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.devTax = _devTax;
        taxes.revShareTax = _revShareTax;
        taxes.totalTax = _marketingTax + _liquidityTax + _devTax + _revShareTax;
        require(taxes.totalTax  <= 10000, "Keep tax below 10%");
        emit SellTaxUpdated(taxes.totalTax);
        sellTax = taxes;
    }

    function changeBuyTax(uint48 _marketingTax, uint48 _liquidityTax, uint48 _devTax, uint48 _revShareTax) external onlyOwner {
        Tax memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.devTax = _devTax;
        taxes.revShareTax = _revShareTax;
        taxes.totalTax = _marketingTax + _liquidityTax + _devTax + _revShareTax;
        require(taxes.totalTax  <= 10000, "Keep tax below 10%");
        emit BuyTaxUpdated(taxes.totalTax);
        buyTax = taxes;
    }

    function setStarted() external onlyOwner {
        require(!started, "Trading already live");
        started = true;
    }

    function removeTxLimits() external onlyOwner {
        txLimitsActive = false;
        TxLimits memory _txLimits;
        uint256 supply = totalSupply();
        _txLimits.transactionLimit = uint128(supply);
        _txLimits.walletLimit = uint128(supply);
        txLimits = _txLimits;
        emit RemovedLimits();
    }

    function updateMEVBlockerEnabled(bool _enabled) external onlyOwner {
        antiMEVEnabled = _enabled;
    }

    function updateMarketingAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        marketingAddress = _address;
    }

    function updateDevAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        devAddress = _address;
    }

    receive() payable external {}

    // dividend functions

    function claim() external {
        revShare.processAccount(payable(msg.sender), false);
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return revShare.totalDividendsDistributed();
    }

    function withdrawableDividendOf(address account) public view returns(uint256) {
    	return revShare.withdrawableDividendOf(account);
  	}

	function dividendTokenBalanceOf(address account) public view returns (uint256) {
		return revShare.holderBalance(account);
	}

    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            uint256,
            uint256,
            uint256) {
        return revShare.getAccount(account);
    }
    
    function getNumberOfDividends() external view returns(uint256) {
        return revShare.totalBalance();
    }

    function excludeFromDividends(address _wallet) external onlyOwner {
        revShare.excludeFromDividends(_wallet);
    }

     function includeInDividends(address _wallet) external onlyOwner {
        revShare.includeInDividends(_wallet);
    }

    function compound(uint256 minOutput) external {
        uint256 amountEthForCompound = revShare.withdrawDividendOfUserForCompound(payable(msg.sender));
        if(amountEthForCompound > 0){
            buyBackTokens(amountEthForCompound, minOutput, msg.sender);
        } else {
            revert("No rewards");
        }
    }

    function buyBackTokens(uint256 ethAmountInWei, uint256 minOut, address to) internal {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            minOut,
            path,
            address(to),
            block.timestamp
        );
    }

    // helper views

    function getCompoundOutputByEthAmount(uint256 rewardAmount) external view returns(uint256) {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        uint256[] memory amounts = dexRouter.getAmountsOut(rewardAmount, path);
        return amounts[1] - (amounts[1] * (buyTax.totalTax + 50) / FEE_DIVISOR);
    }

    function getCompoundOutputByWallet(address wallet) external view returns(uint256) {
        uint256 rewardAmount = withdrawableDividendOf(wallet);
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        uint256[] memory amounts = dexRouter.getAmountsOut(rewardAmount, path);
        return amounts[1] - (amounts[1] * (buyTax.totalTax + 50) / FEE_DIVISOR);
    }
}

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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"BuyTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SellTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"SetExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"SetExcludedFromLimits","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":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":[],"name":"antiMEVEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyTax","outputs":[{"internalType":"uint48","name":"marketingTax","type":"uint48"},{"internalType":"uint48","name":"devTax","type":"uint48"},{"internalType":"uint48","name":"liquidityTax","type":"uint48"},{"internalType":"uint48","name":"revShareTax","type":"uint48"},{"internalType":"uint48","name":"totalTax","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint48","name":"_marketingTax","type":"uint48"},{"internalType":"uint48","name":"_liquidityTax","type":"uint48"},{"internalType":"uint48","name":"_devTax","type":"uint48"},{"internalType":"uint48","name":"_revShareTax","type":"uint48"}],"name":"changeBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"_marketingTax","type":"uint48"},{"internalType":"uint48","name":"_liquidityTax","type":"uint48"},{"internalType":"uint48","name":"_devTax","type":"uint48"},{"internalType":"uint48","name":"_revShareTax","type":"uint48"}],"name":"changeSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"changeSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"changeTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"compound","outputs":[],"stateMutability":"nonpayable","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":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"getCompoundOutputByEthAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getCompoundOutputByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"includeInDividends","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":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revShare","outputs":[{"internalType":"contract RevShare","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint48","name":"marketingTax","type":"uint48"},{"internalType":"uint48","name":"devTax","type":"uint48"},{"internalType":"uint48","name":"liquidityTax","type":"uint48"},{"internalType":"uint48","name":"revShareTax","type":"uint48"},{"internalType":"uint48","name":"totalTax","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setExcludedFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint64","name":"tokensForMarketing","type":"uint64"},{"internalType":"uint64","name":"tokensForLiquidity","type":"uint64"},{"internalType":"uint64","name":"tokensForDev","type":"uint64"},{"internalType":"uint64","name":"tokensForRevShare","type":"uint64"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimits","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"txLimitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateMEVBlockerEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260128054600160ff1991821681179092556014805490911690911790553480156200002d575f80fd5b506040518060400160405280600d81526020016c141bd8dad95d0815d85b1b195d609a1b815250604051806040016040528060068152602001651413d0d2d15560d21b815250816003908162000084919062000a66565b50600462000093828262000a66565b5050505f620000a7620007cc60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200010b336a52b7d2dcc80cd2e4000000620007d0565b5f46600103620001315750737a250d5630b4cf539739df2c5dacb4c659f2488d620001a3565b46600503620001565750737a250d5630b4cf539739df2c5dacb4c659f2488d620001a3565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b604051620001b190620009b8565b604051809103905ff080158015620001cb573d5f803e3d5ffd5b50600e80546001600160a01b03199081166001600160a01b0393841617909155601780549091169183169190911790556103e86200020860025490565b6200021590601462000b42565b62000221919062000b62565b601180546001600160801b0319166001600160801b039290921691909117905560646200024d60025490565b6200025a90600262000b42565b62000266919062000b62565b601180546001600160801b03928316600160801b029216919091179055620186a06200029160025490565b6200029e90601962000b42565b620002aa919062000b62565b601555600a805473f39380064d86095eda643db1100012972cf91ef06001600160a01b03199182168117909255600b80549091169091179055600c80546001600160c01b03191673012c000000000258000000000258000000000384179081905565ffffffffffff600160901b82048116916601000000000000810482169162000348916c0100000000000000000000000090041661038462000b82565b62000354919062000b82565b62000360919062000b82565b600c805465ffffffffffff60c01b1916600160c01b65ffffffffffff938416021790819055600d80546001600160c01b03191673012c0000000002580000000002580000000003841790819055600160901b808204841693920482169166010000000000008204811691620003ea916c010000000000000000000000009091041661038462000b82565b620003f6919062000b82565b62000402919062000b82565b6200040e919062000b82565b600d805465ffffffffffff92909216600160c01b0265ffffffffffff60c01b199092169190911790556010805460ff19166001179055601754604080516315ab88c960e31b815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa1580156200048d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004b3919062000bab565b6001600160a01b039081166080526017546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa15801562000502573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000528919062000bab565b6080516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af115801562000577573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200059d919062000bab565b601680546001600160a01b0319166001600160a01b0392831690811782555f908152600960209081526040808320805460ff19908116600190811790925594548616845260078352818420805486168217905533808552828520805487168317905530808652838620805488168417905588881680875284872080548916851790559186526006909452828520805487168317905583855282852080548716831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548716831790558452928190208054909416909217909255600e54905163031e79db60e41b81526004810192909252909116906331e79db0906024015f604051808303815f87803b158015620006b6575f80fd5b505af1158015620006c9573d5f803e3d5ffd5b5050600e5460165460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db091506024015f604051808303815f87803b15801562000714575f80fd5b505af115801562000727573d5f803e3d5ffd5b5050600e5460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db091506024015f604051808303815f87803b15801562000770575f80fd5b505af115801562000783573d5f803e3d5ffd5b5050601754620007a292503091506001600160a01b03165f1962000891565b601754620007c59033906001600160a01b0316620007bf60025490565b62000891565b5062000bf0565b3390565b6001600160a01b038216620008285760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200019a565b8060025f8282546200083b919062000bda565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316620008f55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200019a565b6001600160a01b038216620009585760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200019a565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61114c806200462e83390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620009ef57607f821691505b60208210810362000a0e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000a61575f81815260208120601f850160051c8101602086101562000a3c5750805b601f850160051c820191505b8181101562000a5d5782815560010162000a48565b5050505b505050565b81516001600160401b0381111562000a825762000a82620009c6565b62000a9a8162000a938454620009da565b8462000a14565b602080601f83116001811462000ad0575f841562000ab85750858301515b5f19600386901b1c1916600185901b17855562000a5d565b5f85815260208120601f198616915b8281101562000b005788860151825594840194600190910190840162000adf565b508582101562000b1e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000b5c5762000b5c62000b2e565b92915050565b5f8262000b7d57634e487b7160e01b5f52601260045260245ffd5b500490565b65ffffffffffff81811683821601908082111562000ba45762000ba462000b2e565b5092915050565b5f6020828403121562000bbc575f80fd5b81516001600160a01b038116811462000bd3575f80fd5b9392505050565b8082018082111562000b5c5762000b5c62000b2e565b608051613a1e62000c105f395f818161094c01526132890152613a1e5ff3fe608060405260043610610344575f3560e01c806371778e7d116101bd578063ad5c4648116100f2578063cc1776d311610092578063e2f456051161006d578063e2f4560514610acc578063e8cd2fec14610ae1578063f270fde414610afa578063f2fde38b14610b44575f80fd5b8063cc1776d314610a37578063dbe66ca014610a7f578063dd62ed3e14610aad575f80fd5b8063b460eef5116100cd578063b460eef5146109bb578063bd9dfecc146109da578063bf78019b146109f9578063c0f306ef14610a18575f80fd5b8063ad5c46481461093b578063b0249cc61461096e578063b2a9c0c01461099c575f80fd5b8063a457c2d71161015d578063a8b9d24011610138578063a8b9d24014610895578063a9059cbb146108b4578063aa5f7e26146108d3578063ad56c13c146108f2575f80fd5b8063a457c2d714610838578063a5ece94114610857578063a8aa1b3114610876575f80fd5b8063850337621161019857806385033762146107bb5780638da5cb5b146107da57806395d89b41146107f75780639e93ad8e1461080b575f80fd5b806371778e7d1461075a5780637b812b411461076e57806380dee2571461079c575f80fd5b806323b872dd116102935780634e71d92d116102335780636843cd841161020e5780636843cd84146106725780636d7adcad1461069157806370a0823114610712578063715018a614610746575f80fd5b80634e71d92d146105be5780634f7041a5146105d25780636612e66f14610653575f80fd5b806331e79db01161026e57806331e79db01461054257806339509351146105615780633ad10ef6146105805780634008c2f01461059f575f80fd5b806323b872dd146104f457806330bb4cff14610513578063313ce56714610527575f80fd5b806313a351b5116102fe5780631b03ddc1116102d95780631b03ddc1146104895780631c249494146104a85780631f2698ab146104bc5780632369bf83146104d5575f80fd5b806313a351b51461042957806314bb4edd1461044857806318160ddd14610475575f80fd5b80630106aaef1461034f578063041138901461036557806304816a4e1461039357806306fdde03146103b25780630758d924146103d3578063095ea7b31461040a575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b50610363610b63565b005b348015610370575f80fd5b5060145461037e9060ff1681565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103636103ad366004613331565b610c0b565b3480156103bd575f80fd5b506103c6610d26565b60405161038a919061335e565b3480156103de575f80fd5b506017546103f2906001600160a01b031681565b6040516001600160a01b03909116815260200161038a565b348015610415575f80fd5b5061037e6104243660046133bd565b610db6565b348015610434575f80fd5b50610363610443366004613331565b610dcf565b348015610453575f80fd5b506104676104623660046133e7565b610ee0565b60405190815260200161038a565b348015610480575f80fd5b50600254610467565b348015610494575f80fd5b50600e546103f2906001600160a01b031681565b3480156104b3575f80fd5b506103636110ce565b3480156104c7575f80fd5b5060085461037e9060ff1681565b3480156104e0575f80fd5b506103636104ef3660046133e7565b611151565b3480156104ff575f80fd5b5061037e61050e366004613402565b6111e2565b34801561051e575f80fd5b50610467611205565b348015610532575f80fd5b506040516012815260200161038a565b34801561054d575f80fd5b5061036361055c3660046133e7565b611275565b34801561056c575f80fd5b5061037e61057b3660046133bd565b6112fd565b34801561058b575f80fd5b50600b546103f2906001600160a01b031681565b3480156105aa575f80fd5b506104676105b9366004613440565b61131e565b3480156105c9575f80fd5b506103636114ff565b3480156105dd575f80fd5b50600c5461061a9065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b8104821691600160c01b9091041685565b6040805165ffffffffffff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161038a565b34801561065e575f80fd5b5061036361066d366004613464565b611573565b34801561067d575f80fd5b5061046761068c3660046133e7565b61169d565b34801561069c575f80fd5b50600f546010546106d7916001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b909104169060ff1685565b604080516001600160401b0396871681529486166020860152928516928401929092529092166060820152901515608082015260a00161038a565b34801561071d575f80fd5b5061046761072c3660046133e7565b6001600160a01b03165f9081526020819052604090205490565b348015610751575f80fd5b5061036361170a565b348015610765575f80fd5b5061046761177d565b348015610779575f80fd5b5061037e6107883660046133e7565b60076020525f908152604090205460ff1681565b3480156107a7575f80fd5b506103636107b63660046134b5565b6117c4565b3480156107c6575f80fd5b506103636107d53660046133e7565b611981565b3480156107e5575f80fd5b506005546001600160a01b03166103f2565b348015610802575f80fd5b506103c6611a12565b348015610816575f80fd5b5061082061271081565b6040516001600160401b03909116815260200161038a565b348015610843575f80fd5b5061037e6108523660046133bd565b611a21565b348015610862575f80fd5b50600a546103f2906001600160a01b031681565b348015610881575f80fd5b506016546103f2906001600160a01b031681565b3480156108a0575f80fd5b506104676108af3660046133e7565b611a9b565b3480156108bf575f80fd5b5061037e6108ce3660046133bd565b611acd565b3480156108de575f80fd5b506103636108ed366004613440565b611ada565b3480156108fd575f80fd5b5061091161090c3660046133e7565b611b91565b604080516001600160a01b039095168552602085019390935291830152606082015260800161038a565b348015610946575f80fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b348015610979575f80fd5b5061037e6109883660046133e7565b60096020525f908152604090205460ff1681565b3480156109a7575f80fd5b506103636109b6366004613440565b611c12565b3480156109c6575f80fd5b506103636109d5366004613506565b611d5d565b3480156109e5575f80fd5b506103636109f43660046134b5565b611d9a565b348015610a04575f80fd5b50610363610a13366004613464565b611f57565b348015610a23575f80fd5b50610363610a323660046133e7565b612079565b348015610a42575f80fd5b50600d5461061a9065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b8104821691600160c01b9091041685565b348015610a8a575f80fd5b5061037e610a993660046133e7565b60066020525f908152604090205460ff1681565b348015610ab8575f80fd5b50610467610ac7366004613521565b6120d5565b348015610ad7575f80fd5b5061046760155481565b348015610aec575f80fd5b5060125461037e9060ff1681565b348015610b05575f80fd5b50601154610b24906001600160801b0380821691600160801b90041682565b604080516001600160801b0393841681529290911660208301520161038a565b348015610b4f575f80fd5b50610363610b5e3660046133e7565b6120ff565b6005546001600160a01b03163314610b965760405162461bcd60e51b8152600401610b8d9061354d565b60405180910390fd5b6012805460ff19169055604080518082019091525f80825260208201525f610bbd60025490565b6001600160801b03811680845260208401819052600160801b8102176011556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b6005546001600160a01b03163314610c355760405162461bcd60e51b8152600401610b8d9061354d565b610c416012600a613676565b6103e8610c4d60025490565b610c58906001613684565b610c6291906136af565b610c6c91906136af565b816001600160801b03161015610cae5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610b8d565b610cba6012600a613676565b610ccd906001600160801b038316613684565b601180546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788906020015b60405180910390a150565b606060038054610d35906136c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d61906136c2565b8015610dac5780601f10610d8357610100808354040283529160200191610dac565b820191905f5260205f20905b815481529060010190602001808311610d8f57829003601f168201915b5050505050905090565b5f33610dc38185856121e9565b60019150505b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610b8d9061354d565b610e056012600a613676565b6103e8610e1160025490565b610e1c906001613684565b610e2691906136af565b610e3091906136af565b816001600160801b03161015610e725760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610b8d565b610e7e6012600a613676565b610e91906001600160801b038316613684565b601180546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e690602001610d1b565b5f80610eeb83611a9b565b6040805160028082526060820183529293505f9290916020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b919061370e565b815f81518110610f8d57610f8d613729565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610fc157610fc1613729565b6001600160a01b03928316602091820292909201015260175460405163d06ca61f60e01b81525f92919091169063d06ca61f90611004908690869060040161377f565b5f60405180830381865afa15801561101e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110459190810190613797565b600c549091506127109061106990600160c01b900465ffffffffffff16603261384f565b65ffffffffffff168260018151811061108457611084613729565b60200260200101516110969190613684565b6110a091906136af565b816001815181106110b3576110b3613729565b60200260200101516110c59190613875565b95945050505050565b6005546001600160a01b031633146110f85760405162461bcd60e51b8152600401610b8d9061354d565b60085460ff16156111425760405162461bcd60e51b815260206004820152601460248201527354726164696e6720616c7265616479206c69766560601b6044820152606401610b8d565b6008805460ff19166001179055565b6005546001600160a01b0316331461117b5760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b0381166111c05760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610b8d565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f336111ef85828561230c565b6111fa858585612384565b506001949350505050565b600e54604080516342d359d760e11b815290515f926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa15801561124c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112709190613888565b905090565b6005546001600160a01b0316331461129f5760405162461bcd60e51b8152600401610b8d9061354d565b600e5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b5f604051808303815f87803b1580156112e4575f80fd5b505af11580156112f6573d5f803e3d5ffd5b5050505050565b5f33610dc381858561130f83836120d5565b611319919061389f565b6121e9565b6040805160028082526060820183525f92839291906020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611389573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ad919061370e565b815f815181106113bf576113bf613729565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106113f3576113f3613729565b6001600160a01b03928316602091820292909201015260175460405163d06ca61f60e01b81525f92919091169063d06ca61f90611436908790869060040161377f565b5f60405180830381865afa158015611450573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114779190810190613797565b600c549091506127109061149b90600160c01b900465ffffffffffff16603261384f565b65ffffffffffff16826001815181106114b6576114b6613729565b60200260200101516114c89190613684565b6114d291906136af565b816001815181106114e5576114e5613729565b60200260200101516114f79190613875565b949350505050565b600e5460405163bc4c4b3760e01b81523360048201525f60248201526001600160a01b039091169063bc4c4b37906044016020604051808303815f875af115801561154c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157091906138b2565b50565b6005546001600160a01b0316331461159d5760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b0382166115e25760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610b8d565b306001600160a01b0383160361163a5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420756e6578636c7564656420636f6e74726163740000000000006044820152606401610b8d565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527fc4eea32423e96d678d53f47ddd9b7a5103eea02606d7daa81c77038c54dc8edb91015b60405180910390a15050565b600e5460405163156dbbf560e31b81526001600160a01b0383811660048301525f92169063ab6ddfa8906024015b602060405180830381865afa1580156116e6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc99190613888565b6005546001600160a01b031633146117345760405162461bcd60e51b8152600401610b8d9061354d565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600e546040805163ad7a672f60e01b815290515f926001600160a01b03169163ad7a672f9160048083019260209291908290030181865afa15801561124c573d5f803e3d5ffd5b6005546001600160a01b031633146117ee5760405162461bcd60e51b8152600401610b8d9061354d565b6040805160a0810182525f608082015265ffffffffffff868116825285811692820192909252838216602082015290821660608201528183611830868861384f565b61183a919061384f565b611844919061384f565b65ffffffffffff166080820181905261271010156118995760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b6044820152606401610b8d565b608081015160405165ffffffffffff90911681527f7a758dc8e99047b028278b3e2ff1416d8493a7aacee7a5dc30b6bf93270eccce9060200160405180910390a18051600c805460208401516040850151606086015160809096015165ffffffffffff908116600160c01b0265ffffffffffff60c01b19978216600160901b0265ffffffffffff60901b19938316600160601b02939093166bffffffffffffffffffffffff60601b19948316600160301b026bffffffffffffffffffffffff199096169290971691909117939093179190911693909317929092179290921617905550505050565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b0381166119f05760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610b8d565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610d35906136c2565b5f3381611a2e82866120d5565b905083811015611a8e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b8d565b6111fa82868684036121e9565b600e546040516302a2e74960e61b81526001600160a01b0383811660048301525f92169063a8b9d240906024016116cb565b5f33610dc3818585612384565b600e5460405163dcb95ed960e01b81523360048201525f916001600160a01b03169063dcb95ed9906024016020604051808303815f875af1158015611b21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b459190613888565b90508015611b5c57611b58818333612557565b5050565b60405162461bcd60e51b815260206004820152600a6024820152694e6f207265776172647360b01b6044820152606401610b8d565b600e5460405163fbcbc0f160e01b81526001600160a01b0383811660048301525f92839283928392169063fbcbc0f190602401608060405180830381865afa158015611bdf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0391906138cd565b93509350935093509193509193565b6005546001600160a01b03163314611c3c5760405162461bcd60e51b8152600401610b8d9061354d565b620186a0611c4960025490565b611c54906001613684565b611c5e91906136af565b811015611ccb5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b8d565b6103e8611cd760025490565b611ce2906005613684565b611cec91906136af565b811115611d585760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b8d565b601555565b6005546001600160a01b03163314611d875760405162461bcd60e51b8152600401610b8d9061354d565b6014805460ff1916911515919091179055565b6005546001600160a01b03163314611dc45760405162461bcd60e51b8152600401610b8d9061354d565b6040805160a0810182525f608082015265ffffffffffff868116825285811692820192909252838216602082015290821660608201528183611e06868861384f565b611e10919061384f565b611e1a919061384f565b65ffffffffffff16608082018190526127101015611e6f5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b6044820152606401610b8d565b608081015160405165ffffffffffff90911681527fa6255338a5f732d64ceba7f4c18182567f9d1067eb984b46d478b37d72a52d119060200160405180910390a18051600d805460208401516040850151606086015160809096015165ffffffffffff908116600160c01b0265ffffffffffff60c01b19978216600160901b0265ffffffffffff60901b19938316600160601b02939093166bffffffffffffffffffffffff60601b19948316600160301b026bffffffffffffffffffffffff199096169290971691909117939093179190911693909317929092179290921617905550505050565b6005546001600160a01b03163314611f815760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b038216611fc65760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610b8d565b8061201e576016546001600160a01b039081169083160361201e5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610b8d565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f0712a8411c7892e205c3d35c5d2beabe76bb0b484bec43945f2024cd28eaae8d9101611691565b6005546001600160a01b031633146120a35760405162461bcd60e51b8152600401610b8d9061354d565b600e5460405163c0f306ef60e01b81526001600160a01b0383811660048301529091169063c0f306ef906024016112cd565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146121295760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b03811661218e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8d565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661224b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b8d565b6001600160a01b0382166122ac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b8d565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61231784846120d5565b90505f19811461237e57818110156123715760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b8d565b61237e84848484036121e9565b50505050565b6001600160a01b0383165f9081526006602052604090205460ff161580156123c457506001600160a01b0382165f9081526006602052604090205460ff16155b156124335760085460ff166124105760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b8d565b61241b8383836126a1565b61242683838361293f565b6124309082613875565b90505b61243e838383612d2b565b600e546001600160a01b031663e30443bc8361246e816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156124b1575f80fd5b505af11580156124c3573d5f803e3d5ffd5b5050600e546001600160a01b0316915063e30443bc9050846124f9816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b15801561253c575f80fd5b505af115801561254e573d5f803e3d5ffd5b50505050505050565b6040805160028082526060820183525f926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156125be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e2919061370e565b815f815181106125f4576125f4613729565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061262857612628613729565b6001600160a01b03928316602091820292909201015260175460405163b6f9de9560e01b815291169063b6f9de9590869061266d908790869088904290600401613909565b5f604051808303818588803b158015612684575f80fd5b505af1158015612696573d5f803e3d5ffd5b505050505050505050565b60125460ff1615612898576001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526011546001600160801b038082168352600160801b90910416818601529589168552600990935292205460ff928316939192168015612713575082155b156127b45780516001600160801b031684111561275c5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610b8d565b60208101516001600160801b0316612774838661389f565b11156127af5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610b8d565b612894565b6001600160a01b0385165f9081526009602052604090205460ff1680156127f357506001600160a01b0386165f9081526007602052604090205460ff16155b1561283c5780516001600160801b03168411156127af5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610b8d565b826128945760208101516001600160801b0316612859838661389f565b11156128945760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610b8d565b5050505b60145460ff1615612914576001600160a01b0382165f9081526009602052604090205460ff1615612919576001600160a01b0383165f9081526013602052604090205443116129145760405162461bcd60e51b815260206004820152600860248201526720b73a349026a2ab60c11b6044820152606401610b8d565b505050565b506001600160a01b03165f90815260136020526040808220439081905532835291205550565b601554305f9081526020819052604081205490911115801561297957506001600160a01b0384165f9081526009602052604090205460ff16155b1561298657612986612ece565b6040805160a0810182525f808252602080830182905282840182905260608301829052608083018290526001600160a01b0387168252600990529182205460ff1615612a2657506040805160a081018252600d5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b810483166060830152600160c01b90049091166080820152612a9c565b6001600160a01b0386165f9081526009602052604090205460ff1615612a9c57506040805160a081018252600c5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b810483166060830152600160c01b900490911660808201525b608081015165ffffffffffff1615612d19576040805160a081018252600f546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b9004909116606082015260105460ff16151560808083019190915282015161271090612b1f9065ffffffffffff1687613684565b612b2991906136af565b9250633b9aca00826080015165ffffffffffff16836040015165ffffffffffff1685612b55919061393d565b612b5f9190613968565b612b699190613968565b81602001818151612b7a919061398d565b6001600160401b031690525060808201518251633b9aca009165ffffffffffff90811691612ba991168661393d565b612bb39190613968565b612bbd9190613968565b81518290612bcc90839061398d565b6001600160401b031690525060808201516020830151633b9aca009165ffffffffffff90811691612bfe91168661393d565b612c089190613968565b612c129190613968565b81604001818151612c23919061398d565b6001600160401b031690525060808201516060830151633b9aca009165ffffffffffff90811691612c5591168661393d565b612c5f9190613968565b612c699190613968565b81606001818151612c7a919061398d565b6001600160401b039081169091528251600f80546020860151604087015160608801518616600160c01b026001600160c01b03918716600160801b02919091166001600160801b03928716600160401b026001600160801b031990941695909616949094179190911781169390931791909117905560808301516010805491151560ff19909216919091179055612d179150889030908616612d2b565b505b506001600160801b0316949350505050565b6001600160a01b038316612d8f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b8d565b6001600160a01b038216612df15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b8d565b6001600160a01b0383165f9081526020819052604090205481811015612e685760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b8d565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b305f9081526020818152604080832054815160a081018352600f546001600160401b03808216808452600160401b83048216968401879052600160801b83048216958401869052600160c01b909204166060830181905260105460ff161515608084015292959194919391612f43919061398d565b612f4d919061398d565b612f57919061398d565b6001600160401b03169050821580612f6d575080155b15612f7757505050565b601554612f85906014613684565b831115612f9d57601554612f9a906014613684565b92505b60208201516001600160401b031615613077575f8183602001516001600160401b031685612fcb9190613684565b612fd591906136af565b601654909150612ff09030906001600160a01b031683612d2b565b60165f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561303c575f80fd5b505af192505050801561304d575060015b506130588185613875565b935082602001516001600160401b0316826130739190613875565b9150505b82156131ff5761308683613234565b604082015147905f906001600160401b03161561311457600b5460408501516001600160a01b039091169084906130c6906001600160401b031685613684565b6130d091906136af565b6040515f81818185875af1925050503d805f8114613109576040519150601f19603f3d011682016040523d82523d5f602084013e61310e565b606091505b50909150505b60608401516001600160401b03161561319e57600e5460608501516001600160a01b03909116908490613150906001600160401b031685613684565b61315a91906136af565b6040515f81818185875af1925050503d805f8114613193576040519150601f19603f3d011682016040523d82523d5f602084013e613198565b606091505b50909150505b47915081156131fc57600a546040516001600160a01b039091169083905f81818185875af1925050503d805f81146131f1576040519150601f19603f3d011682016040523d82523d5f602084013e6131f6565b606091505b50909150505b50505b505f602082018190528082526040820181905260608201819052600f55608001516010805460ff191691151591909117905550565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061326757613267613729565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106132bb576132bb613729565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac947906133009085905f908690309042906004016139ad565b5f604051808303815f87803b158015613317575f80fd5b505af1158015613329573d5f803e3d5ffd5b505050505050565b5f60208284031215613341575f80fd5b81356001600160801b0381168114613357575f80fd5b9392505050565b5f6020808352835180828501525f5b818110156133895785810183015185820160400152820161336d565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611570575f80fd5b5f80604083850312156133ce575f80fd5b82356133d9816133a9565b946020939093013593505050565b5f602082840312156133f7575f80fd5b8135613357816133a9565b5f805f60608486031215613414575f80fd5b833561341f816133a9565b9250602084013561342f816133a9565b929592945050506040919091013590565b5f60208284031215613450575f80fd5b5035919050565b8015158114611570575f80fd5b5f8060408385031215613475575f80fd5b8235613480816133a9565b9150602083013561349081613457565b809150509250929050565b803565ffffffffffff811681146134b0575f80fd5b919050565b5f805f80608085870312156134c8575f80fd5b6134d18561349b565b93506134df6020860161349b565b92506134ed6040860161349b565b91506134fb6060860161349b565b905092959194509250565b5f60208284031215613516575f80fd5b813561335781613457565b5f8060408385031215613532575f80fd5b823561353d816133a9565b91506020830135613490816133a9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156135d057815f19048211156135b6576135b6613582565b808516156135c357918102915b93841c939080029061359b565b509250929050565b5f826135e657506001610dc9565b816135f257505f610dc9565b816001811461360857600281146136125761362e565b6001915050610dc9565b60ff84111561362357613623613582565b50506001821b610dc9565b5060208310610133831016604e8410600b8410161715613651575081810a610dc9565b61365b8383613596565b805f190482111561366e5761366e613582565b029392505050565b5f61335760ff8416836135d8565b8082028115828204841417610dc957610dc9613582565b634e487b7160e01b5f52601260045260245ffd5b5f826136bd576136bd61369b565b500490565b600181811c908216806136d657607f821691505b6020821081036136f457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561371e575f80fd5b8151613357816133a9565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156137745781516001600160a01b03168752958201959082019060010161374f565b509495945050505050565b828152604060208201525f6114f7604083018461373d565b5f60208083850312156137a8575f80fd5b82516001600160401b03808211156137be575f80fd5b818501915085601f8301126137d1575f80fd5b8151818111156137e3576137e36136fa565b8060051b604051601f19603f83011681018181108582111715613808576138086136fa565b604052918252848201925083810185019188831115613825575f80fd5b938501935b828510156138435784518452938501939285019261382a565b98975050505050505050565b65ffffffffffff81811683821601908082111561386e5761386e613582565b5092915050565b81810381811115610dc957610dc9613582565b5f60208284031215613898575f80fd5b5051919050565b80820180821115610dc957610dc9613582565b5f602082840312156138c2575f80fd5b815161335781613457565b5f805f80608085870312156138e0575f80fd5b84516138eb816133a9565b60208601516040870151606090970151919890975090945092505050565b848152608060208201525f613921608083018661373d565b6001600160a01b03949094166040830152506060015292915050565b6001600160801b0381811683821602808216919082811461396057613960613582565b505092915050565b5f6001600160801b03808416806139815761398161369b565b92169190910492915050565b6001600160401b0381811683821601908082111561386e5761386e613582565b85815284602082015260a060408201525f6139cb60a083018661373d565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220898b8892b3008c1e5704571d67e49df2958324b001d8437163871f62c54e468264736f6c63430008140033608060405234801561000f575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506110ef8061005d5f395ff3fe608060405260043610610134575f3560e01c806391b89fba116100a8578063bc4c4b371161006d578063bc4c4b371461034f578063c0f306ef1461036e578063dcb95ed91461038d578063e30443bc146103ac578063f2fde38b146103cb578063fbcbc0f1146103ea575f80fd5b806391b89fba1461029d578063a8b9d240146102bc578063aafd847a146102db578063ab6ddfa81461030f578063ad7a672f1461033a575f80fd5b80636843cd84116100f95780636843cd84146101f25780636a47400214610226578063715018a61461023a57806371778e7d1461024e57806385a6b3ae146102625780638da5cb5b14610277575f80fd5b806303c833021461014757806327ce01471461014f57806330bb4cff1461018157806331e79db0146101955780634e7b827f146101b4575f80fd5b3661014357610141610433565b005b5f80fd5b610141610433565b34801561015a575f80fd5b5061016e610169366004610eec565b6104bb565b6040519081526020015b60405180910390f35b34801561018c575f80fd5b5060065461016e565b3480156101a0575f80fd5b506101416101af366004610eec565b61051d565b3480156101bf575f80fd5b506101e26101ce366004610eec565b60076020525f908152604090205460ff1681565b6040519015158152602001610178565b3480156101fd575f80fd5b5061016e61020c366004610eec565b6001600160a01b03165f9081526004602052604090205490565b348015610231575f80fd5b5061014161057f565b348015610245575f80fd5b50610141610588565b348015610259575f80fd5b5060055461016e565b34801561026d575f80fd5b5061016e60065481565b348015610282575f80fd5b505f546040516001600160a01b039091168152602001610178565b3480156102a8575f80fd5b5061016e6102b7366004610eec565b6105f9565b3480156102c7575f80fd5b5061016e6102d6366004610eec565b6105ff565b3480156102e6575f80fd5b5061016e6102f5366004610eec565b6001600160a01b03165f9081526003602052604090205490565b34801561031a575f80fd5b5061016e610329366004610eec565b60046020525f908152604090205481565b348015610345575f80fd5b5061016e60055481565b34801561035a575f80fd5b506101e2610369366004610f07565b61062a565b348015610379575f80fd5b50610141610388366004610eec565b6106bf565b348015610398575f80fd5b5061016e6103a7366004610eec565b6107ae565b3480156103b7575f80fd5b506101416103c6366004610f42565b610908565b3480156103d6575f80fd5b506101416103e5366004610eec565b61096b565b3480156103f5575f80fd5b50610409610404366004610eec565b610a52565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610178565b5f60055411801561044357505f34115b156104b9576005546104709061045d34600160801b610a8e565b6104679190610f80565b60015490610b13565b60015560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26006546104b59034610b13565b6006555b565b6001600160a01b0381165f908152600260209081526040808320546004909252822054600154600160801b9261050d9261050892610502916104fd9190610a8e565b610b71565b90610b7f565b610bb9565b6105179190610f80565b92915050565b5f546001600160a01b0316331461054f5760405162461bcd60e51b815260040161054690610f9f565b60405180910390fd5b6001600160a01b0381165f908152600760205260408120805460ff1916600117905561057c908290610bca565b50565b61057c33610c5e565b5f546001600160a01b031633146105b15760405162461bcd60e51b815260040161054690610f9f565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f610517825b6001600160a01b0381165f9081526003602052604081205461051790610624846104bb565b90610d95565b5f80546001600160a01b031633146106545760405162461bcd60e51b815260040161054690610f9f565b5f61065e84610c5e565b905080156106b657821515846001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516106a491815260200190565b60405180910390a36001915050610517565b505f9392505050565b5f546001600160a01b031633146106e85760405162461bcd60e51b815260040161054690610f9f565b6001600160a01b0381165f9081526007602052604090205460ff1661070b575f80fd5b6001600160a01b0381165f908152600760205260409020805460ff1916905561057c8161073f5f546001600160a01b031690565b6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa158015610785573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190610fd4565b610bca565b5f80546001600160a01b031633146107d85760405162461bcd60e51b815260040161054690610f9f565b6107e1826105ff565b90508015610863576001600160a01b0382165f9081526003602052604090205461080c908290610feb565b6001600160a01b0383165f81815260036020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061085a9084815260200190565b60405180910390a25b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f81146108ad576040519150601f19603f3d011682016040523d82523d5f602084013e6108b2565b606091505b5050905080610901576001600160a01b0383165f908152600360205260409020546108dd9083610d95565b6001600160a01b0384165f9081526003602052604081209190915591506109039050565b505b919050565b5f546001600160a01b031633146109315760405162461bcd60e51b815260040161054690610f9f565b6001600160a01b0382165f9081526007602052604090205460ff166109675761095a8282610bca565b61096582600161062a565b505b5050565b5f546001600160a01b031633146109945760405162461bcd60e51b815260040161054690610f9f565b6001600160a01b0381166109f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610546565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b805f8080610a5f846105ff565b9250610a6a846104bb565b6001600160a01b0385165f9081526004602052604090205494969395509392915050565b5f825f03610a9d57505f610517565b5f610aa88385610ffe565b905082610ab58583610f80565b14610b0c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610546565b9392505050565b5f80610b1f8385610feb565b905083811015610b0c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610546565b5f8181811215610517575f80fd5b5f80610b8b8385611015565b90505f8312158015610b9d5750838112155b80610bb157505f83128015610bb157508381125b610b0c575f80fd5b5f80821215610bc6575f80fd5b5090565b6001600160a01b0382165f90815260046020526040902080549082905580821115610c23575f610bfa8383610d95565b9050610c068482610dd6565b8060055f828254610c179190610feb565b90915550610965915050565b80821015610965575f610c368284610d95565b9050610c428482610e2e565b8060055f828254610c53919061103c565b909155505050505050565b5f80610c69836105ff565b90508015610d8d576001600160a01b0383165f90815260036020526040902054610c939082610b13565b6001600160a01b0384165f81815260036020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d90610ce19084815260200190565b60405180910390a25f836001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610d32576040519150601f19603f3d011682016040523d82523d5f602084013e610d37565b606091505b5050905080610d86576001600160a01b0384165f90815260036020526040902054610d629083610d95565b6001600160a01b039094165f90815260036020526040812094909455509192915050565b5092915050565b505f92915050565b5f610b0c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e67565b610e0f610df16104fd83600154610a8e90919063ffffffff16565b6001600160a01b0384165f9081526002602052604090205490610e9f565b6001600160a01b039092165f9081526002602052604090209190915550565b610e0f610e496104fd83600154610a8e90919063ffffffff16565b6001600160a01b0384165f9081526002602052604090205490610b7f565b5f8184841115610e8a5760405162461bcd60e51b8152600401610546919061104f565b505f610e96848661103c565b95945050505050565b5f80610eab838561109a565b90505f8312158015610ebd5750838113155b80610bb157505f83128015610bb15750838113610b0c575f80fd5b6001600160a01b038116811461057c575f80fd5b5f60208284031215610efc575f80fd5b8135610b0c81610ed8565b5f8060408385031215610f18575f80fd5b8235610f2381610ed8565b915060208301358015158114610f37575f80fd5b809150509250929050565b5f8060408385031215610f53575f80fd5b8235610f5e81610ed8565b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b5f82610f9a57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215610fe4575f80fd5b5051919050565b8082018082111561051757610517610f6c565b808202811582820484141761051757610517610f6c565b8082018281125f83128015821682158216171561103457611034610f6c565b505092915050565b8181038181111561051757610517610f6c565b5f6020808352835180828501525f5b8181101561107a5785810183015185820160400152820161105e565b505f604082860101526040601f19601f8301168501019250505092915050565b8181035f831280158383131683831282161715610d8657610d86610f6c56fea26469706673582212205ed1a5bd71b494106ed59541ef6062319107cb9640c2f2cd6412e1f78482858164736f6c63430008140033

Deployed Bytecode

0x608060405260043610610344575f3560e01c806371778e7d116101bd578063ad5c4648116100f2578063cc1776d311610092578063e2f456051161006d578063e2f4560514610acc578063e8cd2fec14610ae1578063f270fde414610afa578063f2fde38b14610b44575f80fd5b8063cc1776d314610a37578063dbe66ca014610a7f578063dd62ed3e14610aad575f80fd5b8063b460eef5116100cd578063b460eef5146109bb578063bd9dfecc146109da578063bf78019b146109f9578063c0f306ef14610a18575f80fd5b8063ad5c46481461093b578063b0249cc61461096e578063b2a9c0c01461099c575f80fd5b8063a457c2d71161015d578063a8b9d24011610138578063a8b9d24014610895578063a9059cbb146108b4578063aa5f7e26146108d3578063ad56c13c146108f2575f80fd5b8063a457c2d714610838578063a5ece94114610857578063a8aa1b3114610876575f80fd5b8063850337621161019857806385033762146107bb5780638da5cb5b146107da57806395d89b41146107f75780639e93ad8e1461080b575f80fd5b806371778e7d1461075a5780637b812b411461076e57806380dee2571461079c575f80fd5b806323b872dd116102935780634e71d92d116102335780636843cd841161020e5780636843cd84146106725780636d7adcad1461069157806370a0823114610712578063715018a614610746575f80fd5b80634e71d92d146105be5780634f7041a5146105d25780636612e66f14610653575f80fd5b806331e79db01161026e57806331e79db01461054257806339509351146105615780633ad10ef6146105805780634008c2f01461059f575f80fd5b806323b872dd146104f457806330bb4cff14610513578063313ce56714610527575f80fd5b806313a351b5116102fe5780631b03ddc1116102d95780631b03ddc1146104895780631c249494146104a85780631f2698ab146104bc5780632369bf83146104d5575f80fd5b806313a351b51461042957806314bb4edd1461044857806318160ddd14610475575f80fd5b80630106aaef1461034f578063041138901461036557806304816a4e1461039357806306fdde03146103b25780630758d924146103d3578063095ea7b31461040a575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b50610363610b63565b005b348015610370575f80fd5b5060145461037e9060ff1681565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103636103ad366004613331565b610c0b565b3480156103bd575f80fd5b506103c6610d26565b60405161038a919061335e565b3480156103de575f80fd5b506017546103f2906001600160a01b031681565b6040516001600160a01b03909116815260200161038a565b348015610415575f80fd5b5061037e6104243660046133bd565b610db6565b348015610434575f80fd5b50610363610443366004613331565b610dcf565b348015610453575f80fd5b506104676104623660046133e7565b610ee0565b60405190815260200161038a565b348015610480575f80fd5b50600254610467565b348015610494575f80fd5b50600e546103f2906001600160a01b031681565b3480156104b3575f80fd5b506103636110ce565b3480156104c7575f80fd5b5060085461037e9060ff1681565b3480156104e0575f80fd5b506103636104ef3660046133e7565b611151565b3480156104ff575f80fd5b5061037e61050e366004613402565b6111e2565b34801561051e575f80fd5b50610467611205565b348015610532575f80fd5b506040516012815260200161038a565b34801561054d575f80fd5b5061036361055c3660046133e7565b611275565b34801561056c575f80fd5b5061037e61057b3660046133bd565b6112fd565b34801561058b575f80fd5b50600b546103f2906001600160a01b031681565b3480156105aa575f80fd5b506104676105b9366004613440565b61131e565b3480156105c9575f80fd5b506103636114ff565b3480156105dd575f80fd5b50600c5461061a9065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b8104821691600160c01b9091041685565b6040805165ffffffffffff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161038a565b34801561065e575f80fd5b5061036361066d366004613464565b611573565b34801561067d575f80fd5b5061046761068c3660046133e7565b61169d565b34801561069c575f80fd5b50600f546010546106d7916001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b909104169060ff1685565b604080516001600160401b0396871681529486166020860152928516928401929092529092166060820152901515608082015260a00161038a565b34801561071d575f80fd5b5061046761072c3660046133e7565b6001600160a01b03165f9081526020819052604090205490565b348015610751575f80fd5b5061036361170a565b348015610765575f80fd5b5061046761177d565b348015610779575f80fd5b5061037e6107883660046133e7565b60076020525f908152604090205460ff1681565b3480156107a7575f80fd5b506103636107b63660046134b5565b6117c4565b3480156107c6575f80fd5b506103636107d53660046133e7565b611981565b3480156107e5575f80fd5b506005546001600160a01b03166103f2565b348015610802575f80fd5b506103c6611a12565b348015610816575f80fd5b5061082061271081565b6040516001600160401b03909116815260200161038a565b348015610843575f80fd5b5061037e6108523660046133bd565b611a21565b348015610862575f80fd5b50600a546103f2906001600160a01b031681565b348015610881575f80fd5b506016546103f2906001600160a01b031681565b3480156108a0575f80fd5b506104676108af3660046133e7565b611a9b565b3480156108bf575f80fd5b5061037e6108ce3660046133bd565b611acd565b3480156108de575f80fd5b506103636108ed366004613440565b611ada565b3480156108fd575f80fd5b5061091161090c3660046133e7565b611b91565b604080516001600160a01b039095168552602085019390935291830152606082015260800161038a565b348015610946575f80fd5b506103f27f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610979575f80fd5b5061037e6109883660046133e7565b60096020525f908152604090205460ff1681565b3480156109a7575f80fd5b506103636109b6366004613440565b611c12565b3480156109c6575f80fd5b506103636109d5366004613506565b611d5d565b3480156109e5575f80fd5b506103636109f43660046134b5565b611d9a565b348015610a04575f80fd5b50610363610a13366004613464565b611f57565b348015610a23575f80fd5b50610363610a323660046133e7565b612079565b348015610a42575f80fd5b50600d5461061a9065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b8104821691600160c01b9091041685565b348015610a8a575f80fd5b5061037e610a993660046133e7565b60066020525f908152604090205460ff1681565b348015610ab8575f80fd5b50610467610ac7366004613521565b6120d5565b348015610ad7575f80fd5b5061046760155481565b348015610aec575f80fd5b5060125461037e9060ff1681565b348015610b05575f80fd5b50601154610b24906001600160801b0380821691600160801b90041682565b604080516001600160801b0393841681529290911660208301520161038a565b348015610b4f575f80fd5b50610363610b5e3660046133e7565b6120ff565b6005546001600160a01b03163314610b965760405162461bcd60e51b8152600401610b8d9061354d565b60405180910390fd5b6012805460ff19169055604080518082019091525f80825260208201525f610bbd60025490565b6001600160801b03811680845260208401819052600160801b8102176011556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b6005546001600160a01b03163314610c355760405162461bcd60e51b8152600401610b8d9061354d565b610c416012600a613676565b6103e8610c4d60025490565b610c58906001613684565b610c6291906136af565b610c6c91906136af565b816001600160801b03161015610cae5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610b8d565b610cba6012600a613676565b610ccd906001600160801b038316613684565b601180546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788906020015b60405180910390a150565b606060038054610d35906136c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d61906136c2565b8015610dac5780601f10610d8357610100808354040283529160200191610dac565b820191905f5260205f20905b815481529060010190602001808311610d8f57829003601f168201915b5050505050905090565b5f33610dc38185856121e9565b60019150505b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610b8d9061354d565b610e056012600a613676565b6103e8610e1160025490565b610e1c906001613684565b610e2691906136af565b610e3091906136af565b816001600160801b03161015610e725760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610b8d565b610e7e6012600a613676565b610e91906001600160801b038316613684565b601180546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e690602001610d1b565b5f80610eeb83611a9b565b6040805160028082526060820183529293505f9290916020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b919061370e565b815f81518110610f8d57610f8d613729565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610fc157610fc1613729565b6001600160a01b03928316602091820292909201015260175460405163d06ca61f60e01b81525f92919091169063d06ca61f90611004908690869060040161377f565b5f60405180830381865afa15801561101e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110459190810190613797565b600c549091506127109061106990600160c01b900465ffffffffffff16603261384f565b65ffffffffffff168260018151811061108457611084613729565b60200260200101516110969190613684565b6110a091906136af565b816001815181106110b3576110b3613729565b60200260200101516110c59190613875565b95945050505050565b6005546001600160a01b031633146110f85760405162461bcd60e51b8152600401610b8d9061354d565b60085460ff16156111425760405162461bcd60e51b815260206004820152601460248201527354726164696e6720616c7265616479206c69766560601b6044820152606401610b8d565b6008805460ff19166001179055565b6005546001600160a01b0316331461117b5760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b0381166111c05760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610b8d565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f336111ef85828561230c565b6111fa858585612384565b506001949350505050565b600e54604080516342d359d760e11b815290515f926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa15801561124c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112709190613888565b905090565b6005546001600160a01b0316331461129f5760405162461bcd60e51b8152600401610b8d9061354d565b600e5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b5f604051808303815f87803b1580156112e4575f80fd5b505af11580156112f6573d5f803e3d5ffd5b5050505050565b5f33610dc381858561130f83836120d5565b611319919061389f565b6121e9565b6040805160028082526060820183525f92839291906020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611389573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ad919061370e565b815f815181106113bf576113bf613729565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106113f3576113f3613729565b6001600160a01b03928316602091820292909201015260175460405163d06ca61f60e01b81525f92919091169063d06ca61f90611436908790869060040161377f565b5f60405180830381865afa158015611450573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114779190810190613797565b600c549091506127109061149b90600160c01b900465ffffffffffff16603261384f565b65ffffffffffff16826001815181106114b6576114b6613729565b60200260200101516114c89190613684565b6114d291906136af565b816001815181106114e5576114e5613729565b60200260200101516114f79190613875565b949350505050565b600e5460405163bc4c4b3760e01b81523360048201525f60248201526001600160a01b039091169063bc4c4b37906044016020604051808303815f875af115801561154c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157091906138b2565b50565b6005546001600160a01b0316331461159d5760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b0382166115e25760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610b8d565b306001600160a01b0383160361163a5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420756e6578636c7564656420636f6e74726163740000000000006044820152606401610b8d565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527fc4eea32423e96d678d53f47ddd9b7a5103eea02606d7daa81c77038c54dc8edb91015b60405180910390a15050565b600e5460405163156dbbf560e31b81526001600160a01b0383811660048301525f92169063ab6ddfa8906024015b602060405180830381865afa1580156116e6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc99190613888565b6005546001600160a01b031633146117345760405162461bcd60e51b8152600401610b8d9061354d565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600e546040805163ad7a672f60e01b815290515f926001600160a01b03169163ad7a672f9160048083019260209291908290030181865afa15801561124c573d5f803e3d5ffd5b6005546001600160a01b031633146117ee5760405162461bcd60e51b8152600401610b8d9061354d565b6040805160a0810182525f608082015265ffffffffffff868116825285811692820192909252838216602082015290821660608201528183611830868861384f565b61183a919061384f565b611844919061384f565b65ffffffffffff166080820181905261271010156118995760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b6044820152606401610b8d565b608081015160405165ffffffffffff90911681527f7a758dc8e99047b028278b3e2ff1416d8493a7aacee7a5dc30b6bf93270eccce9060200160405180910390a18051600c805460208401516040850151606086015160809096015165ffffffffffff908116600160c01b0265ffffffffffff60c01b19978216600160901b0265ffffffffffff60901b19938316600160601b02939093166bffffffffffffffffffffffff60601b19948316600160301b026bffffffffffffffffffffffff199096169290971691909117939093179190911693909317929092179290921617905550505050565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b0381166119f05760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610b8d565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610d35906136c2565b5f3381611a2e82866120d5565b905083811015611a8e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b8d565b6111fa82868684036121e9565b600e546040516302a2e74960e61b81526001600160a01b0383811660048301525f92169063a8b9d240906024016116cb565b5f33610dc3818585612384565b600e5460405163dcb95ed960e01b81523360048201525f916001600160a01b03169063dcb95ed9906024016020604051808303815f875af1158015611b21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b459190613888565b90508015611b5c57611b58818333612557565b5050565b60405162461bcd60e51b815260206004820152600a6024820152694e6f207265776172647360b01b6044820152606401610b8d565b600e5460405163fbcbc0f160e01b81526001600160a01b0383811660048301525f92839283928392169063fbcbc0f190602401608060405180830381865afa158015611bdf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0391906138cd565b93509350935093509193509193565b6005546001600160a01b03163314611c3c5760405162461bcd60e51b8152600401610b8d9061354d565b620186a0611c4960025490565b611c54906001613684565b611c5e91906136af565b811015611ccb5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b8d565b6103e8611cd760025490565b611ce2906005613684565b611cec91906136af565b811115611d585760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b8d565b601555565b6005546001600160a01b03163314611d875760405162461bcd60e51b8152600401610b8d9061354d565b6014805460ff1916911515919091179055565b6005546001600160a01b03163314611dc45760405162461bcd60e51b8152600401610b8d9061354d565b6040805160a0810182525f608082015265ffffffffffff868116825285811692820192909252838216602082015290821660608201528183611e06868861384f565b611e10919061384f565b611e1a919061384f565b65ffffffffffff16608082018190526127101015611e6f5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b6044820152606401610b8d565b608081015160405165ffffffffffff90911681527fa6255338a5f732d64ceba7f4c18182567f9d1067eb984b46d478b37d72a52d119060200160405180910390a18051600d805460208401516040850151606086015160809096015165ffffffffffff908116600160c01b0265ffffffffffff60c01b19978216600160901b0265ffffffffffff60901b19938316600160601b02939093166bffffffffffffffffffffffff60601b19948316600160301b026bffffffffffffffffffffffff199096169290971691909117939093179190911693909317929092179290921617905550505050565b6005546001600160a01b03163314611f815760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b038216611fc65760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610b8d565b8061201e576016546001600160a01b039081169083160361201e5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610b8d565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f0712a8411c7892e205c3d35c5d2beabe76bb0b484bec43945f2024cd28eaae8d9101611691565b6005546001600160a01b031633146120a35760405162461bcd60e51b8152600401610b8d9061354d565b600e5460405163c0f306ef60e01b81526001600160a01b0383811660048301529091169063c0f306ef906024016112cd565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146121295760405162461bcd60e51b8152600401610b8d9061354d565b6001600160a01b03811661218e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8d565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661224b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b8d565b6001600160a01b0382166122ac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b8d565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61231784846120d5565b90505f19811461237e57818110156123715760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b8d565b61237e84848484036121e9565b50505050565b6001600160a01b0383165f9081526006602052604090205460ff161580156123c457506001600160a01b0382165f9081526006602052604090205460ff16155b156124335760085460ff166124105760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b8d565b61241b8383836126a1565b61242683838361293f565b6124309082613875565b90505b61243e838383612d2b565b600e546001600160a01b031663e30443bc8361246e816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156124b1575f80fd5b505af11580156124c3573d5f803e3d5ffd5b5050600e546001600160a01b0316915063e30443bc9050846124f9816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b15801561253c575f80fd5b505af115801561254e573d5f803e3d5ffd5b50505050505050565b6040805160028082526060820183525f926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156125be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e2919061370e565b815f815181106125f4576125f4613729565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061262857612628613729565b6001600160a01b03928316602091820292909201015260175460405163b6f9de9560e01b815291169063b6f9de9590869061266d908790869088904290600401613909565b5f604051808303818588803b158015612684575f80fd5b505af1158015612696573d5f803e3d5ffd5b505050505050505050565b60125460ff1615612898576001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526011546001600160801b038082168352600160801b90910416818601529589168552600990935292205460ff928316939192168015612713575082155b156127b45780516001600160801b031684111561275c5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610b8d565b60208101516001600160801b0316612774838661389f565b11156127af5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610b8d565b612894565b6001600160a01b0385165f9081526009602052604090205460ff1680156127f357506001600160a01b0386165f9081526007602052604090205460ff16155b1561283c5780516001600160801b03168411156127af5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610b8d565b826128945760208101516001600160801b0316612859838661389f565b11156128945760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610b8d565b5050505b60145460ff1615612914576001600160a01b0382165f9081526009602052604090205460ff1615612919576001600160a01b0383165f9081526013602052604090205443116129145760405162461bcd60e51b815260206004820152600860248201526720b73a349026a2ab60c11b6044820152606401610b8d565b505050565b506001600160a01b03165f90815260136020526040808220439081905532835291205550565b601554305f9081526020819052604081205490911115801561297957506001600160a01b0384165f9081526009602052604090205460ff16155b1561298657612986612ece565b6040805160a0810182525f808252602080830182905282840182905260608301829052608083018290526001600160a01b0387168252600990529182205460ff1615612a2657506040805160a081018252600d5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b810483166060830152600160c01b90049091166080820152612a9c565b6001600160a01b0386165f9081526009602052604090205460ff1615612a9c57506040805160a081018252600c5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b810483166060830152600160c01b900490911660808201525b608081015165ffffffffffff1615612d19576040805160a081018252600f546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b9004909116606082015260105460ff16151560808083019190915282015161271090612b1f9065ffffffffffff1687613684565b612b2991906136af565b9250633b9aca00826080015165ffffffffffff16836040015165ffffffffffff1685612b55919061393d565b612b5f9190613968565b612b699190613968565b81602001818151612b7a919061398d565b6001600160401b031690525060808201518251633b9aca009165ffffffffffff90811691612ba991168661393d565b612bb39190613968565b612bbd9190613968565b81518290612bcc90839061398d565b6001600160401b031690525060808201516020830151633b9aca009165ffffffffffff90811691612bfe91168661393d565b612c089190613968565b612c129190613968565b81604001818151612c23919061398d565b6001600160401b031690525060808201516060830151633b9aca009165ffffffffffff90811691612c5591168661393d565b612c5f9190613968565b612c699190613968565b81606001818151612c7a919061398d565b6001600160401b039081169091528251600f80546020860151604087015160608801518616600160c01b026001600160c01b03918716600160801b02919091166001600160801b03928716600160401b026001600160801b031990941695909616949094179190911781169390931791909117905560808301516010805491151560ff19909216919091179055612d179150889030908616612d2b565b505b506001600160801b0316949350505050565b6001600160a01b038316612d8f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b8d565b6001600160a01b038216612df15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b8d565b6001600160a01b0383165f9081526020819052604090205481811015612e685760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b8d565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b305f9081526020818152604080832054815160a081018352600f546001600160401b03808216808452600160401b83048216968401879052600160801b83048216958401869052600160c01b909204166060830181905260105460ff161515608084015292959194919391612f43919061398d565b612f4d919061398d565b612f57919061398d565b6001600160401b03169050821580612f6d575080155b15612f7757505050565b601554612f85906014613684565b831115612f9d57601554612f9a906014613684565b92505b60208201516001600160401b031615613077575f8183602001516001600160401b031685612fcb9190613684565b612fd591906136af565b601654909150612ff09030906001600160a01b031683612d2b565b60165f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561303c575f80fd5b505af192505050801561304d575060015b506130588185613875565b935082602001516001600160401b0316826130739190613875565b9150505b82156131ff5761308683613234565b604082015147905f906001600160401b03161561311457600b5460408501516001600160a01b039091169084906130c6906001600160401b031685613684565b6130d091906136af565b6040515f81818185875af1925050503d805f8114613109576040519150601f19603f3d011682016040523d82523d5f602084013e61310e565b606091505b50909150505b60608401516001600160401b03161561319e57600e5460608501516001600160a01b03909116908490613150906001600160401b031685613684565b61315a91906136af565b6040515f81818185875af1925050503d805f8114613193576040519150601f19603f3d011682016040523d82523d5f602084013e613198565b606091505b50909150505b47915081156131fc57600a546040516001600160a01b039091169083905f81818185875af1925050503d805f81146131f1576040519150601f19603f3d011682016040523d82523d5f602084013e6131f6565b606091505b50909150505b50505b505f602082018190528082526040820181905260608201819052600f55608001516010805460ff191691151591909117905550565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061326757613267613729565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106132bb576132bb613729565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac947906133009085905f908690309042906004016139ad565b5f604051808303815f87803b158015613317575f80fd5b505af1158015613329573d5f803e3d5ffd5b505050505050565b5f60208284031215613341575f80fd5b81356001600160801b0381168114613357575f80fd5b9392505050565b5f6020808352835180828501525f5b818110156133895785810183015185820160400152820161336d565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611570575f80fd5b5f80604083850312156133ce575f80fd5b82356133d9816133a9565b946020939093013593505050565b5f602082840312156133f7575f80fd5b8135613357816133a9565b5f805f60608486031215613414575f80fd5b833561341f816133a9565b9250602084013561342f816133a9565b929592945050506040919091013590565b5f60208284031215613450575f80fd5b5035919050565b8015158114611570575f80fd5b5f8060408385031215613475575f80fd5b8235613480816133a9565b9150602083013561349081613457565b809150509250929050565b803565ffffffffffff811681146134b0575f80fd5b919050565b5f805f80608085870312156134c8575f80fd5b6134d18561349b565b93506134df6020860161349b565b92506134ed6040860161349b565b91506134fb6060860161349b565b905092959194509250565b5f60208284031215613516575f80fd5b813561335781613457565b5f8060408385031215613532575f80fd5b823561353d816133a9565b91506020830135613490816133a9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156135d057815f19048211156135b6576135b6613582565b808516156135c357918102915b93841c939080029061359b565b509250929050565b5f826135e657506001610dc9565b816135f257505f610dc9565b816001811461360857600281146136125761362e565b6001915050610dc9565b60ff84111561362357613623613582565b50506001821b610dc9565b5060208310610133831016604e8410600b8410161715613651575081810a610dc9565b61365b8383613596565b805f190482111561366e5761366e613582565b029392505050565b5f61335760ff8416836135d8565b8082028115828204841417610dc957610dc9613582565b634e487b7160e01b5f52601260045260245ffd5b5f826136bd576136bd61369b565b500490565b600181811c908216806136d657607f821691505b6020821081036136f457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561371e575f80fd5b8151613357816133a9565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156137745781516001600160a01b03168752958201959082019060010161374f565b509495945050505050565b828152604060208201525f6114f7604083018461373d565b5f60208083850312156137a8575f80fd5b82516001600160401b03808211156137be575f80fd5b818501915085601f8301126137d1575f80fd5b8151818111156137e3576137e36136fa565b8060051b604051601f19603f83011681018181108582111715613808576138086136fa565b604052918252848201925083810185019188831115613825575f80fd5b938501935b828510156138435784518452938501939285019261382a565b98975050505050505050565b65ffffffffffff81811683821601908082111561386e5761386e613582565b5092915050565b81810381811115610dc957610dc9613582565b5f60208284031215613898575f80fd5b5051919050565b80820180821115610dc957610dc9613582565b5f602082840312156138c2575f80fd5b815161335781613457565b5f805f80608085870312156138e0575f80fd5b84516138eb816133a9565b60208601516040870151606090970151919890975090945092505050565b848152608060208201525f613921608083018661373d565b6001600160a01b03949094166040830152506060015292915050565b6001600160801b0381811683821602808216919082811461396057613960613582565b505092915050565b5f6001600160801b03808416806139815761398161369b565b92169190910492915050565b6001600160401b0381811683821601908082111561386e5761386e613582565b85815284602082015260a060408201525f6139cb60a083018661373d565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220898b8892b3008c1e5704571d67e49df2958324b001d8437163871f62c54e468264736f6c63430008140033

Deployed Bytecode Sourcemap

33423:16048:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45747:330;;;;;;;;;;;;;:::i;:::-;;34033:33;;;;;;;;;;-1:-1:-1;34033:33:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;34033:33:0;;;;;;;;43842:302;;;;;;;;;;-1:-1:-1;43842:302:0;;;;;:::i;:::-;;:::i;4330:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34143:27::-;;;;;;;;;;-1:-1:-1;34143:27:0;;;;-1:-1:-1;;;;;34143:27:0;;;;;;-1:-1:-1;;;;;1248:32:1;;;1230:51;;1218:2;1203:18;34143:27:0;1065:222:1;6690:201:0;;;;;;;;;;-1:-1:-1;6690:201:0;;;;;:::i;:::-;;:::i;43512:322::-;;;;;;;;;;-1:-1:-1;43512:322:0;;;;;:::i;:::-;;:::i;49029:439::-;;;;;;;;;;-1:-1:-1;49029:439:0;;;;;:::i;:::-;;:::i;:::-;;;2146:25:1;;;2134:2;2119:18;49029:439:0;2000:177:1;5459:108:0;;;;;;;;;;-1:-1:-1;5547:12:0;;5459:108;;33790:24;;;;;;;;;;-1:-1:-1;33790:24:0;;;;-1:-1:-1;;;;;33790:24:0;;;45613:126;;;;;;;;;;;;;:::i;33588:19::-;;;;;;;;;;-1:-1:-1;33588:19:0;;;;;;;;46204:173;;;;;;;;;;-1:-1:-1;46204:173:0;;;;;:::i;:::-;;:::i;7471:261::-;;;;;;;;;;-1:-1:-1;7471:261:0;;;;;:::i;:::-;;:::i;46724:134::-;;;;;;;;;;;;;:::i;5301:93::-;;;;;;;;;;-1:-1:-1;5301:93:0;;5384:2;3018:36:1;;3006:2;2991:18;5301:93:0;2876:184:1;47503:123:0;;;;;;;;;;-1:-1:-1;47503:123:0;;;;;:::i;:::-;;:::i;8141:238::-;;;;;;;;;;-1:-1:-1;8141:238:0;;;;;:::i;:::-;;:::i;33705:25::-;;;;;;;;;;-1:-1:-1;33705:25:0;;;;-1:-1:-1;;;;;33705:25:0;;;48637:384;;;;;;;;;;-1:-1:-1;48637:384:0;;;;;:::i;:::-;;:::i;46620:96::-;;;;;;;;;;;;;:::i;33739:17::-;;;;;;;;;;-1:-1:-1;33739:17:0;;;;;;;;;-1:-1:-1;;;33739:17:0;;;;;-1:-1:-1;;;33739:17:0;;;;;-1:-1:-1;;;33739:17:0;;;;;-1:-1:-1;;;33739:17:0;;;;;;;;;;3717:14:1;3758:15;;;3740:34;;3810:15;;;3805:2;3790:18;;3783:43;3862:15;;;3842:18;;;3835:43;;;;3914:15;;3909:2;3894:18;;3887:43;3967:15;;;3961:3;3946:19;;3939:44;3694:3;3679:19;33739:17:0;3458:531:1;42799:333:0;;;;;;;;;;-1:-1:-1;42799:333:0;;;;;:::i;:::-;;:::i;47011:127::-;;;;;;;;;;-1:-1:-1;47011:127:0;;;;;:::i;:::-;;:::i;33823:43::-;;;;;;;;;;-1:-1:-1;33823:43:0;;;;;;-1:-1:-1;;;;;33823:43:0;;;;-1:-1:-1;;;33823:43:0;;;;;-1:-1:-1;;;33823:43:0;;;;;-1:-1:-1;;;33823:43:0;;;;;;;;;;;;;-1:-1:-1;;;;;4804:15:1;;;4786:34;;4856:15;;;4851:2;4836:18;;4829:43;4908:15;;;4888:18;;;4881:43;;;;4960:15;;;4955:2;4940:18;;4933:43;5020:14;;5013:22;5007:3;4992:19;;4985:51;4736:3;4721:19;33823:43:0;4504:538:1;5630:127:0;;;;;;;;;;-1:-1:-1;5630:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5731:18:0;5704:7;5731:18;;;;;;;;;;;;5630:127;13244:150;;;;;;;;;;;;;:::i;47383:112::-;;;;;;;;;;;;;:::i;33528:51::-;;;;;;;;;;-1:-1:-1;33528:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45064:541;;;;;;;;;;-1:-1:-1;45064:541:0;;;;;:::i;:::-;;:::i;46385:161::-;;;;;;;;;;-1:-1:-1;46385:161:0;;;;;:::i;:::-;;:::i;13030:79::-;;;;;;;;;;-1:-1:-1;13095:6:0;;-1:-1:-1;;;;;13095:6:0;13030:79;;4549:104;;;;;;;;;;;;;:::i;34217:42::-;;;;;;;;;;;;34254:5;34217:42;;;;;-1:-1:-1;;;;;5787:31:1;;;5769:50;;5757:2;5742:18;34217:42:0;5625:200:1;8882:436:0;;;;;;;;;;-1:-1:-1;8882:436:0;;;;;:::i;:::-;;:::i;33667:31::-;;;;;;;;;;-1:-1:-1;33667:31:0;;;;-1:-1:-1;;;;;33667:31:0;;;34117:19;;;;;;;;;;-1:-1:-1;34117:19:0;;;;-1:-1:-1;;;;;34117:19:0;;;46866:140;;;;;;;;;;-1:-1:-1;46866:140:0;;;;;:::i;:::-;;:::i;5963:193::-;;;;;;;;;;-1:-1:-1;5963:193:0;;;;;:::i;:::-;;:::i;47762:335::-;;;;;;;;;;-1:-1:-1;47762:335:0;;;;;:::i;:::-;;:::i;47146:225::-;;;;;;;;;;-1:-1:-1;47146:225:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;6079:32:1;;;6061:51;;6143:2;6128:18;;6121:34;;;;6171:18;;;6164:34;6229:2;6214:18;;6207:34;6048:3;6033:19;47146:225:0;5830:417:1;34177:29:0;;;;;;;;;;;;;;;33616:42;;;;;;;;;;-1:-1:-1;33616:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44152:352;;;;;;;;;;-1:-1:-1;44152:352:0;;;;;:::i;:::-;;:::i;46085:111::-;;;;;;;;;;-1:-1:-1;46085:111:0;;;;;:::i;:::-;;:::i;44512:544::-;;;;;;;;;;-1:-1:-1;44512:544:0;;;;;:::i;:::-;;:::i;43140:364::-;;;;;;;;;;-1:-1:-1;43140:364:0;;;;;:::i;:::-;;:::i;47635:119::-;;;;;;;;;;-1:-1:-1;47635:119:0;;;;;:::i;:::-;;:::i;33763:18::-;;;;;;;;;;-1:-1:-1;33763:18:0;;;;;;;;;-1:-1:-1;;;33763:18:0;;;;;-1:-1:-1;;;33763:18:0;;;;;-1:-1:-1;;;33763:18:0;;;;;-1:-1:-1;;;33763:18:0;;;;;;33472:49;;;;;;;;;;-1:-1:-1;33472:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6219:151;;;;;;;;;;-1:-1:-1;6219:151:0;;;;;:::i;:::-;;:::i;34075:33::-;;;;;;;;;;;;;;;;33906;;;;;;;;;;-1:-1:-1;33906:33:0;;;;;;;;33875:24;;;;;;;;;;-1:-1:-1;33875:24:0;;;;-1:-1:-1;;;;;33875:24:0;;;;-1:-1:-1;;;33875:24:0;;;;;;;;;-1:-1:-1;;;;;7136:15:1;;;7118:34;;7188:15;;;;7183:2;7168:18;;7161:43;7038:18;33875:24:0;6891:319:1;13402:244:0;;;;;;;;;;-1:-1:-1;13402:244:0;;;;;:::i;:::-;;:::i;45747:330::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;;;;;;;;;45803:14:::1;:22:::0;;-1:-1:-1;;45803:22:0::1;::::0;;-1:-1:-1;;;;;;;;;45820:5:0::1;-1:-1:-1::0;;;;;;;45872:14:0::1;45889:13;5547:12:::0;;;5459:108;45889:13:::1;-1:-1:-1::0;;;;;45913:44:0;::::1;::::0;;;45968:21:::1;::::0;::::1;:39:::0;;;-1:-1:-1;;;46018:20:0;::::1;;:8;:20:::0;46054:15:::1;::::0;45872:30;;-1:-1:-1;46054:15:0::1;::::0;45913:26:::1;::::0;46054:15:::1;45792:285;;45747:330::o:0;43842:302::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;43977:14:::1;5384:2:::0;43977::::1;:14;:::i;:::-;43970:4;43950:13;5547:12:::0;;;5459:108;43950:13:::1;:17;::::0;43966:1:::1;43950:17;:::i;:::-;:24;;;;:::i;:::-;43949:43;;;;:::i;:::-;43931:14;-1:-1:-1::0;;;;;43931:61:0::1;;;43923:81;;;::::0;-1:-1:-1;;;43923:81:0;;9723:2:1;43923:81:0::1;::::0;::::1;9705:21:1::0;9762:1;9742:18;;;9735:29;-1:-1:-1;;;9780:18:1;;;9773:37;9827:18;;43923:81:0::1;9521:330:1::0;43923:81:0::1;44064:14;5384:2:::0;44064::::1;:14;:::i;:::-;44046:33;::::0;-1:-1:-1;;;;;44046:33:0;::::1;;:::i;:::-;44015:8;:65:::0;;-1:-1:-1;;;;;44015:65:0;;::::1;-1:-1:-1::0;;;44015:65:0;;::::1;::::0;::::1;;::::0;;;;44096:40:::1;::::0;44115:20;;;::::1;;10002:66:1::0;;44096:40:0::1;::::0;9990:2:1;9975:18;44096:40:0::1;;;;;;;;43842:302:::0;:::o;4330:100::-;4384:13;4417:5;4410:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4330:100;:::o;6690:201::-;6773:4;316:10;6829:32;316:10;6845:7;6854:6;6829:8;:32::i;:::-;6879:4;6872:11;;;6690:201;;;;;:::o;43512:322::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;43652:14:::1;5384:2:::0;43652::::1;:14;:::i;:::-;43645:4;43625:13;5547:12:::0;;;5459:108;43625:13:::1;:17;::::0;43641:1:::1;43625:17;:::i;:::-;:24;;;;:::i;:::-;43624:43;;;;:::i;:::-;43606:14;-1:-1:-1::0;;;;;43606:61:0::1;;;43598:81;;;::::0;-1:-1:-1;;;43598:81:0;;9723:2:1;43598:81:0::1;::::0;::::1;9705:21:1::0;9762:1;9742:18;;;9735:29;-1:-1:-1;;;9780:18:1;;;9773:37;9827:18;;43598:81:0::1;9521:330:1::0;43598:81:0::1;43744:14;5384:2:::0;43744::::1;:14;:::i;:::-;43726:33;::::0;-1:-1:-1;;;;;43726:33:0;::::1;;:::i;:::-;43690:8;:70:::0;;-1:-1:-1;;;;;;43690:70:0::1;-1:-1:-1::0;;;;;43690:70:0;;;::::1;::::0;;::::1;::::0;;43776:50:::1;::::0;10002:66:1;;;43776:50:0::1;::::0;9990:2:1;9975:18;43776:50:0::1;9856:218:1::0;49029:439:0;49102:7;49122:20;49145:30;49168:6;49145:22;:30::i;:::-;49210:16;;;49224:1;49210:16;;;;;;;;49122:53;;-1:-1:-1;49186:21:0;;49210:16;;;;;;;;;;-1:-1:-1;;49247:9:0;;:16;;;-1:-1:-1;;;49247:16:0;;;;49186:40;;-1:-1:-1;;;;;;49247:9:0;;;;:14;;-1:-1:-1;49247:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49237:4;49242:1;49237:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;49237:26:0;;;-1:-1:-1;;;;;49237:26:0;;;;;49292:4;49274;49279:1;49274:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49274:23:0;;;:7;;;;;;;;;:23;49335:9;;:43;;-1:-1:-1;;;49335:43:0;;49308:24;;49335:9;;;;;:23;;:43;;49359:12;;49373:4;;49335:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49335:43:0;;;;;;;;;;;;:::i;:::-;49424:6;:15;49308:70;;-1:-1:-1;34254:5:0;;49424:20;;-1:-1:-1;;;49424:15:0;;;;49442:2;49424:20;:::i;:::-;49410:35;;:7;49418:1;49410:10;;;;;;;;:::i;:::-;;;;;;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;49396:7;49404:1;49396:10;;;;;;;;:::i;:::-;;;;;;;:64;;;;:::i;:::-;49389:71;49029:439;-1:-1:-1;;;;;49029:439:0:o;45613:126::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;45674:7:::1;::::0;::::1;;45673:8;45665:41;;;::::0;-1:-1:-1;;;45665:41:0;;13413:2:1;45665:41:0::1;::::0;::::1;13395:21:1::0;13452:2;13432:18;;;13425:30;-1:-1:-1;;;13471:18:1;;;13464:50;13531:18;;45665:41:0::1;13211:344:1::0;45665:41:0::1;45717:7;:14:::0;;-1:-1:-1;;45717:14:0::1;45727:4;45717:14;::::0;;45613:126::o;46204:173::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46292:22:0;::::1;46284:47;;;::::0;-1:-1:-1;;;46284:47:0;;13762:2:1;46284:47:0::1;::::0;::::1;13744:21:1::0;13801:2;13781:18;;;13774:30;-1:-1:-1;;;13820:18:1;;;13813:42;13872:18;;46284:47:0::1;13560:336:1::0;46284:47:0::1;46342:16;:27:::0;;-1:-1:-1;;;;;;46342:27:0::1;-1:-1:-1::0;;;;;46342:27:0;;;::::1;::::0;;;::::1;::::0;;46204:173::o;7471:261::-;7568:4;316:10;7626:38;7642:4;316:10;7657:6;7626:15;:38::i;:::-;7675:27;7685:4;7691:2;7695:6;7675:9;:27::i;:::-;-1:-1:-1;7720:4:0;;7471:261;-1:-1:-1;;;;7471:261:0:o;46724:134::-;46814:8;;:36;;;-1:-1:-1;;;46814:36:0;;;;46787:7;;-1:-1:-1;;;;;46814:8:0;;:34;;:36;;;;;;;;;;;;;;:8;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46807:43;;46724:134;:::o;47503:123::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;47580:8:::1;::::0;:38:::1;::::0;-1:-1:-1;;;47580:38:0;;-1:-1:-1;;;;;1248:32:1;;;47580:38:0::1;::::0;::::1;1230:51:1::0;47580:8:0;;::::1;::::0;:29:::1;::::0;1203:18:1;;47580:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47503:123:::0;:::o;8141:238::-;8229:4;316:10;8285:64;316:10;8301:7;8338:10;8310:25;316:10;8301:7;8310:9;:25::i;:::-;:38;;;;:::i;:::-;8285:8;:64::i;48637:384::-;48763:16;;;48777:1;48763:16;;;;;;;;48719:7;;;;48763:16;48777:1;48763:16;;;;;;;;-1:-1:-1;;48800:9:0;;:16;;;-1:-1:-1;;;48800:16:0;;;;48739:40;;-1:-1:-1;;;;;;48800:9:0;;;;:14;;-1:-1:-1;48800:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48790:4;48795:1;48790:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;48790:26:0;;;-1:-1:-1;;;;;48790:26:0;;;;;48845:4;48827;48832:1;48827:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48827:23:0;;;:7;;;;;;;;;:23;48888:9;;:43;;-1:-1:-1;;;48888:43:0;;48861:24;;48888:9;;;;;:23;;:43;;48912:12;;48926:4;;48888:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48888:43:0;;;;;;;;;;;;:::i;:::-;48977:6;:15;48861:70;;-1:-1:-1;34254:5:0;;48977:20;;-1:-1:-1;;;48977:15:0;;;;48995:2;48977:20;:::i;:::-;48963:35;;:7;48971:1;48963:10;;;;;;;;:::i;:::-;;;;;;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;48949:7;48957:1;48949:10;;;;;;;;:::i;:::-;;;;;;;:64;;;;:::i;:::-;48942:71;48637:384;-1:-1:-1;;;;48637:384:0:o;46620:96::-;46657:8;;:51;;-1:-1:-1;;;46657:51:0;;46689:10;46657:51;;;14404::1;46657:8:0;14471:18:1;;;14464:50;-1:-1:-1;;;;;46657:8:0;;;;:23;;14377:18:1;;46657:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46620:96::o;42799:333::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42901:22:0;::::1;42893:47;;;::::0;-1:-1:-1;;;42893:47:0;;14977:2:1;42893:47:0::1;::::0;::::1;14959:21:1::0;15016:2;14996:18;;;14989:30;-1:-1:-1;;;15035:18:1;;;15028:42;15087:18;;42893:47:0::1;14775:336:1::0;42893:47:0::1;42979:4;-1:-1:-1::0;;;;;42959:25:0;::::1;::::0;42951:64:::1;;;::::0;-1:-1:-1;;;42951:64:0;;15318:2:1;42951:64:0::1;::::0;::::1;15300:21:1::0;15357:2;15337:18;;;15330:30;15396:28;15376:18;;;15369:56;15442:18;;42951:64:0::1;15116:350:1::0;42951:64:0::1;-1:-1:-1::0;;;;;43026:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:40;;-1:-1:-1;;43026:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43082:42;;14404:51:1;;;14471:18;;;14464:50;43082:42:0::1;::::0;14377:18:1;43082:42:0::1;;;;;;;;42799:333:::0;;:::o;47011:127::-;47102:8;;:31;;-1:-1:-1;;;47102:31:0;;-1:-1:-1;;;;;1248:32:1;;;47102:31:0;;;1230:51:1;47081:7:0;;47102:8;;:22;;1203:18:1;;47102:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13244:150::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;13337:6:::1;::::0;13316:40:::1;::::0;13353:1:::1;::::0;-1:-1:-1;;;;;13337:6:0::1;::::0;13316:40:::1;::::0;13353:1;;13316:40:::1;13367:6;:19:::0;;-1:-1:-1;;;;;;13367:19:0::1;::::0;;13244:150::o;47383:112::-;47464:8;;:23;;;-1:-1:-1;;;47464:23:0;;;;47437:7;;-1:-1:-1;;;;;47464:8:0;;:21;;:23;;;;;;;;;;;;;;:8;:23;;;;;;;;;;;;;;45064:541;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;45224:34:0::1;::::0;;::::1;::::0;;45269;;::::1;-1:-1:-1::0;;;45269:34:0;;;;45314:22;;::::1;-1:-1:-1::0;;;45314:22:0;45347:32;;::::1;-1:-1:-1::0;;;45347:32:0;;45314:22;45407:29:::1;45269:34:::0;45224;45407:29:::1;:::i;:::-;:39;;;;:::i;:::-;:54;;;;:::i;:::-;45390:71;;:14;::::0;::::1;:71:::0;;;45499:5:::1;-1:-1:-1::0;45480:24:0::1;45472:55;;;::::0;-1:-1:-1;;;45472:55:0;;15962:2:1;45472:55:0::1;::::0;::::1;15944:21:1::0;16001:2;15981:18;;;15974:30;-1:-1:-1;;;16020:18:1;;;16013:48;16078:18;;45472:55:0::1;15760:342:1::0;45472:55:0::1;45557:14;::::0;::::1;::::0;45543:29:::1;::::0;16282:14:1;16270:27;;;16252:46;;45543:29:0::1;::::0;16240:2:1;16225:18;45543:29:0::1;;;;;;;45583:14:::0;;:6:::1;:14:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;45583:14:0::1;-1:-1:-1::0;;;;45583:14:0;;::::1;-1:-1:-1::0;;;45583:14:0::1;-1:-1:-1::0;;;;45583:14:0;;::::1;-1:-1:-1::0;;;45583:14:0::1;::::0;;;;-1:-1:-1;;;;45583:14:0;;::::1;-1:-1:-1::0;;;45583:14:0::1;-1:-1:-1::0;;45583:14:0;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;::::1;;::::0;;-1:-1:-1;;;;45064:541:0:o;46385:161::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46467:22:0;::::1;46459:47;;;::::0;-1:-1:-1;;;46459:47:0;;13762:2:1;46459:47:0::1;::::0;::::1;13744:21:1::0;13801:2;13781:18;;;13774:30;-1:-1:-1;;;13820:18:1;;;13813:42;13872:18;;46459:47:0::1;13560:336:1::0;46459:47:0::1;46517:10;:21:::0;;-1:-1:-1;;;;;;46517:21:0::1;-1:-1:-1::0;;;;;46517:21:0;;;::::1;::::0;;;::::1;::::0;;46385:161::o;4549:104::-;4605:13;4638:7;4631:14;;;;;:::i;8882:436::-;8975:4;316:10;8975:4;9058:25;316:10;9075:7;9058:9;:25::i;:::-;9031:52;;9122:15;9102:16;:35;;9094:85;;;;-1:-1:-1;;;9094:85:0;;16511:2:1;9094:85:0;;;16493:21:1;16550:2;16530:18;;;16523:30;16589:34;16569:18;;;16562:62;-1:-1:-1;;;16640:18:1;;;16633:35;16685:19;;9094:85:0;16309:401:1;9094:85:0;9215:60;9224:5;9231:7;9259:15;9240:16;:34;9215:8;:60::i;46866:140::-;46959:8;;:40;;-1:-1:-1;;;46959:40:0;;-1:-1:-1;;;;;1248:32:1;;;46959:40:0;;;1230:51:1;46935:7:0;;46959:8;;:31;;1203:18:1;;46959:40:0;1065:222:1;5963:193:0;6042:4;316:10;6098:28;316:10;6115:2;6119:6;6098:9;:28::i;47762:335::-;47850:8;;:63;;-1:-1:-1;;;47850:63:0;;47901:10;47850:63;;;1230:51:1;47819:28:0;;-1:-1:-1;;;;;47850:8:0;;:42;;1203:18:1;;47850:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47819:94;-1:-1:-1;47927:24:0;;47924:166;;47967:58;47981:20;48003:9;48014:10;47967:13;:58::i;:::-;47808:289;47762:335;:::o;47924:166::-;48058:20;;-1:-1:-1;;;48058:20:0;;17141:2:1;48058:20:0;;;17123:21:1;17180:2;17160:18;;;17153:30;-1:-1:-1;;;17199:18:1;;;17192:40;17249:18;;48058:20:0;16939:334:1;47146:225:0;47335:8;;:28;;-1:-1:-1;;;47335:28:0;;-1:-1:-1;;;;;1248:32:1;;;47335:28:0;;;1230:51:1;47242:7:0;;;;;;;;47335:8;;:19;;1203:18:1;;47335:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47328:35;;;;;;;;47146:225;;;;;:::o;44152:352::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;44276:6:::1;44255:13;5547:12:::0;;;5459:108;44255:13:::1;:17;::::0;44271:1:::1;44255:17;:::i;:::-;44254:28;;;;:::i;:::-;44241:9;:41;;44233:107;;;::::0;-1:-1:-1;;;44233:107:0;;17920:2:1;44233:107:0::1;::::0;::::1;17902:21:1::0;17959:2;17939:18;;;17932:30;17998:34;17978:18;;;17971:62;-1:-1:-1;;;18049:18:1;;;18042:51;18110:19;;44233:107:0::1;17718:417:1::0;44233:107:0::1;44394:4;44373:13;5547:12:::0;;;5459:108;44373:13:::1;:17;::::0;44389:1:::1;44373:17;:::i;:::-;44372:26;;;;:::i;:::-;44359:9;:39;;44351:104;;;::::0;-1:-1:-1;;;44351:104:0;;18342:2:1;44351:104:0::1;::::0;::::1;18324:21:1::0;18381:2;18361:18;;;18354:30;18420:34;18400:18;;;18393:62;-1:-1:-1;;;18471:18:1;;;18464:50;18531:19;;44351:104:0::1;18140:416:1::0;44351:104:0::1;44466:18;:30:::0;44152:352::o;46085:111::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;46163:14:::1;:25:::0;;-1:-1:-1;;46163:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46085:111::o;44512:544::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;44673:34:0::1;::::0;;::::1;::::0;;44718;;::::1;-1:-1:-1::0;;;44718:34:0;;;;44763:22;;::::1;-1:-1:-1::0;;;44763:22:0;44796:32;;::::1;-1:-1:-1::0;;;44796:32:0;;44763:22;44856:29:::1;44718:34:::0;44673;44856:29:::1;:::i;:::-;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44839:71;;:14;::::0;::::1;:71:::0;;;44948:5:::1;-1:-1:-1::0;44929:24:0::1;44921:55;;;::::0;-1:-1:-1;;;44921:55:0;;15962:2:1;44921:55:0::1;::::0;::::1;15944:21:1::0;16001:2;15981:18;;;15974:30;-1:-1:-1;;;16020:18:1;;;16013:48;16078:18;;44921:55:0::1;15760:342:1::0;44921:55:0::1;45007:14;::::0;::::1;::::0;44992:30:::1;::::0;16282:14:1;16270:27;;;16252:46;;44992:30:0::1;::::0;16240:2:1;16225:18;44992:30:0::1;;;;;;;45033:15:::0;;:7:::1;:15:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;45033:15:0::1;-1:-1:-1::0;;;;45033:15:0;;::::1;-1:-1:-1::0;;;45033:15:0::1;-1:-1:-1::0;;;;45033:15:0;;::::1;-1:-1:-1::0;;;45033:15:0::1;::::0;;;;-1:-1:-1;;;;45033:15:0;;::::1;-1:-1:-1::0;;;45033:15:0::1;-1:-1:-1::0;;45033:15:0;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;::::1;;::::0;;-1:-1:-1;;;;44512:544:0:o;43140:364::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43244:22:0;::::1;43236:47;;;::::0;-1:-1:-1;;;43236:47:0;;14977:2:1;43236:47:0::1;::::0;::::1;14959:21:1::0;15016:2;14996:18;;;14989:30;-1:-1:-1;;;15035:18:1;;;15028:42;15087:18;;43236:47:0::1;14775:336:1::0;43236:47:0::1;43298:11;43294:90;;43345:4;::::0;-1:-1:-1;;;;;43345:4:0;;::::1;43333:16:::0;;::::1;::::0;43325:47:::1;;;::::0;-1:-1:-1;;;43325:47:0;;18763:2:1;43325:47:0::1;::::0;::::1;18745:21:1::0;18802:2;18782:18;;;18775:30;-1:-1:-1;;;18821:18:1;;;18814:48;18879:18;;43325:47:0::1;18561:342:1::0;43325:47:0::1;-1:-1:-1::0;;;;;43394:28:0;::::1;;::::0;;;:18:::1;:28;::::0;;;;;;;;:42;;-1:-1:-1;;43394:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43452:44;;14404:51:1;;;14471:18;;;14464:50;43452:44:0::1;::::0;14377:18:1;43452:44:0::1;14220:300:1::0;47635:119:0;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;47710:8:::1;::::0;:36:::1;::::0;-1:-1:-1;;;47710:36:0;;-1:-1:-1;;;;;1248:32:1;;;47710:36:0::1;::::0;::::1;1230:51:1::0;47710:8:0;;::::1;::::0;:27:::1;::::0;1203:18:1;;47710:36:0::1;1065:222:1::0;6219:151:0;-1:-1:-1;;;;;6335:18:0;;;6308:7;6335:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6219:151::o;13402:244::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13491:22:0;::::1;13483:73;;;::::0;-1:-1:-1;;;13483:73:0;;19110:2:1;13483:73:0::1;::::0;::::1;19092:21:1::0;19149:2;19129:18;;;19122:30;19188:34;19168:18;;;19161:62;-1:-1:-1;;;19239:18:1;;;19232:36;19285:19;;13483:73:0::1;18908:402:1::0;13483:73:0::1;13593:6;::::0;13572:38:::1;::::0;-1:-1:-1;;;;;13572:38:0;;::::1;::::0;13593:6:::1;::::0;13572:38:::1;::::0;13593:6:::1;::::0;13572:38:::1;13621:6;:17:::0;;-1:-1:-1;;;;;;13621:17:0::1;-1:-1:-1::0;;;;;13621:17:0;;;::::1;::::0;;;::::1;::::0;;13402:244::o;11643:346::-;-1:-1:-1;;;;;11745:19:0;;11737:68;;;;-1:-1:-1;;;11737:68:0;;19517:2:1;11737:68:0;;;19499:21:1;19556:2;19536:18;;;19529:30;19595:34;19575:18;;;19568:62;-1:-1:-1;;;19646:18:1;;;19639:34;19690:19;;11737:68:0;19315:400:1;11737:68:0;-1:-1:-1;;;;;11824:21:0;;11816:68;;;;-1:-1:-1;;;11816:68:0;;19922:2:1;11816:68:0;;;19904:21:1;19961:2;19941:18;;;19934:30;20000:34;19980:18;;;19973:62;-1:-1:-1;;;20051:18:1;;;20044:32;20093:19;;11816:68:0;19720:398:1;11816:68:0;-1:-1:-1;;;;;11897:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11949:32;;2146:25:1;;;11949:32:0;;2119:18:1;11949:32:0;;;;;;;11643:346;;;:::o;12280:419::-;12381:24;12408:25;12418:5;12425:7;12408:9;:25::i;:::-;12381:52;;-1:-1:-1;;12448:16:0;:37;12444:248;;12530:6;12510:16;:26;;12502:68;;;;-1:-1:-1;;;12502:68:0;;20325:2:1;12502:68:0;;;20307:21:1;20364:2;20344:18;;;20337:30;20403:31;20383:18;;;20376:59;20452:18;;12502:68:0;20123:353:1;12502:68:0;12614:51;12623:5;12630:7;12658:6;12639:16;:25;12614:8;:51::i;:::-;12370:329;12280:419;;;:::o;37485:528::-;-1:-1:-1;;;;;37631:22:0;;;;;;:16;:22;;;;;;;;37630:23;:48;;;;-1:-1:-1;;;;;;37658:20:0;;;;;;:16;:20;;;;;;;;37657:21;37630:48;37627:213;;;37702:7;;;;37694:38;;;;-1:-1:-1;;;37694:38:0;;20683:2:1;37694:38:0;;;20665:21:1;20722:2;20702:18;;;20695:30;-1:-1:-1;;;20741:18:1;;;20734:48;20799:18;;37694:38:0;20481:342:1;37694:38:0;37747:29;37759:4;37765:2;37769:6;37747:11;:29::i;:::-;37801:27;37811:4;37817:2;37821:6;37801:9;:27::i;:::-;37791:37;;;;:::i;:::-;;;37627:213;37852:31;37868:4;37873:2;37876:6;37852:15;:31::i;:::-;37896:8;;-1:-1:-1;;;;;37896:8:0;:19;37924:2;37929:13;37924:2;-1:-1:-1;;;;;5731:18:0;5704:7;5731:18;;;;;;;;;;;;5630:127;37929:13;37896:47;;-1:-1:-1;;;;;;37896:47:0;;;;;;;-1:-1:-1;;;;;21036:32:1;;;37896:47:0;;;21018:51:1;21085:18;;;21078:34;20991:18;;37896:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37954:8:0;;-1:-1:-1;;;;;37954:8:0;;-1:-1:-1;37954:19:0;;-1:-1:-1;37982:4:0;37989:15;37982:4;-1:-1:-1;;;;;5731:18:0;5704:7;5731:18;;;;;;;;;;;;5630:127;37989:15;37954:51;;-1:-1:-1;;;;;;37954:51:0;;;;;;;-1:-1:-1;;;;;21036:32:1;;;37954:51:0;;;21018::1;21085:18;;;21078:34;20991:18;;37954:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37485:528;;;:::o;48105:501::-;48282:16;;;48296:1;48282:16;;;;;;;;48258:21;;48282:16;;;;;;;;-1:-1:-1;;48319:9:0;;:16;;;-1:-1:-1;;;48319:16:0;;;;48258:40;;-1:-1:-1;;;;;;48319:9:0;;;;:14;;-1:-1:-1;48319:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48309:4;48314:1;48309:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;48309:26:0;;;-1:-1:-1;;;;;48309:26:0;;;;;48364:4;48346;48351:1;48346:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48346:23:0;;;:7;;;;;;;;;:23;48408:9;;:190;;-1:-1:-1;;;48408:190:0;;:9;;;:60;;48476:14;;48408:190;;48506:6;;48527:4;;48554:2;;48572:15;;48408:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48189:417;48105:501;;;:::o;38021:1182::-;38107:14;;;;38104:764;;;-1:-1:-1;;;;;38159:22:0;;;38137:19;38159:22;;;:18;:22;;;;;;;;;5731:18;;;;;;;38246:36;;;;;;;38274:8;38246:36;-1:-1:-1;;;;;38246:36:0;;;;;-1:-1:-1;;;38246:36:0;;;;;;;;38321:15;;;;;:9;:15;;;;;;38159:22;;;;;5731:18;;38321:15;:34;;;;;38341:14;38340:15;38321:34;38317:540;;;38394:26;;-1:-1:-1;;;;;38384:36:0;;;;38376:56;;;;-1:-1:-1;;;38376:56:0;;21832:2:1;38376:56:0;;;21814:21:1;21871:1;21851:18;;;21844:29;-1:-1:-1;;;21889:18:1;;;21882:37;21936:18;;38376:56:0;21630:330:1;38376:56:0;38483:21;;;;-1:-1:-1;;;;;38459:45:0;:20;38468:11;38459:6;:20;:::i;:::-;:45;;38451:68;;;;-1:-1:-1;;;38451:68:0;;22167:2:1;38451:68:0;;;22149:21:1;22206:2;22186:18;;;22179:30;-1:-1:-1;;;22225:18:1;;;22218:40;22275:18;;38451:68:0;21965:334:1;38451:68:0;38317:540;;;-1:-1:-1;;;;;38580:13:0;;;;;;:9;:13;;;;;;;;:42;;;;-1:-1:-1;;;;;;38598:24:0;;;;;;:18;:24;;;;;;;;38597:25;38580:42;38576:281;;;38661:26;;-1:-1:-1;;;;;38651:36:0;;;;38643:56;;;;-1:-1:-1;;;38643:56:0;;21832:2:1;38643:56:0;;;21814:21:1;21871:1;21851:18;;;21844:29;-1:-1:-1;;;21889:18:1;;;21882:37;21936:18;;38643:56:0;21630:330:1;38576:281:0;38738:14;38734:123;;38805:21;;;;-1:-1:-1;;;;;38781:45:0;:20;38790:11;38781:6;:20;:::i;:::-;:45;;38773:68;;;;-1:-1:-1;;;38773:68:0;;22167:2:1;38773:68:0;;;22149:21:1;22206:2;22186:18;;;22179:30;-1:-1:-1;;;22225:18:1;;;22218:40;22275:18;;38773:68:0;21965:334:1;38773:68:0;38122:746;;;38104:764;38884:14;;;;38880:316;;;-1:-1:-1;;;;;38917:13:0;;;;;;:9;:13;;;;;;;;38914:271;;;-1:-1:-1;;;;;38958:30:0;;;;;;:24;:30;;;;;;38991:12;-1:-1:-1;38950:66:0;;;;-1:-1:-1;;;38950:66:0;;22506:2:1;38950:66:0;;;22488:21:1;22545:1;22525:18;;;22518:29;-1:-1:-1;;;22563:18:1;;;22556:38;22611:18;;38950:66:0;22304:331:1;38950:66:0;38021:1182;;;:::o;38914:271::-;-1:-1:-1;;;;;;39057:28:0;;;;;:24;:28;;;;;;39088:12;39057:43;;;;39144:9;39119:35;;;;:50;-1:-1:-1;38021:1182:0:o;39211:1177::-;39342:18;;39332:4;39290:7;5731:18;;;;;;;;;;;39290:7;;-1:-1:-1;39314:46:0;:66;;;;-1:-1:-1;;;;;;39365:15:0;;;;;;:9;:15;;;;;;;;39364:16;39314:66;39311:110;;;39397:12;:10;:12::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39502:13:0;;;;:9;:13;;;;;;;;39498:126;;;-1:-1:-1;39531:15:0;;;;;;;;39539:7;39531:15;;;;;;;-1:-1:-1;;;39531:15:0;;;;;;;;-1:-1:-1;;;39531:15:0;;;;;;;;;;;-1:-1:-1;;;39531:15:0;;;;;;;;-1:-1:-1;;;39531:15:0;;;;;;;;;39498:126;;;-1:-1:-1;;;;;39567:15:0;;;;;;:9;:15;;;;;;;;39564:60;;;-1:-1:-1;39598:14:0;;;;;;;;39606:6;39598:14;;;;;;;-1:-1:-1;;;39598:14:0;;;;;;;;-1:-1:-1;;;39598:14:0;;;;;;;;;;;-1:-1:-1;;;39598:14:0;;;;;;;;-1:-1:-1;;;39598:14:0;;;;;;;;;39564:60;39639:14;;;;:18;;;39636:714;;39673:64;;;;;;;;39725:12;39673:64;-1:-1:-1;;;;;39673:64:0;;;;;-1:-1:-1;;;39673:64:0;;;;;;;;-1:-1:-1;;;39673:64:0;;;;;;;;;;;-1:-1:-1;;;39673:64:0;;;;;;;;;;;;;;;;;;;;;;;39775:14;;;34254:5;;39766:23;;;;:6;:23;:::i;:::-;:37;;;;:::i;:::-;39752:52;;39911:3;39894:5;:14;;;39867:41;;39873:5;:18;;;39867:24;;:3;:24;;;;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;39819:18;:37;;:96;;;;;;;:::i;:::-;-1:-1:-1;;;;;39819:96:0;;;-1:-1:-1;40005:14:0;;;;39984:18;;40022:3;;39978:41;;;;;:24;;;:3;:24;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;39930:96;;:18;;:96;;;;;:::i;:::-;-1:-1:-1;;;;;39930:96:0;;;-1:-1:-1;40104:14:0;;;;40089:12;;;;40121:3;;40083:35;;;;;:18;;;:3;:18;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;40041:18;:31;;:84;;;;;;;:::i;:::-;-1:-1:-1;;;;;40041:84:0;;;-1:-1:-1;40213:14:0;;;;40193:17;;;;40230:3;;40187:40;;;;;:23;;;:3;:23;:::i;:::-;:40;;;;:::i;:::-;:46;;;;:::i;:::-;40140:18;:36;;:94;;;;;;;:::i;:::-;-1:-1:-1;;;;;40140:94:0;;;;;;40249:33;;:12;:33;;;;;;;;;;;;;;;;-1:-1:-1;;;40249:33:0;-1:-1:-1;;;;;40249:33:0;;;-1:-1:-1;;;40249:33:0;;;;;-1:-1:-1;;;;;40249:33:0;;;-1:-1:-1;;;40249:33:0;-1:-1:-1;;;;;;40249:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40249:33:0;;;;;;;;;40297:41;;-1:-1:-1;40313:4:0;;40327;;40297:41;;:15;:41::i;:::-;39658:692;39636:714;-1:-1:-1;;;;;;40370:10:0;;39211:1177;-1:-1:-1;;;;39211:1177:0:o;9788:705::-;-1:-1:-1;;;;;9885:18:0;;9877:68;;;;-1:-1:-1;;;9877:68:0;;23527:2:1;9877:68:0;;;23509:21:1;23566:2;23546:18;;;23539:30;23605:34;23585:18;;;23578:62;-1:-1:-1;;;23656:18:1;;;23649:35;23701:19;;9877:68:0;23325:401:1;9877:68:0;-1:-1:-1;;;;;9964:16:0;;9956:64;;;;-1:-1:-1;;;9956:64:0;;23933:2:1;9956:64:0;;;23915:21:1;23972:2;23952:18;;;23945:30;24011:34;23991:18;;;23984:62;-1:-1:-1;;;24062:18:1;;;24055:33;24105:19;;9956:64:0;23731:399:1;9956:64:0;-1:-1:-1;;;;;10055:15:0;;10033:19;10055:15;;;;;;;;;;;10089:21;;;;10081:72;;;;-1:-1:-1;;;10081:72:0;;24337:2:1;10081:72:0;;;24319:21:1;24376:2;24356:18;;;24349:30;24415:34;24395:18;;;24388:62;-1:-1:-1;;;24466:18:1;;;24459:36;24512:19;;10081:72:0;24135:402:1;10081:72:0;-1:-1:-1;;;;;10189:15:0;;;:9;:15;;;;;;;;;;;10207:20;;;10189:38;;10407:13;;;;;;;;;;:23;;;;;;10459:26;;2146:25:1;;;10407:13:0;;10459:26;;2119:18:1;10459:26:0;;;;;;;9866:627;9788:705;;;:::o;40782:1985::-;40869:4;40825:23;5731:18;;;;;;;;;;;;40886:61;;;;;;;40935:12;40886:61;-1:-1:-1;;;;;40886:61:0;;;;;;-1:-1:-1;;;40886:61:0;;;;;;;;;;-1:-1:-1;;;40886:61:0;;;;;;;;;;-1:-1:-1;;;40886:61:0;;;;;;;;;;;;;;;;;;;;5731:18;;40886:61;;40825:23;;40886:61;40986:71;;40886:61;40986:71;:::i;:::-;:102;;;;:::i;:::-;:138;;;;:::i;:::-;-1:-1:-1;;;;;40958:166:0;;-1:-1:-1;41148:20:0;;;:46;;-1:-1:-1;41172:22:0;;41148:46;41145:60;;;41197:7;;;40782:1985::o;41145:60::-;41238:18;;:23;;41259:2;41238:23;:::i;:::-;41220:15;:41;41217:113;;;41295:18;;:23;;41316:2;41295:23;:::i;:::-;41277:41;;41217:113;41345:34;;;;-1:-1:-1;;;;;41345:38:0;;41342:410;;41399:23;41480:17;41443:15;:34;;;-1:-1:-1;;;;;41425:52:0;:15;:52;;;;:::i;:::-;:72;;;;:::i;:::-;41543:4;;41399:98;;-1:-1:-1;41512:53:0;;41536:4;;-1:-1:-1;;;;;41543:4:0;41399:98;41512:15;:53::i;:::-;41599:4;;;;;;;;;-1:-1:-1;;;;;41599:4:0;-1:-1:-1;;;;;41584:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41580:42;41636:34;41655:15;41636:34;;:::i;:::-;;;41706:15;:34;;;-1:-1:-1;;;;;41685:55:0;;;;;;:::i;:::-;;;41384:368;41342:410;41767:19;;41764:762;;41804:33;41821:15;41804:16;:33::i;:::-;41957:28;;;;41887:21;;41866:18;;-1:-1:-1;;;;;41957:32:0;;41954:175;;42022:10;;42058:28;;;;-1:-1:-1;;;;;42022:10:0;;;;42089:17;;42045:41;;-1:-1:-1;;;;;42045:41:0;:10;:41;:::i;:::-;:61;;;;:::i;:::-;42022:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42009:102:0;;-1:-1:-1;;41954:175:0;42148:33;;;;-1:-1:-1;;;;;42148:37:0;;42145:191;;42226:8;;42261:33;;;;-1:-1:-1;;;;;42226:8:0;;;;42296:17;;42248:46;;-1:-1:-1;;;;;42248:46:0;:10;:46;:::i;:::-;:65;;;;:::i;:::-;42218:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42205:113:0;;-1:-1:-1;;42145:191:0;42365:21;;-1:-1:-1;42406:14:0;;42403:112;;42453:16;;:44;;-1:-1:-1;;;;;42453:16:0;;;;42482:10;;42453:44;;;;42482:10;42453:16;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42440:57:0;;-1:-1:-1;;42403:112:0;41787:739;;41764:762;-1:-1:-1;42575:1:0;42538:34;;;:38;;;42587;;;42636:28;;;:32;;;42679:33;;;:37;;;42729:12;:30;;;;;;;-1:-1:-1;;42729:30:0;;;;;;;;;;-1:-1:-1;40782:1985:0:o;40396:378::-;40488:16;;;40502:1;40488:16;;;;;;;;40464:21;;40488:16;;;;;;;;;;-1:-1:-1;40488:16:0;40464:40;;40533:4;40515;40520:1;40515:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;40515:23:0;;;-1:-1:-1;;;;;40515:23:0;;;;;40559:4;40549;40554:1;40549:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40549:14:0;;;:7;;;;;;;;;:14;40576:9;;:190;;-1:-1:-1;;;40576:190:0;;:9;;;:60;;:190;;40651:11;;40576:9;;40693:4;;40720;;40740:15;;40576:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40451:323;40396:378;:::o;206:301:1:-;265:6;318:2;306:9;297:7;293:23;289:32;286:52;;;334:1;331;324:12;286:52;373:9;360:23;-1:-1:-1;;;;;416:5:1;412:46;405:5;402:57;392:85;;473:1;470;463:12;392:85;496:5;206:301;-1:-1:-1;;;206:301:1:o;512:548::-;624:4;653:2;682;671:9;664:21;714:6;708:13;757:6;752:2;741:9;737:18;730:34;782:1;792:140;806:6;803:1;800:13;792:140;;;901:14;;;897:23;;891:30;867:17;;;886:2;863:26;856:66;821:10;;792:140;;;796:3;981:1;976:2;967:6;956:9;952:22;948:31;941:42;1051:2;1044;1040:7;1035:2;1027:6;1023:15;1019:29;1008:9;1004:45;1000:54;992:62;;;;512:548;;;;:::o;1292:131::-;-1:-1:-1;;;;;1367:31:1;;1357:42;;1347:70;;1413:1;1410;1403:12;1428:315;1496:6;1504;1557:2;1545:9;1536:7;1532:23;1528:32;1525:52;;;1573:1;1570;1563:12;1525:52;1612:9;1599:23;1631:31;1656:5;1631:31;:::i;:::-;1681:5;1733:2;1718:18;;;;1705:32;;-1:-1:-1;;;1428:315:1:o;1748:247::-;1807:6;1860:2;1848:9;1839:7;1835:23;1831:32;1828:52;;;1876:1;1873;1866:12;1828:52;1915:9;1902:23;1934:31;1959:5;1934:31;:::i;2415:456::-;2492:6;2500;2508;2561:2;2549:9;2540:7;2536:23;2532:32;2529:52;;;2577:1;2574;2567:12;2529:52;2616:9;2603:23;2635:31;2660:5;2635:31;:::i;:::-;2685:5;-1:-1:-1;2742:2:1;2727:18;;2714:32;2755:33;2714:32;2755:33;:::i;:::-;2415:456;;2807:7;;-1:-1:-1;;;2861:2:1;2846:18;;;;2833:32;;2415:456::o;3273:180::-;3332:6;3385:2;3373:9;3364:7;3360:23;3356:32;3353:52;;;3401:1;3398;3391:12;3353:52;-1:-1:-1;3424:23:1;;3273:180;-1:-1:-1;3273:180:1:o;3994:118::-;4080:5;4073:13;4066:21;4059:5;4056:32;4046:60;;4102:1;4099;4092:12;4117:382;4182:6;4190;4243:2;4231:9;4222:7;4218:23;4214:32;4211:52;;;4259:1;4256;4249:12;4211:52;4298:9;4285:23;4317:31;4342:5;4317:31;:::i;:::-;4367:5;-1:-1:-1;4424:2:1;4409:18;;4396:32;4437:30;4396:32;4437:30;:::i;:::-;4486:7;4476:17;;;4117:382;;;;;:::o;5047:167::-;5114:20;;5174:14;5163:26;;5153:37;;5143:65;;5204:1;5201;5194:12;5143:65;5047:167;;;:::o;5219:401::-;5301:6;5309;5317;5325;5378:3;5366:9;5357:7;5353:23;5349:33;5346:53;;;5395:1;5392;5385:12;5346:53;5418:28;5436:9;5418:28;:::i;:::-;5408:38;;5465:37;5498:2;5487:9;5483:18;5465:37;:::i;:::-;5455:47;;5521:37;5554:2;5543:9;5539:18;5521:37;:::i;:::-;5511:47;;5577:37;5610:2;5599:9;5595:18;5577:37;:::i;:::-;5567:47;;5219:401;;;;;;;:::o;6252:241::-;6308:6;6361:2;6349:9;6340:7;6336:23;6332:32;6329:52;;;6377:1;6374;6367:12;6329:52;6416:9;6403:23;6435:28;6457:5;6435:28;:::i;6498:388::-;6566:6;6574;6627:2;6615:9;6606:7;6602:23;6598:32;6595:52;;;6643:1;6640;6633:12;6595:52;6682:9;6669:23;6701:31;6726:5;6701:31;:::i;:::-;6751:5;-1:-1:-1;6808:2:1;6793:18;;6780:32;6821:33;6780:32;6821:33;:::i;7215:356::-;7417:2;7399:21;;;7436:18;;;7429:30;7495:34;7490:2;7475:18;;7468:62;7562:2;7547:18;;7215:356::o;7576:127::-;7637:10;7632:3;7628:20;7625:1;7618:31;7668:4;7665:1;7658:15;7692:4;7689:1;7682:15;7708:422;7797:1;7840:5;7797:1;7854:270;7875:7;7865:8;7862:21;7854:270;;;7934:4;7930:1;7926:6;7922:17;7916:4;7913:27;7910:53;;;7943:18;;:::i;:::-;7993:7;7983:8;7979:22;7976:55;;;8013:16;;;;7976:55;8092:22;;;;8052:15;;;;7854:270;;;7858:3;7708:422;;;;;:::o;8135:806::-;8184:5;8214:8;8204:80;;-1:-1:-1;8255:1:1;8269:5;;8204:80;8303:4;8293:76;;-1:-1:-1;8340:1:1;8354:5;;8293:76;8385:4;8403:1;8398:59;;;;8471:1;8466:130;;;;8378:218;;8398:59;8428:1;8419:10;;8442:5;;;8466:130;8503:3;8493:8;8490:17;8487:43;;;8510:18;;:::i;:::-;-1:-1:-1;;8566:1:1;8552:16;;8581:5;;8378:218;;8680:2;8670:8;8667:16;8661:3;8655:4;8652:13;8648:36;8642:2;8632:8;8629:16;8624:2;8618:4;8615:12;8611:35;8608:77;8605:159;;;-1:-1:-1;8717:19:1;;;8749:5;;8605:159;8796:34;8821:8;8815:4;8796:34;:::i;:::-;8866:6;8862:1;8858:6;8854:19;8845:7;8842:32;8839:58;;;8877:18;;:::i;:::-;8915:20;;8135:806;-1:-1:-1;;;8135:806:1:o;8946:140::-;9004:5;9033:47;9074:4;9064:8;9060:19;9054:4;9033:47;:::i;9091:168::-;9164:9;;;9195;;9212:15;;;9206:22;;9192:37;9182:71;;9233:18;;:::i;9264:127::-;9325:10;9320:3;9316:20;9313:1;9306:31;9356:4;9353:1;9346:15;9380:4;9377:1;9370:15;9396:120;9436:1;9462;9452:35;;9467:18;;:::i;:::-;-1:-1:-1;9501:9:1;;9396:120::o;10079:380::-;10158:1;10154:12;;;;10201;;;10222:61;;10276:4;10268:6;10264:17;10254:27;;10222:61;10329:2;10321:6;10318:14;10298:18;10295:38;10292:161;;10375:10;10370:3;10366:20;10363:1;10356:31;10410:4;10407:1;10400:15;10438:4;10435:1;10428:15;10292:161;;10079:380;;;:::o;10464:127::-;10525:10;10520:3;10516:20;10513:1;10506:31;10556:4;10553:1;10546:15;10580:4;10577:1;10570:15;10596:251;10666:6;10719:2;10707:9;10698:7;10694:23;10690:32;10687:52;;;10735:1;10732;10725:12;10687:52;10767:9;10761:16;10786:31;10811:5;10786:31;:::i;10852:127::-;10913:10;10908:3;10904:20;10901:1;10894:31;10944:4;10941:1;10934:15;10968:4;10965:1;10958:15;10984:461;11037:3;11075:5;11069:12;11102:6;11097:3;11090:19;11128:4;11157:2;11152:3;11148:12;11141:19;;11194:2;11187:5;11183:14;11215:1;11225:195;11239:6;11236:1;11233:13;11225:195;;;11304:13;;-1:-1:-1;;;;;11300:39:1;11288:52;;11360:12;;;;11395:15;;;;11336:1;11254:9;11225:195;;;-1:-1:-1;11436:3:1;;10984:461;-1:-1:-1;;;;;10984:461:1:o;11450:332::-;11657:6;11646:9;11639:25;11700:2;11695;11684:9;11680:18;11673:30;11620:4;11720:56;11772:2;11761:9;11757:18;11749:6;11720:56;:::i;11787:1105::-;11882:6;11913:2;11956;11944:9;11935:7;11931:23;11927:32;11924:52;;;11972:1;11969;11962:12;11924:52;12005:9;11999:16;-1:-1:-1;;;;;12075:2:1;12067:6;12064:14;12061:34;;;12091:1;12088;12081:12;12061:34;12129:6;12118:9;12114:22;12104:32;;12174:7;12167:4;12163:2;12159:13;12155:27;12145:55;;12196:1;12193;12186:12;12145:55;12225:2;12219:9;12247:2;12243;12240:10;12237:36;;;12253:18;;:::i;:::-;12299:2;12296:1;12292:10;12331:2;12325:9;12394:2;12390:7;12385:2;12381;12377:11;12373:25;12365:6;12361:38;12449:6;12437:10;12434:22;12429:2;12417:10;12414:18;12411:46;12408:72;;;12460:18;;:::i;:::-;12496:2;12489:22;12546:18;;;12580:15;;;;-1:-1:-1;12622:11:1;;;12618:20;;;12650:19;;;12647:39;;;12682:1;12679;12672:12;12647:39;12706:11;;;;12726:135;12742:6;12737:3;12734:15;12726:135;;;12808:10;;12796:23;;12759:12;;;;12839;;;;12726:135;;;12880:6;11787:1105;-1:-1:-1;;;;;;;;11787:1105:1:o;12897:176::-;12964:14;12998:10;;;13010;;;12994:27;;13033:11;;;13030:37;;;13047:18;;:::i;:::-;13030:37;12897:176;;;;:::o;13078:128::-;13145:9;;;13166:11;;;13163:37;;;13180:18;;:::i;13901:184::-;13971:6;14024:2;14012:9;14003:7;13999:23;13995:32;13992:52;;;14040:1;14037;14030:12;13992:52;-1:-1:-1;14063:16:1;;13901:184;-1:-1:-1;13901:184:1:o;14090:125::-;14155:9;;;14176:10;;;14173:36;;;14189:18;;:::i;14525:245::-;14592:6;14645:2;14633:9;14624:7;14620:23;14616:32;14613:52;;;14661:1;14658;14651:12;14613:52;14693:9;14687:16;14712:28;14734:5;14712:28;:::i;17278:435::-;17375:6;17383;17391;17399;17452:3;17440:9;17431:7;17427:23;17423:33;17420:53;;;17469:1;17466;17459:12;17420:53;17501:9;17495:16;17520:31;17545:5;17520:31;:::i;:::-;17615:2;17600:18;;17594:25;17659:2;17644:18;;17638:25;17703:2;17688:18;;;17682:25;17570:5;;17594:25;;-1:-1:-1;17682:25:1;;-1:-1:-1;17278:435:1;-1:-1:-1;;;17278:435:1:o;21123:502::-;21386:6;21375:9;21368:25;21429:3;21424:2;21413:9;21409:18;21402:31;21349:4;21450:57;21502:3;21491:9;21487:19;21479:6;21450:57;:::i;:::-;-1:-1:-1;;;;;21543:32:1;;;;21538:2;21523:18;;21516:60;-1:-1:-1;21607:2:1;21592:18;21585:34;21442:65;21123:502;-1:-1:-1;;21123:502:1:o;22640:274::-;-1:-1:-1;;;;;22778:10:1;;;22790;;;22774:27;22821:20;;;;22712:34;22860:24;;;22850:58;;22888:18;;:::i;:::-;22850:58;;22640:274;;;;:::o;22919:216::-;22959:1;-1:-1:-1;;;;;23046:2:1;23043:1;23039:10;23068:3;23058:37;;23075:18;;:::i;:::-;23113:10;;23109:20;;;;;22919:216;-1:-1:-1;;22919:216:1:o;23140:180::-;-1:-1:-1;;;;;23245:10:1;;;23257;;;23241:27;;23280:11;;;23277:37;;;23294:18;;:::i;24752:582::-;25051:6;25040:9;25033:25;25094:6;25089:2;25078:9;25074:18;25067:34;25137:3;25132:2;25121:9;25117:18;25110:31;25014:4;25158:57;25210:3;25199:9;25195:19;25187:6;25158:57;:::i;:::-;-1:-1:-1;;;;;25251:32:1;;;;25246:2;25231:18;;25224:60;-1:-1:-1;25315:3:1;25300:19;25293:35;25150:65;24752:582;-1:-1:-1;;;24752:582:1:o

Swarm Source

ipfs://5ed1a5bd71b494106ed59541ef6062319107cb9640c2f2cd6412e1f784828581
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.