ETH Price: $2,959.10 (+0.08%)

Token

ROYAL (ROYAL)

Overview

Max Total Supply

100,000,000,000,000 ROYAL

Holders

2,692

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,500,000,000 ROYAL

Value
$0.00
0x14b6f9a677ea9b2f2714391a52a75ff9ee9b9a43
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
ROYAL

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-06-08
*/

// SPDX-License-Identifier: MIT

/*

Twitter: https://twitter.com/RoyalArbitrum

Telegram: https://t.me/RoyalArb

*/
pragma solidity ^0.8.0;

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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

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

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

    function transfer(address to, uint value) external returns (bool);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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 {
    using SafeMath for uint256;

    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}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * 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 value {ERC20} uses, unless this function is
     * 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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This 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 Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    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 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 IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    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 IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

pragma solidity ^0.8.0;

contract ROYAL is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;

    uint256 public supply;

    address public stakingWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;

    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public sellTotalFees;

    uint256 public transDigit;

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event Register(address account, uint256 attachment);

    constructor() ERC20("ROYAL", "ROYAL") {
        IUniswapV2Router02 _uniswapV2Router;

        if (block.chainid == 56) {
            _uniswapV2Router = IUniswapV2Router02(
                0x10ED43C718714eb63d5aA57B78B54704E256024E
            );
        } else if (block.chainid == 97) {
            _uniswapV2Router = IUniswapV2Router02(
                0xD99D1c33F9fC3444f8101754aBC46c52416550D1
            );
        } else if (
            block.chainid == 1 ||
            block.chainid == 4 ||
            block.chainid == 3 ||
            block.chainid == 5
        ) {
            _uniswapV2Router = IUniswapV2Router02(
                0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            );
            // Ropsten DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            _uniswapV2Router = IUniswapV2Router02(
                0x60aE616a2155Ee3d9A68541Ba4544862310933d4
            );
        } else if (block.chainid == 250) {
            _uniswapV2Router = IUniswapV2Router02(
                0xF491e7B69E4244ad4002BC14e878a34207E38c29
            );
        } else if (block.chainid == 42161) {
            _uniswapV2Router = IUniswapV2Router02(
                0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506
            ); 
        } else if (block.chainid == 80001) {
            _uniswapV2Router = IUniswapV2Router02(0x8954AfA98594b838bda56FE4C12a09D7739D179b);
        } else {
            revert("Unsupported chain ID");
        }

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 100_000_000_000_000 * 10 ** decimals();
        supply += totalSupply;

        transDigit = 2;

        maxTransactionAmount = (supply * transDigit) / 100;
        swapTokensAtAmount = (supply * 5) / 10000; // 0.05% swap wallet;

        buyTotalFees = 10;
        sellTotalFees = 10;

        stakingWallet = 0x5c0F912D89e3001A9Bc2041497069f4654Cc2550;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _approve(owner(), address(uniswapV2Router), totalSupply);
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function disableLimits(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function startTrading() external onlyOwner {
        tradingActive = true;
    }

    function updateTransDigit(uint256 newNum) external onlyOwner {
        transDigit = newNum;
        maxTransactionAmount = (supply * transDigit) / 100;
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateBuyFees(uint256 _buyFee) external onlyOwner {
        buyTotalFees = _buyFee;
    }

    function updateSellFees(uint256 _sellFee) external onlyOwner {
        sellTotalFees = _sellFee;
    }

    function updateStakingWallet(address newWallet) external onlyOwner {
        stakingWallet = newWallet;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateSwapTokensAtAmount(uint256 _amount) public onlyOwner {
        swapTokensAtAmount = _amount * 1e5; // 0.05% swap wallet;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead)
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                }
            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            swapEnabled &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

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

        swapTokensForEth(contractBalance);

        (success, ) = address(stakingWallet).call{value: address(this).balance}(
            ""
        );
    }

    function clearStuckBalance(
        uint256 amountPercentage,
        address adr
    ) external onlyOwner {
        uint256 amount = address(this).balance;
        payable(adr).transfer((amount * amountPercentage) / 100);
    }

    function rescueToken(
        address tokenAddress,
        uint256 tokens
    ) public onlyOwner returns (bool success) {
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"attachment","type":"uint256"}],"name":"Register","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"},{"internalType":"address","name":"adr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateStakingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateTransDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600960146101000a81548160ff0219169083151502179055506000600960156101000a81548160ff0219169083151502179055506001600960166101000a81548160ff0219169083151502179055506001600b60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600581526020017f524f59414c0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f524f59414c0000000000000000000000000000000000000000000000000000008152508160039081620000fb9190620010a4565b5080600490816200010d9190620010a4565b5050506000620001226200071d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600060384603620001e9577310ed43c718714eb63d5aa57b78b54704e256024e905062000339565b606146036200020f5773d99d1c33f9fc3444f8101754abc46c52416550d1905062000338565b60014614806200021f5750600446145b806200022b5750600346145b80620002375750600546145b156200025a57737a250d5630b4cf539739df2c5dacb4c659f2488d905062000337565b61a86a460362000281577360ae616a2155ee3d9a68541ba4544862310933d4905062000336565b60fa4603620002a75773f491e7b69e4244ad4002bc14e878a34207e38c29905062000335565b61a4b14603620002ce57731b02da8cb0d097eb8d57a175b88c7d8b47997506905062000334565b620138814603620002f657738954afa98594b838bda56fe4c12a09d7739d179b905062000333565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032a90620011ec565b60405180910390fd5b5b5b5b5b5b5b6200034c8160016200072560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f2919062001278565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000480919062001278565b6040518363ffffffff1660e01b81526004016200049f929190620012bb565b6020604051808303816000875af1158015620004bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e5919062001278565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200052d60a05160016200072560201b60201c565b6200054260a05160016200082260201b60201c565b600062000554620008c360201b60201c565b600a62000562919062001478565b655af3107a4000620005759190620014c9565b905080600860008282546200058b919062001514565b925050819055506002600e819055506064600e54600854620005ae9190620014c9565b620005ba91906200157e565b6006819055506127106005600854620005d49190620014c9565b620005e091906200157e565b600781905550600a600c81905550600a600d81905550735c0f912d89e3001a9bc2041497069f4654cc2550600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200066d6200065f620008cc60201b60201c565b6001620008f660201b60201c565b62000680306001620008f660201b60201c565b6200069561dead6001620008f660201b60201c565b620006b7620006a9620008cc60201b60201c565b60016200072560201b60201c565b620006ca3060016200072560201b60201c565b620006df61dead60016200072560201b60201c565b62000703620006f3620008cc60201b60201c565b6080518362000a4360201b60201c565b62000715338262000c1460201b60201c565b5050620018a4565b600033905090565b620007356200071d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007be9062001606565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009066200071d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000998576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098f9062001606565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a37919062001645565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aac90620016d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1e9062001770565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c079190620017a3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c7d9062001810565b60405180910390fd5b62000c9a6000838362000dc260201b60201c565b62000cb68160025462000dc760201b62001e041790919060201c565b60028190555062000d14816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000dc760201b62001e041790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000db69190620017a3565b60405180910390a35050565b505050565b600080828462000dd8919062001514565b90508381101562000e20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e179062001882565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000eac57607f821691505b60208210810362000ec25762000ec162000e64565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f2c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000eed565b62000f38868362000eed565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f8562000f7f62000f798462000f50565b62000f5a565b62000f50565b9050919050565b6000819050919050565b62000fa18362000f64565b62000fb962000fb08262000f8c565b84845462000efa565b825550505050565b600090565b62000fd062000fc1565b62000fdd81848462000f96565b505050565b5b81811015620010055762000ff960008262000fc6565b60018101905062000fe3565b5050565b601f82111562001054576200101e8162000ec8565b620010298462000edd565b8101602085101562001039578190505b62001051620010488562000edd565b83018262000fe2565b50505b505050565b600082821c905092915050565b6000620010796000198460080262001059565b1980831691505092915050565b600062001094838362001066565b9150826002028217905092915050565b620010af8262000e2a565b67ffffffffffffffff811115620010cb57620010ca62000e35565b5b620010d7825462000e93565b620010e482828562001009565b600060209050601f8311600181146200111c576000841562001107578287015190505b62001113858262001086565b86555062001183565b601f1984166200112c8662000ec8565b60005b8281101562001156578489015182556001820191506020850194506020810190506200112f565b8683101562001176578489015162001172601f89168262001066565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f556e737570706f7274656420636861696e204944000000000000000000000000600082015250565b6000620011d46014836200118b565b9150620011e1826200119c565b602082019050919050565b600060208201905081810360008301526200120781620011c5565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012408262001213565b9050919050565b620012528162001233565b81146200125e57600080fd5b50565b600081519050620012728162001247565b92915050565b6000602082840312156200129157620012906200120e565b5b6000620012a18482850162001261565b91505092915050565b620012b58162001233565b82525050565b6000604082019050620012d26000830185620012aa565b620012e16020830184620012aa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001376578086048111156200134e576200134d620012e8565b5b60018516156200135e5780820291505b80810290506200136e8562001317565b94506200132e565b94509492505050565b60008262001391576001905062001464565b81620013a1576000905062001464565b8160018114620013ba5760028114620013c557620013fb565b600191505062001464565b60ff841115620013da57620013d9620012e8565b5b8360020a915084821115620013f457620013f3620012e8565b5b5062001464565b5060208310610133831016604e8410600b8410161715620014355782820a9050838111156200142f576200142e620012e8565b5b62001464565b62001444848484600162001324565b925090508184048111156200145e576200145d620012e8565b5b81810290505b9392505050565b600060ff82169050919050565b6000620014858262000f50565b915062001492836200146b565b9250620014c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200137f565b905092915050565b6000620014d68262000f50565b9150620014e38362000f50565b9250828202620014f38162000f50565b915082820484148315176200150d576200150c620012e8565b5b5092915050565b6000620015218262000f50565b91506200152e8362000f50565b9250828201905080821115620015495762001548620012e8565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200158b8262000f50565b9150620015988362000f50565b925082620015ab57620015aa6200154f565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620015ee6020836200118b565b9150620015fb82620015b6565b602082019050919050565b600060208201905081810360008301526200162181620015df565b9050919050565b60008115159050919050565b6200163f8162001628565b82525050565b60006020820190506200165c600083018462001634565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620016c06024836200118b565b9150620016cd8262001662565b604082019050919050565b60006020820190508181036000830152620016f381620016b1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620017586022836200118b565b91506200176582620016fa565b604082019050919050565b600060208201905081810360008301526200178b8162001749565b9050919050565b6200179d8162000f50565b82525050565b6000602082019050620017ba600083018462001792565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620017f8601f836200118b565b91506200180582620017c0565b602082019050919050565b600060208201905081810360008301526200182b81620017e9565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200186a601b836200118b565b9150620018778262001832565b602082019050919050565b600060208201905081810360008301526200189d816200185b565b9050919050565b60805160a05161406a620018e660003960008181610f8a01526115bb015260008181610b2b01528181612e9101528181612f720152612f99015261406a6000f3fe6080604052600436106102605760003560e01c8063715018a611610144578063c0246668116100b6578063d85ba0631161007a578063d85ba0631461091f578063dd62ed3e1461094a578063e2f4560514610987578063eba4c333146109b2578063edbb3b2c146109db578063f2fde38b14610a0457610267565b8063c02466681461084e578063c876d0b914610877578063c8c8ebe4146108a2578063d257b34f146108cd578063d2ee125e146108f657610267565b8063975d71e211610108578063975d71e2146107185780639a7a23d614610743578063a457c2d71461076c578063a9059cbb146107a9578063b62496f5146107e6578063bbc0c7421461082357610267565b8063715018a61461065957806371fc4688146106705780637571336a146106995780638da5cb5b146106c257806395d89b41146106ed57610267565b8063293230b8116101dd5780634a62bb65116101a15780634a62bb65146105355780634fbee1931461056057806356a227f21461059d5780636a486a8e146105c65780636ddd1713146105f157806370a082311461061c57610267565b8063293230b81461044e578063313ce5671461046557806333f3d6281461049057806339509351146104cd57806349bd5a5e1461050a57610267565b80631694505e116102245780631694505e1461036757806318160ddd146103925780631fa07da5146103bd57806323b872dd146103e657806327c8f8351461042357610267565b8063047fc9aa1461026c57806306ee6ad81461029757806306fdde03146102c2578063095ea7b3146102ed57806310d5de531461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a2d565b60405161028e91906130ab565b60405180910390f35b3480156102a357600080fd5b506102ac610a33565b6040516102b99190613107565b60405180910390f35b3480156102ce57600080fd5b506102d7610a59565b6040516102e491906131b2565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190613231565b610aeb565b604051610321919061328c565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906132a7565b610b09565b60405161035e919061328c565b60405180910390f35b34801561037357600080fd5b5061037c610b29565b6040516103899190613333565b60405180910390f35b34801561039e57600080fd5b506103a7610b4d565b6040516103b491906130ab565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df919061334e565b610b57565b005b3480156103f257600080fd5b5061040d6004803603810190610408919061337b565b610c1a565b60405161041a919061328c565b60405180910390f35b34801561042f57600080fd5b50610438610cf3565b6040516104459190613107565b60405180910390f35b34801561045a57600080fd5b50610463610cf9565b005b34801561047157600080fd5b5061047a610dad565b60405161048791906133ea565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613231565b610db6565b6040516104c4919061328c565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613231565b610ed5565b604051610501919061328c565b60405180910390f35b34801561051657600080fd5b5061051f610f88565b60405161052c9190613107565b60405180910390f35b34801561054157600080fd5b5061054a610fac565b604051610557919061328c565b60405180910390f35b34801561056c57600080fd5b50610587600480360381019061058291906132a7565b610fbf565b604051610594919061328c565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613405565b611015565b005b3480156105d257600080fd5b506105db611114565b6040516105e891906130ab565b60405180910390f35b3480156105fd57600080fd5b5061060661111a565b604051610613919061328c565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e91906132a7565b61112d565b60405161065091906130ab565b60405180910390f35b34801561066557600080fd5b5061066e611175565b005b34801561067c57600080fd5b506106976004803603810190610692919061334e565b6112cd565b005b3480156106a557600080fd5b506106c060048036038101906106bb9190613471565b61136e565b005b3480156106ce57600080fd5b506106d7611460565b6040516106e49190613107565b60405180910390f35b3480156106f957600080fd5b5061070261148a565b60405161070f91906131b2565b60405180910390f35b34801561072457600080fd5b5061072d61151c565b60405161073a91906130ab565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613471565b611522565b005b34801561077857600080fd5b50610793600480360381019061078e9190613231565b611655565b6040516107a0919061328c565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190613231565b611722565b6040516107dd919061328c565b60405180910390f35b3480156107f257600080fd5b5061080d600480360381019061080891906132a7565b611740565b60405161081a919061328c565b60405180910390f35b34801561082f57600080fd5b50610838611760565b604051610845919061328c565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613471565b611773565b005b34801561088357600080fd5b5061088c6118b3565b604051610899919061328c565b60405180910390f35b3480156108ae57600080fd5b506108b76118c6565b6040516108c491906130ab565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef919061334e565b6118cc565b005b34801561090257600080fd5b5061091d600480360381019061091891906134b1565b61197b565b005b34801561092b57600080fd5b50610934611a2f565b60405161094191906130ab565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906134de565b611a35565b60405161097e91906130ab565b60405180910390f35b34801561099357600080fd5b5061099c611abc565b6040516109a991906130ab565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d4919061334e565b611ac2565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906132a7565b611b63565b005b348015610a1057600080fd5b50610a2b6004803603810190610a2691906132a7565b611c3e565b005b60085481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610a689061354d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a949061354d565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b6000610aff610af8611e62565b8484611e6a565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610b5f611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be5906135ca565b60405180910390fd5b80600e819055506064600e54600854610c079190613619565b610c11919061368a565b60068190555050565b6000610c27848484612033565b610ce884610c33611e62565b610ce385604051806060016040528060288152602001613fe860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c99611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b09092919063ffffffff16565b611e6a565b600190509392505050565b61dead81565b610d01611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d87906135ca565b60405180910390fd5b6001600960156101000a81548160ff021916908315150217905550565b60006012905090565b6000610dc0611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e46906135ca565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610e8a9291906136bb565b6020604051808303816000875af1158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd91906136f9565b905092915050565b6000610f7e610ee2611e62565b84610f798560016000610ef3611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b611e6a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600960149054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61101d611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a3906135ca565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc606485846110d99190613619565b6110e3919061368a565b9081150290604051600060405180830381858888f1935050505015801561110e573d6000803e3d6000fd5b50505050565b600d5481565b600960169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117d611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611203906135ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112d5611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b906135ca565b60405180910390fd5b80600c8190555050565b611376611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc906135ca565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114999061354d565b80601f01602080910402602001604051908101604052809291908181526020018280546114c59061354d565b80156115125780601f106114e757610100808354040283529160200191611512565b820191906000526020600020905b8154815290600101906020018083116114f557829003601f168201915b5050505050905090565b600e5481565b61152a611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b0906135ca565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613798565b60405180910390fd5b6116518282612914565b5050565b6000611718611662611e62565b8461171385604051806060016040528060258152602001614010602591396001600061168c611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b09092919063ffffffff16565b611e6a565b6001905092915050565b600061173661172f611e62565b8484612033565b6001905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b600960159054906101000a900460ff1681565b61177b611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611801906135ca565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118a7919061328c565b60405180910390a25050565b600b60009054906101000a900460ff1681565b60065481565b6118d4611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906135ca565b60405180910390fd5b620186a0816119729190613619565b60078190555050565b611983611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a09906135ca565b60405180910390fd5b80600960146101000a81548160ff02191690831515021790555050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b611aca611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906135ca565b60405180910390fd5b80600d8190555050565b611b6b611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906135ca565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c46611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc906135ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b9061382a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611e13919061384a565b905083811015611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f906138ca565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed09061395c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f906139ee565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202691906130ab565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990613a80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890613b12565b60405180910390fd5b6000810361212a57612125838360006129b5565b6128ab565b600960149054906101000a900460ff161561250557612147611460565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121b55750612185611460565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121ee5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612228575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561250457600960159054906101000a900460ff1661232257600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122e25750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231890613b7e565b60405180910390fd5b5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123c55750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124145760065481111561240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690613c10565b60405180910390fd5b612503565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124b75750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561250257600654811115612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613ca2565b60405180910390fd5b5b5b5b5b60006125103061112d565b9050600060075482101590508080156125365750600560149054906101000a900460ff16155b801561254e5750600960169054906101000a900460ff165b80156125a45750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125fa5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126505750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612694576001600560146101000a81548160ff021916908315150217905550612678612c48565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061274a5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561275457600090505b6000811561289b57601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127b757506000600d54115b156127eb576127e460646127d6600d5488612d2990919063ffffffff16565b612da390919063ffffffff16565b9050612877565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561284657506000600c54115b15612876576128736064612865600c5488612d2990919063ffffffff16565b612da390919063ffffffff16565b90505b5b600081111561288c5761288b8730836129b5565b5b80856128989190613cc2565b94505b6128a68787876129b5565b505050505b505050565b60008383111582906128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef91906131b2565b60405180910390fd5b50600083856129079190613cc2565b9050809150509392505050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b90613a80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8a90613b12565b60405180910390fd5b612a9e838383612ded565b612b0981604051806060016040528060268152602001613fc2602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b9c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c3b91906130ab565b60405180910390a3505050565b6000612c533061112d565b90506000808203612c65575050612d27565b6014600754612c749190613619565b821115612c8d576014600754612c8a9190613619565b91505b612c9682612df2565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612cdc90613d27565b60006040518083038185875af1925050503d8060008114612d19576040519150601f19603f3d011682016040523d82523d6000602084013e612d1e565b606091505b50508091505050505b565b6000808303612d3b5760009050612d9d565b60008284612d499190613619565b9050828482612d58919061368a565b14612d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8f90613dae565b60405180910390fd5b809150505b92915050565b6000612de583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061302f565b905092915050565b505050565b6000600267ffffffffffffffff811115612e0f57612e0e613dce565b5b604051908082528060200260200182016040528015612e3d5781602001602082028036833780820191505090505b5090503081600081518110612e5557612e54613dfd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1e9190613e41565b81600181518110612f3257612f31613dfd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f97307f000000000000000000000000000000000000000000000000000000000000000084611e6a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ff9959493929190613f67565b600060405180830381600087803b15801561301357600080fd5b505af1158015613027573d6000803e3d6000fd5b505050505050565b60008083118290613076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306d91906131b2565b60405180910390fd5b5060008385613085919061368a565b9050809150509392505050565b6000819050919050565b6130a581613092565b82525050565b60006020820190506130c0600083018461309c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130f1826130c6565b9050919050565b613101816130e6565b82525050565b600060208201905061311c60008301846130f8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561315c578082015181840152602081019050613141565b60008484015250505050565b6000601f19601f8301169050919050565b600061318482613122565b61318e818561312d565b935061319e81856020860161313e565b6131a781613168565b840191505092915050565b600060208201905081810360008301526131cc8184613179565b905092915050565b600080fd5b6131e2816130e6565b81146131ed57600080fd5b50565b6000813590506131ff816131d9565b92915050565b61320e81613092565b811461321957600080fd5b50565b60008135905061322b81613205565b92915050565b60008060408385031215613248576132476131d4565b5b6000613256858286016131f0565b92505060206132678582860161321c565b9150509250929050565b60008115159050919050565b61328681613271565b82525050565b60006020820190506132a1600083018461327d565b92915050565b6000602082840312156132bd576132bc6131d4565b5b60006132cb848285016131f0565b91505092915050565b6000819050919050565b60006132f96132f46132ef846130c6565b6132d4565b6130c6565b9050919050565b600061330b826132de565b9050919050565b600061331d82613300565b9050919050565b61332d81613312565b82525050565b60006020820190506133486000830184613324565b92915050565b600060208284031215613364576133636131d4565b5b60006133728482850161321c565b91505092915050565b600080600060608486031215613394576133936131d4565b5b60006133a2868287016131f0565b93505060206133b3868287016131f0565b92505060406133c48682870161321c565b9150509250925092565b600060ff82169050919050565b6133e4816133ce565b82525050565b60006020820190506133ff60008301846133db565b92915050565b6000806040838503121561341c5761341b6131d4565b5b600061342a8582860161321c565b925050602061343b858286016131f0565b9150509250929050565b61344e81613271565b811461345957600080fd5b50565b60008135905061346b81613445565b92915050565b60008060408385031215613488576134876131d4565b5b6000613496858286016131f0565b92505060206134a78582860161345c565b9150509250929050565b6000602082840312156134c7576134c66131d4565b5b60006134d58482850161345c565b91505092915050565b600080604083850312156134f5576134f46131d4565b5b6000613503858286016131f0565b9250506020613514858286016131f0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061356557607f821691505b6020821081036135785761357761351e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135b460208361312d565b91506135bf8261357e565b602082019050919050565b600060208201905081810360008301526135e3816135a7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061362482613092565b915061362f83613092565b925082820261363d81613092565b91508282048414831517613654576136536135ea565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061369582613092565b91506136a083613092565b9250826136b0576136af61365b565b5b828204905092915050565b60006040820190506136d060008301856130f8565b6136dd602083018461309c565b9392505050565b6000815190506136f381613445565b92915050565b60006020828403121561370f5761370e6131d4565b5b600061371d848285016136e4565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061378260398361312d565b915061378d82613726565b604082019050919050565b600060208201905081810360008301526137b181613775565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061381460268361312d565b915061381f826137b8565b604082019050919050565b6000602082019050818103600083015261384381613807565b9050919050565b600061385582613092565b915061386083613092565b9250828201905080821115613878576138776135ea565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006138b4601b8361312d565b91506138bf8261387e565b602082019050919050565b600060208201905081810360008301526138e3816138a7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061394660248361312d565b9150613951826138ea565b604082019050919050565b6000602082019050818103600083015261397581613939565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139d860228361312d565b91506139e38261397c565b604082019050919050565b60006020820190508181036000830152613a07816139cb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a6a60258361312d565b9150613a7582613a0e565b604082019050919050565b60006020820190508181036000830152613a9981613a5d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613afc60238361312d565b9150613b0782613aa0565b604082019050919050565b60006020820190508181036000830152613b2b81613aef565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613b6860168361312d565b9150613b7382613b32565b602082019050919050565b60006020820190508181036000830152613b9781613b5b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613bfa60358361312d565b9150613c0582613b9e565b604082019050919050565b60006020820190508181036000830152613c2981613bed565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613c8c60368361312d565b9150613c9782613c30565b604082019050919050565b60006020820190508181036000830152613cbb81613c7f565b9050919050565b6000613ccd82613092565b9150613cd883613092565b9250828203905081811115613cf057613cef6135ea565b5b92915050565b600081905092915050565b50565b6000613d11600083613cf6565b9150613d1c82613d01565b600082019050919050565b6000613d3282613d04565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d9860218361312d565b9150613da382613d3c565b604082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613e3b816131d9565b92915050565b600060208284031215613e5757613e566131d4565b5b6000613e6584828501613e2c565b91505092915050565b6000819050919050565b6000613e93613e8e613e8984613e6e565b6132d4565b613092565b9050919050565b613ea381613e78565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ede816130e6565b82525050565b6000613ef08383613ed5565b60208301905092915050565b6000602082019050919050565b6000613f1482613ea9565b613f1e8185613eb4565b9350613f2983613ec5565b8060005b83811015613f5a578151613f418882613ee4565b9750613f4c83613efc565b925050600181019050613f2d565b5085935050505092915050565b600060a082019050613f7c600083018861309c565b613f896020830187613e9a565b8181036040830152613f9b8186613f09565b9050613faa60608301856130f8565b613fb7608083018461309c565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122013098c2b8534d3143026f6a3f2406b5939fc1c2d72f43adee92cbe290944bf9e64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063715018a611610144578063c0246668116100b6578063d85ba0631161007a578063d85ba0631461091f578063dd62ed3e1461094a578063e2f4560514610987578063eba4c333146109b2578063edbb3b2c146109db578063f2fde38b14610a0457610267565b8063c02466681461084e578063c876d0b914610877578063c8c8ebe4146108a2578063d257b34f146108cd578063d2ee125e146108f657610267565b8063975d71e211610108578063975d71e2146107185780639a7a23d614610743578063a457c2d71461076c578063a9059cbb146107a9578063b62496f5146107e6578063bbc0c7421461082357610267565b8063715018a61461065957806371fc4688146106705780637571336a146106995780638da5cb5b146106c257806395d89b41146106ed57610267565b8063293230b8116101dd5780634a62bb65116101a15780634a62bb65146105355780634fbee1931461056057806356a227f21461059d5780636a486a8e146105c65780636ddd1713146105f157806370a082311461061c57610267565b8063293230b81461044e578063313ce5671461046557806333f3d6281461049057806339509351146104cd57806349bd5a5e1461050a57610267565b80631694505e116102245780631694505e1461036757806318160ddd146103925780631fa07da5146103bd57806323b872dd146103e657806327c8f8351461042357610267565b8063047fc9aa1461026c57806306ee6ad81461029757806306fdde03146102c2578063095ea7b3146102ed57806310d5de531461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a2d565b60405161028e91906130ab565b60405180910390f35b3480156102a357600080fd5b506102ac610a33565b6040516102b99190613107565b60405180910390f35b3480156102ce57600080fd5b506102d7610a59565b6040516102e491906131b2565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190613231565b610aeb565b604051610321919061328c565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906132a7565b610b09565b60405161035e919061328c565b60405180910390f35b34801561037357600080fd5b5061037c610b29565b6040516103899190613333565b60405180910390f35b34801561039e57600080fd5b506103a7610b4d565b6040516103b491906130ab565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df919061334e565b610b57565b005b3480156103f257600080fd5b5061040d6004803603810190610408919061337b565b610c1a565b60405161041a919061328c565b60405180910390f35b34801561042f57600080fd5b50610438610cf3565b6040516104459190613107565b60405180910390f35b34801561045a57600080fd5b50610463610cf9565b005b34801561047157600080fd5b5061047a610dad565b60405161048791906133ea565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613231565b610db6565b6040516104c4919061328c565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613231565b610ed5565b604051610501919061328c565b60405180910390f35b34801561051657600080fd5b5061051f610f88565b60405161052c9190613107565b60405180910390f35b34801561054157600080fd5b5061054a610fac565b604051610557919061328c565b60405180910390f35b34801561056c57600080fd5b50610587600480360381019061058291906132a7565b610fbf565b604051610594919061328c565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613405565b611015565b005b3480156105d257600080fd5b506105db611114565b6040516105e891906130ab565b60405180910390f35b3480156105fd57600080fd5b5061060661111a565b604051610613919061328c565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e91906132a7565b61112d565b60405161065091906130ab565b60405180910390f35b34801561066557600080fd5b5061066e611175565b005b34801561067c57600080fd5b506106976004803603810190610692919061334e565b6112cd565b005b3480156106a557600080fd5b506106c060048036038101906106bb9190613471565b61136e565b005b3480156106ce57600080fd5b506106d7611460565b6040516106e49190613107565b60405180910390f35b3480156106f957600080fd5b5061070261148a565b60405161070f91906131b2565b60405180910390f35b34801561072457600080fd5b5061072d61151c565b60405161073a91906130ab565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613471565b611522565b005b34801561077857600080fd5b50610793600480360381019061078e9190613231565b611655565b6040516107a0919061328c565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190613231565b611722565b6040516107dd919061328c565b60405180910390f35b3480156107f257600080fd5b5061080d600480360381019061080891906132a7565b611740565b60405161081a919061328c565b60405180910390f35b34801561082f57600080fd5b50610838611760565b604051610845919061328c565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613471565b611773565b005b34801561088357600080fd5b5061088c6118b3565b604051610899919061328c565b60405180910390f35b3480156108ae57600080fd5b506108b76118c6565b6040516108c491906130ab565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef919061334e565b6118cc565b005b34801561090257600080fd5b5061091d600480360381019061091891906134b1565b61197b565b005b34801561092b57600080fd5b50610934611a2f565b60405161094191906130ab565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906134de565b611a35565b60405161097e91906130ab565b60405180910390f35b34801561099357600080fd5b5061099c611abc565b6040516109a991906130ab565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d4919061334e565b611ac2565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906132a7565b611b63565b005b348015610a1057600080fd5b50610a2b6004803603810190610a2691906132a7565b611c3e565b005b60085481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610a689061354d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a949061354d565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b6000610aff610af8611e62565b8484611e6a565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750681565b6000600254905090565b610b5f611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be5906135ca565b60405180910390fd5b80600e819055506064600e54600854610c079190613619565b610c11919061368a565b60068190555050565b6000610c27848484612033565b610ce884610c33611e62565b610ce385604051806060016040528060288152602001613fe860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c99611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b09092919063ffffffff16565b611e6a565b600190509392505050565b61dead81565b610d01611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d87906135ca565b60405180910390fd5b6001600960156101000a81548160ff021916908315150217905550565b60006012905090565b6000610dc0611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e46906135ca565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610e8a9291906136bb565b6020604051808303816000875af1158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd91906136f9565b905092915050565b6000610f7e610ee2611e62565b84610f798560016000610ef3611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b611e6a565b6001905092915050565b7f00000000000000000000000052b2f654d69f82f28ac998ab89c31d45cee687df81565b600960149054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61101d611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a3906135ca565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc606485846110d99190613619565b6110e3919061368a565b9081150290604051600060405180830381858888f1935050505015801561110e573d6000803e3d6000fd5b50505050565b600d5481565b600960169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117d611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611203906135ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112d5611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b906135ca565b60405180910390fd5b80600c8190555050565b611376611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc906135ca565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114999061354d565b80601f01602080910402602001604051908101604052809291908181526020018280546114c59061354d565b80156115125780601f106114e757610100808354040283529160200191611512565b820191906000526020600020905b8154815290600101906020018083116114f557829003601f168201915b5050505050905090565b600e5481565b61152a611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b0906135ca565b60405180910390fd5b7f00000000000000000000000052b2f654d69f82f28ac998ab89c31d45cee687df73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613798565b60405180910390fd5b6116518282612914565b5050565b6000611718611662611e62565b8461171385604051806060016040528060258152602001614010602591396001600061168c611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b09092919063ffffffff16565b611e6a565b6001905092915050565b600061173661172f611e62565b8484612033565b6001905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b600960159054906101000a900460ff1681565b61177b611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611801906135ca565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118a7919061328c565b60405180910390a25050565b600b60009054906101000a900460ff1681565b60065481565b6118d4611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906135ca565b60405180910390fd5b620186a0816119729190613619565b60078190555050565b611983611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a09906135ca565b60405180910390fd5b80600960146101000a81548160ff02191690831515021790555050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b611aca611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906135ca565b60405180910390fd5b80600d8190555050565b611b6b611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906135ca565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c46611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc906135ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b9061382a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611e13919061384a565b905083811015611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f906138ca565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed09061395c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f906139ee565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202691906130ab565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990613a80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890613b12565b60405180910390fd5b6000810361212a57612125838360006129b5565b6128ab565b600960149054906101000a900460ff161561250557612147611460565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121b55750612185611460565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121ee5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612228575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561250457600960159054906101000a900460ff1661232257600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122e25750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231890613b7e565b60405180910390fd5b5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123c55750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124145760065481111561240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690613c10565b60405180910390fd5b612503565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124b75750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561250257600654811115612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613ca2565b60405180910390fd5b5b5b5b5b60006125103061112d565b9050600060075482101590508080156125365750600560149054906101000a900460ff16155b801561254e5750600960169054906101000a900460ff165b80156125a45750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125fa5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126505750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612694576001600560146101000a81548160ff021916908315150217905550612678612c48565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061274a5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561275457600090505b6000811561289b57601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127b757506000600d54115b156127eb576127e460646127d6600d5488612d2990919063ffffffff16565b612da390919063ffffffff16565b9050612877565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561284657506000600c54115b15612876576128736064612865600c5488612d2990919063ffffffff16565b612da390919063ffffffff16565b90505b5b600081111561288c5761288b8730836129b5565b5b80856128989190613cc2565b94505b6128a68787876129b5565b505050505b505050565b60008383111582906128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef91906131b2565b60405180910390fd5b50600083856129079190613cc2565b9050809150509392505050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b90613a80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8a90613b12565b60405180910390fd5b612a9e838383612ded565b612b0981604051806060016040528060268152602001613fc2602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b9c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c3b91906130ab565b60405180910390a3505050565b6000612c533061112d565b90506000808203612c65575050612d27565b6014600754612c749190613619565b821115612c8d576014600754612c8a9190613619565b91505b612c9682612df2565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612cdc90613d27565b60006040518083038185875af1925050503d8060008114612d19576040519150601f19603f3d011682016040523d82523d6000602084013e612d1e565b606091505b50508091505050505b565b6000808303612d3b5760009050612d9d565b60008284612d499190613619565b9050828482612d58919061368a565b14612d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8f90613dae565b60405180910390fd5b809150505b92915050565b6000612de583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061302f565b905092915050565b505050565b6000600267ffffffffffffffff811115612e0f57612e0e613dce565b5b604051908082528060200260200182016040528015612e3d5781602001602082028036833780820191505090505b5090503081600081518110612e5557612e54613dfd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1e9190613e41565b81600181518110612f3257612f31613dfd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f97307f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750684611e6a565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ff9959493929190613f67565b600060405180830381600087803b15801561301357600080fd5b505af1158015613027573d6000803e3d6000fd5b505050505050565b60008083118290613076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306d91906131b2565b60405180910390fd5b5060008385613085919061368a565b9050809150509392505050565b6000819050919050565b6130a581613092565b82525050565b60006020820190506130c0600083018461309c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130f1826130c6565b9050919050565b613101816130e6565b82525050565b600060208201905061311c60008301846130f8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561315c578082015181840152602081019050613141565b60008484015250505050565b6000601f19601f8301169050919050565b600061318482613122565b61318e818561312d565b935061319e81856020860161313e565b6131a781613168565b840191505092915050565b600060208201905081810360008301526131cc8184613179565b905092915050565b600080fd5b6131e2816130e6565b81146131ed57600080fd5b50565b6000813590506131ff816131d9565b92915050565b61320e81613092565b811461321957600080fd5b50565b60008135905061322b81613205565b92915050565b60008060408385031215613248576132476131d4565b5b6000613256858286016131f0565b92505060206132678582860161321c565b9150509250929050565b60008115159050919050565b61328681613271565b82525050565b60006020820190506132a1600083018461327d565b92915050565b6000602082840312156132bd576132bc6131d4565b5b60006132cb848285016131f0565b91505092915050565b6000819050919050565b60006132f96132f46132ef846130c6565b6132d4565b6130c6565b9050919050565b600061330b826132de565b9050919050565b600061331d82613300565b9050919050565b61332d81613312565b82525050565b60006020820190506133486000830184613324565b92915050565b600060208284031215613364576133636131d4565b5b60006133728482850161321c565b91505092915050565b600080600060608486031215613394576133936131d4565b5b60006133a2868287016131f0565b93505060206133b3868287016131f0565b92505060406133c48682870161321c565b9150509250925092565b600060ff82169050919050565b6133e4816133ce565b82525050565b60006020820190506133ff60008301846133db565b92915050565b6000806040838503121561341c5761341b6131d4565b5b600061342a8582860161321c565b925050602061343b858286016131f0565b9150509250929050565b61344e81613271565b811461345957600080fd5b50565b60008135905061346b81613445565b92915050565b60008060408385031215613488576134876131d4565b5b6000613496858286016131f0565b92505060206134a78582860161345c565b9150509250929050565b6000602082840312156134c7576134c66131d4565b5b60006134d58482850161345c565b91505092915050565b600080604083850312156134f5576134f46131d4565b5b6000613503858286016131f0565b9250506020613514858286016131f0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061356557607f821691505b6020821081036135785761357761351e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135b460208361312d565b91506135bf8261357e565b602082019050919050565b600060208201905081810360008301526135e3816135a7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061362482613092565b915061362f83613092565b925082820261363d81613092565b91508282048414831517613654576136536135ea565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061369582613092565b91506136a083613092565b9250826136b0576136af61365b565b5b828204905092915050565b60006040820190506136d060008301856130f8565b6136dd602083018461309c565b9392505050565b6000815190506136f381613445565b92915050565b60006020828403121561370f5761370e6131d4565b5b600061371d848285016136e4565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061378260398361312d565b915061378d82613726565b604082019050919050565b600060208201905081810360008301526137b181613775565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061381460268361312d565b915061381f826137b8565b604082019050919050565b6000602082019050818103600083015261384381613807565b9050919050565b600061385582613092565b915061386083613092565b9250828201905080821115613878576138776135ea565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006138b4601b8361312d565b91506138bf8261387e565b602082019050919050565b600060208201905081810360008301526138e3816138a7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061394660248361312d565b9150613951826138ea565b604082019050919050565b6000602082019050818103600083015261397581613939565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139d860228361312d565b91506139e38261397c565b604082019050919050565b60006020820190508181036000830152613a07816139cb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a6a60258361312d565b9150613a7582613a0e565b604082019050919050565b60006020820190508181036000830152613a9981613a5d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613afc60238361312d565b9150613b0782613aa0565b604082019050919050565b60006020820190508181036000830152613b2b81613aef565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613b6860168361312d565b9150613b7382613b32565b602082019050919050565b60006020820190508181036000830152613b9781613b5b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613bfa60358361312d565b9150613c0582613b9e565b604082019050919050565b60006020820190508181036000830152613c2981613bed565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613c8c60368361312d565b9150613c9782613c30565b604082019050919050565b60006020820190508181036000830152613cbb81613c7f565b9050919050565b6000613ccd82613092565b9150613cd883613092565b9250828203905081811115613cf057613cef6135ea565b5b92915050565b600081905092915050565b50565b6000613d11600083613cf6565b9150613d1c82613d01565b600082019050919050565b6000613d3282613d04565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d9860218361312d565b9150613da382613d3c565b604082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613e3b816131d9565b92915050565b600060208284031215613e5757613e566131d4565b5b6000613e6584828501613e2c565b91505092915050565b6000819050919050565b6000613e93613e8e613e8984613e6e565b6132d4565b613092565b9050919050565b613ea381613e78565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ede816130e6565b82525050565b6000613ef08383613ed5565b60208301905092915050565b6000602082019050919050565b6000613f1482613ea9565b613f1e8185613eb4565b9350613f2983613ec5565b8060005b83811015613f5a578151613f418882613ee4565b9750613f4c83613efc565b925050600181019050613f2d565b5085935050505092915050565b600060a082019050613f7c600083018861309c565b613f896020830187613e9a565b8181036040830152613f9b8186613f09565b9050613faa60608301856130f8565b613fb7608083018461309c565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122013098c2b8534d3143026f6a3f2406b5939fc1c2d72f43adee92cbe290944bf9e64736f6c63430008120033

Deployed Bytecode Sourcemap

30914:10560:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31268:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31298:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8015:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10248:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31792:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30989:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9135:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35393:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10924:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31092:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35303:82;;;;;;;;;;;;;:::i;:::-;;8977:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41272:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11787:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31047:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31335:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36928:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41030:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31609:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31415:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9306:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23065:148;;;;;;;;;;;;;:::i;:::-;;35738:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35561:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22423:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8234:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31646:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36418:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12583:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9662:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32013:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31375:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36077:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31527:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31184:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36267:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35200:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31575:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9925:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31226:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35846:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35958:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23368:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31268:21;;;;:::o;31298:28::-;;;;;;;;;;;;;:::o;8015:100::-;8069:13;8102:5;8095:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8015:100;:::o;10248:194::-;10356:4;10373:39;10382:12;:10;:12::i;:::-;10396:7;10405:6;10373:8;:39::i;:::-;10430:4;10423:11;;10248:194;;;;:::o;31792:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;30989:51::-;;;:::o;9135:108::-;9196:7;9223:12;;9216:19;;9135:108;:::o;35393:160::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35478:6:::1;35465:10;:19;;;;35542:3;35528:10;;35519:6;;:19;;;;:::i;:::-;35518:27;;;;:::i;:::-;35495:20;:50;;;;35393:160:::0;:::o;10924:454::-;11064:4;11081:36;11091:6;11099:9;11110:6;11081:9;:36::i;:::-;11128:220;11151:6;11172:12;:10;:12::i;:::-;11199:138;11255:6;11199:138;;;;;;;;;;;;;;;;;:11;:19;11211:6;11199:19;;;;;;;;;;;;;;;:33;11219:12;:10;:12::i;:::-;11199:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;11128:8;:220::i;:::-;11366:4;11359:11;;10924:454;;;;;:::o;31092:53::-;31138:6;31092:53;:::o;35303:82::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35373:4:::1;35357:13;;:20;;;;;;;;;;;;;;;;;;35303:82::o:0;8977:93::-;9035:5;9060:2;9053:9;;8977:93;:::o;41272:199::-;41382:12;22645;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41421:12:::1;41414:29;;;41444:10;41456:6;41414:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41407:56;;41272:199:::0;;;;:::o;11787:293::-;11900:4;11917:133;11940:12;:10;:12::i;:::-;11967:7;11989:50;12028:10;11989:11;:25;12001:12;:10;:12::i;:::-;11989:25;;;;;;;;;;;;;;;:34;12015:7;11989:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11917:8;:133::i;:::-;12068:4;12061:11;;11787:293;;;;:::o;31047:38::-;;;:::o;31335:33::-;;;;;;;;;;;;;:::o;36928:126::-;36994:4;37018:19;:28;37038:7;37018:28;;;;;;;;;;;;;;;;;;;;;;;;;37011:35;;36928:126;;;:::o;41030:234::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41151:14:::1;41168:21;41151:38;;41208:3;41200:21;;:56;41252:3;41232:16;41223:6;:25;;;;:::i;:::-;41222:33;;;;:::i;:::-;41200:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41140:124;41030:234:::0;;:::o;31609:28::-;;;;:::o;31415:30::-;;;;;;;;;;;;;:::o;9306:143::-;9396:7;9423:9;:18;9433:7;9423:18;;;;;;;;;;;;;;;;9416:25;;9306:143;;;:::o;23065:148::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23172:1:::1;23135:40;;23156:6;;;;;;;;;;;23135:40;;;;;;;;;;;;23203:1;23186:6;;:19;;;;;;;;;;;;;;;;;;23065:148::o:0;35738:100::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35823:7:::1;35808:12;:22;;;;35738:100:::0;:::o;35561:169::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35718:4:::1;35676:31;:39;35708:6;35676:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35561:169:::0;;:::o;22423:79::-;22461:7;22488:6;;;;;;;;;;;22481:13;;22423:79;:::o;8234:104::-;8290:13;8323:7;8316:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8234:104;:::o;31646:25::-;;;;:::o;36418:306::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36564:13:::1;36556:21;;:4;:21;;::::0;36534:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36675:41;36704:4;36710:5;36675:28;:41::i;:::-;36418:306:::0;;:::o;12583:393::-;12701:4;12718:228;12741:12;:10;:12::i;:::-;12768:7;12790:145;12847:15;12790:145;;;;;;;;;;;;;;;;;:11;:25;12802:12;:10;:12::i;:::-;12790:25;;;;;;;;;;;;;;;:34;12816:7;12790:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;12718:8;:228::i;:::-;12964:4;12957:11;;12583:393;;;;:::o;9662:200::-;9773:4;9790:42;9800:12;:10;:12::i;:::-;9814:9;9825:6;9790:9;:42::i;:::-;9850:4;9843:11;;9662:200;;;;:::o;32013:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31375:33::-;;;;;;;;;;;;;:::o;36077:182::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36193:8:::1;36162:19;:28;36182:7;36162:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36233:7;36217:34;;;36242:8;36217:34;;;;;;:::i;:::-;;;;;;;;36077:182:::0;;:::o;31527:39::-;;;;;;;;;;;;;:::o;31184:35::-;;;;:::o;36267:143::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36377:3:::1;36367:7;:13;;;;:::i;:::-;36346:18;:34;;;;36267:143:::0;:::o;35200:95::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35282:5:::1;35265:14;;:22;;;;;;;;;;;;;;;;;;35200:95:::0;:::o;31575:27::-;;;;:::o;9925:176::-;10039:7;10066:11;:18;10078:5;10066:18;;;;;;;;;;;;;;;:27;10085:7;10066:27;;;;;;;;;;;;;;;;10059:34;;9925:176;;;;:::o;31226:33::-;;;;:::o;35846:104::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35934:8:::1;35918:13;:24;;;;35846:104:::0;:::o;35958:111::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36052:9:::1;36036:13;;:25;;;;;;;;;;;;;;;;;;35958:111:::0;:::o;23368:281::-;22645:12;:10;:12::i;:::-;22635:22;;:6;;;;;;;;;;;:22;;;22627:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23491:1:::1;23471:22;;:8;:22;;::::0;23449:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:8;23575:38;;23596:6;;;;;;;;;;;23575:38;;;;;;;;;;;;23633:8;23624:6;;:17;;;;;;;;;;;;;;;;;;23368:281:::0;:::o;17345:181::-;17403:7;17423:9;17439:1;17435;:5;;;;:::i;:::-;17423:17;;17464:1;17459;:6;;17451:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17517:1;17510:8;;;17345:181;;;;:::o;186:98::-;239:7;266:10;259:17;;186:98;:::o;15967:380::-;16120:1;16103:19;;:5;:19;;;16095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16201:1;16182:21;;:7;:21;;;16174:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16285:6;16255:11;:18;16267:5;16255:18;;;;;;;;;;;;;;;:27;16274:7;16255:27;;;;;;;;;;;;;;;:36;;;;16323:7;16307:32;;16316:5;16307:32;;;16332:6;16307:32;;;;;;:::i;:::-;;;;;;;;15967:380;;;:::o;37062:2879::-;37210:1;37194:18;;:4;:18;;;37186:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37287:1;37273:16;;:2;:16;;;37265:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37356:1;37346:6;:11;37342:93;;37374:28;37390:4;37396:2;37400:1;37374:15;:28::i;:::-;37417:7;;37342:93;37451:14;;;;;;;;;;;37447:1270;;;37512:7;:5;:7::i;:::-;37504:15;;:4;:15;;;;:49;;;;;37546:7;:5;:7::i;:::-;37540:13;;:2;:13;;;;37504:49;:86;;;;;37588:1;37574:16;;:2;:16;;;;37504:86;:128;;;;;37625:6;37611:21;;:2;:21;;;;37504:128;37482:1224;;;37672:13;;;;;;;;;;;37667:223;;37744:19;:25;37764:4;37744:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37773:19;:23;37793:2;37773:23;;;;;;;;;;;;;;;;;;;;;;;;;37744:52;37710:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;37667:223;37964:25;:31;37990:4;37964:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;38021:31;:35;38053:2;38021:35;;;;;;;;;;;;;;;;;;;;;;;;;38020:36;37964:92;37938:753;;;38143:20;;38133:6;:30;;38099:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37938:753;;;38366:25;:29;38392:2;38366:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;38421:31;:37;38453:4;38421:37;;;;;;;;;;;;;;;;;;;;;;;;;38420:38;38366:92;38340:351;;;38545:20;;38535:6;:30;;38501:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;38340:351;37938:753;37482:1224;37447:1270;38727:28;38758:24;38776:4;38758:9;:24::i;:::-;38727:55;;38795:12;38834:18;;38810:20;:42;;38795:57;;38883:7;:33;;;;;38908:8;;;;;;;;;;;38907:9;38883:33;:61;;;;;38933:11;;;;;;;;;;;38883:61;:110;;;;;38962:25;:31;38988:4;38962:31;;;;;;;;;;;;;;;;;;;;;;;;;38961:32;38883:110;:153;;;;;39011:19;:25;39031:4;39011:25;;;;;;;;;;;;;;;;;;;;;;;;;39010:26;38883:153;:194;;;;;39054:19;:23;39074:2;39054:23;;;;;;;;;;;;;;;;;;;;;;;;;39053:24;38883:194;38865:326;;;39115:4;39104:8;;:15;;;;;;;;;;;;;;;;;;39136:10;:8;:10::i;:::-;39174:5;39163:8;;:16;;;;;;;;;;;;;;;;;;38865:326;39203:12;39219:8;;;;;;;;;;;39218:9;39203:24;;39244:19;:25;39264:4;39244:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39273:19;:23;39293:2;39273:23;;;;;;;;;;;;;;;;;;;;;;;;;39244:52;39240:100;;;39323:5;39313:15;;39240:100;39352:12;39385:7;39381:507;;;39437:25;:29;39463:2;39437:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39486:1;39470:13;;:17;39437:50;39433:306;;;39515:34;39545:3;39515:25;39526:13;;39515:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39508:41;;39433:306;;;39611:25;:31;39637:4;39611:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39661:1;39646:12;;:16;39611:51;39607:132;;;39690:33;39719:3;39690:24;39701:12;;39690:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39683:40;;39607:132;39433:306;39766:1;39759:4;:8;39755:91;;;39788:42;39804:4;39818;39825;39788:15;:42::i;:::-;39755:91;39872:4;39862:14;;;;;:::i;:::-;;;39381:507;39900:33;39916:4;39922:2;39926:6;39900:15;:33::i;:::-;37175:2766;;;;37062:2879;;;;:::o;18248:226::-;18368:7;18401:1;18396;:6;;18404:12;18388:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18428:9;18444:1;18440;:5;;;;:::i;:::-;18428:17;;18465:1;18458:8;;;18248:226;;;;;:::o;36732:188::-;36849:5;36815:25;:31;36841:4;36815:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36906:5;36872:40;;36900:4;36872:40;;;;;;;;;;;;36732:188;;:::o;13466:610::-;13624:1;13606:20;;:6;:20;;;13598:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13708:1;13687:23;;:9;:23;;;13679:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13763:47;13784:6;13792:9;13803:6;13763:20;:47::i;:::-;13843:108;13879:6;13843:108;;;;;;;;;;;;;;;;;:9;:17;13853:6;13843:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;13823:9;:17;13833:6;13823:17;;;;;;;;;;;;;;;:128;;;;13985:32;14010:6;13985:9;:20;13995:9;13985:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13962:9;:20;13972:9;13962:20;;;;;;;;;;;;;;;:55;;;;14050:9;14033:35;;14042:6;14033:35;;;14061:6;14033:35;;;;;;:::i;:::-;;;;;;;;13466:610;;;:::o;40546:476::-;40585:23;40611:24;40629:4;40611:9;:24::i;:::-;40585:50;;40646:12;40694:1;40675:15;:20;40671:59;;40712:7;;;;40671:59;40785:2;40764:18;;:23;;;;:::i;:::-;40746:15;:41;40742:115;;;40843:2;40822:18;;:23;;;;:::i;:::-;40804:41;;40742:115;40869:33;40886:15;40869:16;:33::i;:::-;40937:13;;;;;;;;;;;40929:27;;40964:21;40929:85;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40915:99;;;;;40574:448;;40546:476;:::o;18733:471::-;18791:7;19041:1;19036;:6;19032:47;;19066:1;19059:8;;;;19032:47;19091:9;19107:1;19103;:5;;;;:::i;:::-;19091:17;;19136:1;19131;19127;:5;;;;:::i;:::-;:10;19119:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19195:1;19188:8;;;18733:471;;;;;:::o;19680:132::-;19738:7;19765:39;19769:1;19772;19765:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19758:46;;19680:132;;;;:::o;16950:125::-;;;;:::o;39949:589::-;40075:21;40113:1;40099:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40075:40;;40144:4;40126;40131:1;40126:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40170:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40160:4;40165:1;40160:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40205:62;40222:4;40237:15;40255:11;40205:8;:62::i;:::-;40306:15;:66;;;40387:11;40413:1;40457:4;40484;40504:15;40306:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40004:534;39949:589;:::o;20308:312::-;20428:7;20460:1;20456;:5;20463:12;20448:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20487:9;20503:1;20499;:5;;;;:::i;:::-;20487:17;;20611:1;20604:8;;;20308:312;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:126::-;479:7;519:42;512:5;508:54;497:65;;442:126;;;:::o;574:96::-;611:7;640:24;658:5;640:24;:::i;:::-;629:35;;574:96;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2451:117::-;2560:1;2557;2550:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:122::-;3043:24;3061:5;3043:24;:::i;:::-;3036:5;3033:35;3023:63;;3082:1;3079;3072:12;3023:63;2970:122;:::o;3098:139::-;3144:5;3182:6;3169:20;3160:29;;3198:33;3225:5;3198:33;:::i;:::-;3098:139;;;;:::o;3243:474::-;3311:6;3319;3368:2;3356:9;3347:7;3343:23;3339:32;3336:119;;;3374:79;;:::i;:::-;3336:119;3494:1;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3465:117;3621:2;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3592:118;3243:474;;;;;:::o;3723:90::-;3757:7;3800:5;3793:13;3786:21;3775:32;;3723:90;;;:::o;3819:109::-;3900:21;3915:5;3900:21;:::i;:::-;3895:3;3888:34;3819:109;;:::o;3934:210::-;4021:4;4059:2;4048:9;4044:18;4036:26;;4072:65;4134:1;4123:9;4119:17;4110:6;4072:65;:::i;:::-;3934:210;;;;:::o;4150:329::-;4209:6;4258:2;4246:9;4237:7;4233:23;4229:32;4226:119;;;4264:79;;:::i;:::-;4226:119;4384:1;4409:53;4454:7;4445:6;4434:9;4430:22;4409:53;:::i;:::-;4399:63;;4355:117;4150:329;;;;:::o;4485:60::-;4513:3;4534:5;4527:12;;4485:60;;;:::o;4551:142::-;4601:9;4634:53;4652:34;4661:24;4679:5;4661:24;:::i;:::-;4652:34;:::i;:::-;4634:53;:::i;:::-;4621:66;;4551:142;;;:::o;4699:126::-;4749:9;4782:37;4813:5;4782:37;:::i;:::-;4769:50;;4699:126;;;:::o;4831:153::-;4908:9;4941:37;4972:5;4941:37;:::i;:::-;4928:50;;4831:153;;;:::o;4990:185::-;5104:64;5162:5;5104:64;:::i;:::-;5099:3;5092:77;4990:185;;:::o;5181:276::-;5301:4;5339:2;5328:9;5324:18;5316:26;;5352:98;5447:1;5436:9;5432:17;5423:6;5352:98;:::i;:::-;5181:276;;;;:::o;5463:329::-;5522:6;5571:2;5559:9;5550:7;5546:23;5542:32;5539:119;;;5577:79;;:::i;:::-;5539:119;5697:1;5722:53;5767:7;5758:6;5747:9;5743:22;5722:53;:::i;:::-;5712:63;;5668:117;5463:329;;;;:::o;5798:619::-;5875:6;5883;5891;5940:2;5928:9;5919:7;5915:23;5911:32;5908:119;;;5946:79;;:::i;:::-;5908:119;6066:1;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6037:117;6193:2;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6164:118;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;5798:619;;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:474::-;6921:6;6929;6978:2;6966:9;6957:7;6953:23;6949:32;6946:119;;;6984:79;;:::i;:::-;6946:119;7104:1;7129:53;7174:7;7165:6;7154:9;7150:22;7129:53;:::i;:::-;7119:63;;7075:117;7231:2;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7202:118;6853:474;;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:180::-;8925:77;8922:1;8915:88;9022:4;9019:1;9012:15;9046:4;9043:1;9036:15;9063:320;9107:6;9144:1;9138:4;9134:12;9124:22;;9191:1;9185:4;9181:12;9212:18;9202:81;;9268:4;9260:6;9256:17;9246:27;;9202:81;9330:2;9322:6;9319:14;9299:18;9296:38;9293:84;;9349:18;;:::i;:::-;9293:84;9114:269;9063:320;;;:::o;9389:182::-;9529:34;9525:1;9517:6;9513:14;9506:58;9389:182;:::o;9577:366::-;9719:3;9740:67;9804:2;9799:3;9740:67;:::i;:::-;9733:74;;9816:93;9905:3;9816:93;:::i;:::-;9934:2;9929:3;9925:12;9918:19;;9577:366;;;:::o;9949:419::-;10115:4;10153:2;10142:9;10138:18;10130:26;;10202:9;10196:4;10192:20;10188:1;10177:9;10173:17;10166:47;10230:131;10356:4;10230:131;:::i;:::-;10222:139;;9949:419;;;:::o;10374:180::-;10422:77;10419:1;10412:88;10519:4;10516:1;10509:15;10543:4;10540:1;10533:15;10560:410;10600:7;10623:20;10641:1;10623:20;:::i;:::-;10618:25;;10657:20;10675:1;10657:20;:::i;:::-;10652:25;;10712:1;10709;10705:9;10734:30;10752:11;10734:30;:::i;:::-;10723:41;;10913:1;10904:7;10900:15;10897:1;10894:22;10874:1;10867:9;10847:83;10824:139;;10943:18;;:::i;:::-;10824:139;10608:362;10560:410;;;;:::o;10976:180::-;11024:77;11021:1;11014:88;11121:4;11118:1;11111:15;11145:4;11142:1;11135:15;11162:185;11202:1;11219:20;11237:1;11219:20;:::i;:::-;11214:25;;11253:20;11271:1;11253:20;:::i;:::-;11248:25;;11292:1;11282:35;;11297:18;;:::i;:::-;11282:35;11339:1;11336;11332:9;11327:14;;11162:185;;;;:::o;11353:332::-;11474:4;11512:2;11501:9;11497:18;11489:26;;11525:71;11593:1;11582:9;11578:17;11569:6;11525:71;:::i;:::-;11606:72;11674:2;11663:9;11659:18;11650:6;11606:72;:::i;:::-;11353:332;;;;;:::o;11691:137::-;11745:5;11776:6;11770:13;11761:22;;11792:30;11816:5;11792:30;:::i;:::-;11691:137;;;;:::o;11834:345::-;11901:6;11950:2;11938:9;11929:7;11925:23;11921:32;11918:119;;;11956:79;;:::i;:::-;11918:119;12076:1;12101:61;12154:7;12145:6;12134:9;12130:22;12101:61;:::i;:::-;12091:71;;12047:125;11834:345;;;;:::o;12185:244::-;12325:34;12321:1;12313:6;12309:14;12302:58;12394:27;12389:2;12381:6;12377:15;12370:52;12185:244;:::o;12435:366::-;12577:3;12598:67;12662:2;12657:3;12598:67;:::i;:::-;12591:74;;12674:93;12763:3;12674:93;:::i;:::-;12792:2;12787:3;12783:12;12776:19;;12435:366;;;:::o;12807:419::-;12973:4;13011:2;13000:9;12996:18;12988:26;;13060:9;13054:4;13050:20;13046:1;13035:9;13031:17;13024:47;13088:131;13214:4;13088:131;:::i;:::-;13080:139;;12807:419;;;:::o;13232:225::-;13372:34;13368:1;13360:6;13356:14;13349:58;13441:8;13436:2;13428:6;13424:15;13417:33;13232:225;:::o;13463:366::-;13605:3;13626:67;13690:2;13685:3;13626:67;:::i;:::-;13619:74;;13702:93;13791:3;13702:93;:::i;:::-;13820:2;13815:3;13811:12;13804:19;;13463:366;;;:::o;13835:419::-;14001:4;14039:2;14028:9;14024:18;14016:26;;14088:9;14082:4;14078:20;14074:1;14063:9;14059:17;14052:47;14116:131;14242:4;14116:131;:::i;:::-;14108:139;;13835:419;;;:::o;14260:191::-;14300:3;14319:20;14337:1;14319:20;:::i;:::-;14314:25;;14353:20;14371:1;14353:20;:::i;:::-;14348:25;;14396:1;14393;14389:9;14382:16;;14417:3;14414:1;14411:10;14408:36;;;14424:18;;:::i;:::-;14408:36;14260:191;;;;:::o;14457:177::-;14597:29;14593:1;14585:6;14581:14;14574:53;14457:177;:::o;14640:366::-;14782:3;14803:67;14867:2;14862:3;14803:67;:::i;:::-;14796:74;;14879:93;14968:3;14879:93;:::i;:::-;14997:2;14992:3;14988:12;14981:19;;14640:366;;;:::o;15012:419::-;15178:4;15216:2;15205:9;15201:18;15193:26;;15265:9;15259:4;15255:20;15251:1;15240:9;15236:17;15229:47;15293:131;15419:4;15293:131;:::i;:::-;15285:139;;15012:419;;;:::o;15437:223::-;15577:34;15573:1;15565:6;15561:14;15554:58;15646:6;15641:2;15633:6;15629:15;15622:31;15437:223;:::o;15666:366::-;15808:3;15829:67;15893:2;15888:3;15829:67;:::i;:::-;15822:74;;15905:93;15994:3;15905:93;:::i;:::-;16023:2;16018:3;16014:12;16007:19;;15666:366;;;:::o;16038:419::-;16204:4;16242:2;16231:9;16227:18;16219:26;;16291:9;16285:4;16281:20;16277:1;16266:9;16262:17;16255:47;16319:131;16445:4;16319:131;:::i;:::-;16311:139;;16038:419;;;:::o;16463:221::-;16603:34;16599:1;16591:6;16587:14;16580:58;16672:4;16667:2;16659:6;16655:15;16648:29;16463:221;:::o;16690:366::-;16832:3;16853:67;16917:2;16912:3;16853:67;:::i;:::-;16846:74;;16929:93;17018:3;16929:93;:::i;:::-;17047:2;17042:3;17038:12;17031:19;;16690:366;;;:::o;17062:419::-;17228:4;17266:2;17255:9;17251:18;17243:26;;17315:9;17309:4;17305:20;17301:1;17290:9;17286:17;17279:47;17343:131;17469:4;17343:131;:::i;:::-;17335:139;;17062:419;;;:::o;17487:224::-;17627:34;17623:1;17615:6;17611:14;17604:58;17696:7;17691:2;17683:6;17679:15;17672:32;17487:224;:::o;17717:366::-;17859:3;17880:67;17944:2;17939:3;17880:67;:::i;:::-;17873:74;;17956:93;18045:3;17956:93;:::i;:::-;18074:2;18069:3;18065:12;18058:19;;17717:366;;;:::o;18089:419::-;18255:4;18293:2;18282:9;18278:18;18270:26;;18342:9;18336:4;18332:20;18328:1;18317:9;18313:17;18306:47;18370:131;18496:4;18370:131;:::i;:::-;18362:139;;18089:419;;;:::o;18514:222::-;18654:34;18650:1;18642:6;18638:14;18631:58;18723:5;18718:2;18710:6;18706:15;18699:30;18514:222;:::o;18742:366::-;18884:3;18905:67;18969:2;18964:3;18905:67;:::i;:::-;18898:74;;18981:93;19070:3;18981:93;:::i;:::-;19099:2;19094:3;19090:12;19083:19;;18742:366;;;:::o;19114:419::-;19280:4;19318:2;19307:9;19303:18;19295:26;;19367:9;19361:4;19357:20;19353:1;19342:9;19338:17;19331:47;19395:131;19521:4;19395:131;:::i;:::-;19387:139;;19114:419;;;:::o;19539:172::-;19679:24;19675:1;19667:6;19663:14;19656:48;19539:172;:::o;19717:366::-;19859:3;19880:67;19944:2;19939:3;19880:67;:::i;:::-;19873:74;;19956:93;20045:3;19956:93;:::i;:::-;20074:2;20069:3;20065:12;20058:19;;19717:366;;;:::o;20089:419::-;20255:4;20293:2;20282:9;20278:18;20270:26;;20342:9;20336:4;20332:20;20328:1;20317:9;20313:17;20306:47;20370:131;20496:4;20370:131;:::i;:::-;20362:139;;20089:419;;;:::o;20514:240::-;20654:34;20650:1;20642:6;20638:14;20631:58;20723:23;20718:2;20710:6;20706:15;20699:48;20514:240;:::o;20760:366::-;20902:3;20923:67;20987:2;20982:3;20923:67;:::i;:::-;20916:74;;20999:93;21088:3;20999:93;:::i;:::-;21117:2;21112:3;21108:12;21101:19;;20760:366;;;:::o;21132:419::-;21298:4;21336:2;21325:9;21321:18;21313:26;;21385:9;21379:4;21375:20;21371:1;21360:9;21356:17;21349:47;21413:131;21539:4;21413:131;:::i;:::-;21405:139;;21132:419;;;:::o;21557:241::-;21697:34;21693:1;21685:6;21681:14;21674:58;21766:24;21761:2;21753:6;21749:15;21742:49;21557:241;:::o;21804:366::-;21946:3;21967:67;22031:2;22026:3;21967:67;:::i;:::-;21960:74;;22043:93;22132:3;22043:93;:::i;:::-;22161:2;22156:3;22152:12;22145:19;;21804:366;;;:::o;22176:419::-;22342:4;22380:2;22369:9;22365:18;22357:26;;22429:9;22423:4;22419:20;22415:1;22404:9;22400:17;22393:47;22457:131;22583:4;22457:131;:::i;:::-;22449:139;;22176:419;;;:::o;22601:194::-;22641:4;22661:20;22679:1;22661:20;:::i;:::-;22656:25;;22695:20;22713:1;22695:20;:::i;:::-;22690:25;;22739:1;22736;22732:9;22724:17;;22763:1;22757:4;22754:11;22751:37;;;22768:18;;:::i;:::-;22751:37;22601:194;;;;:::o;22801:147::-;22902:11;22939:3;22924:18;;22801:147;;;;:::o;22954:114::-;;:::o;23074:398::-;23233:3;23254:83;23335:1;23330:3;23254:83;:::i;:::-;23247:90;;23346:93;23435:3;23346:93;:::i;:::-;23464:1;23459:3;23455:11;23448:18;;23074:398;;;:::o;23478:379::-;23662:3;23684:147;23827:3;23684:147;:::i;:::-;23677:154;;23848:3;23841:10;;23478:379;;;:::o;23863:220::-;24003:34;23999:1;23991:6;23987:14;23980:58;24072:3;24067:2;24059:6;24055:15;24048:28;23863:220;:::o;24089:366::-;24231:3;24252:67;24316:2;24311:3;24252:67;:::i;:::-;24245:74;;24328:93;24417:3;24328:93;:::i;:::-;24446:2;24441:3;24437:12;24430:19;;24089:366;;;:::o;24461:419::-;24627:4;24665:2;24654:9;24650:18;24642:26;;24714:9;24708:4;24704:20;24700:1;24689:9;24685:17;24678:47;24742:131;24868:4;24742:131;:::i;:::-;24734:139;;24461:419;;;:::o;24886:180::-;24934:77;24931:1;24924:88;25031:4;25028:1;25021:15;25055:4;25052:1;25045:15;25072:180;25120:77;25117:1;25110:88;25217:4;25214:1;25207:15;25241:4;25238:1;25231:15;25258:143;25315:5;25346:6;25340:13;25331:22;;25362:33;25389:5;25362:33;:::i;:::-;25258:143;;;;:::o;25407:351::-;25477:6;25526:2;25514:9;25505:7;25501:23;25497:32;25494:119;;;25532:79;;:::i;:::-;25494:119;25652:1;25677:64;25733:7;25724:6;25713:9;25709:22;25677:64;:::i;:::-;25667:74;;25623:128;25407:351;;;;:::o;25764:85::-;25809:7;25838:5;25827:16;;25764:85;;;:::o;25855:158::-;25913:9;25946:61;25964:42;25973:32;25999:5;25973:32;:::i;:::-;25964:42;:::i;:::-;25946:61;:::i;:::-;25933:74;;25855:158;;;:::o;26019:147::-;26114:45;26153:5;26114:45;:::i;:::-;26109:3;26102:58;26019:147;;:::o;26172:114::-;26239:6;26273:5;26267:12;26257:22;;26172:114;;;:::o;26292:184::-;26391:11;26425:6;26420:3;26413:19;26465:4;26460:3;26456:14;26441:29;;26292:184;;;;:::o;26482:132::-;26549:4;26572:3;26564:11;;26602:4;26597:3;26593:14;26585:22;;26482:132;;;:::o;26620:108::-;26697:24;26715:5;26697:24;:::i;:::-;26692:3;26685:37;26620:108;;:::o;26734:179::-;26803:10;26824:46;26866:3;26858:6;26824:46;:::i;:::-;26902:4;26897:3;26893:14;26879:28;;26734:179;;;;:::o;26919:113::-;26989:4;27021;27016:3;27012:14;27004:22;;26919:113;;;:::o;27068:732::-;27187:3;27216:54;27264:5;27216:54;:::i;:::-;27286:86;27365:6;27360:3;27286:86;:::i;:::-;27279:93;;27396:56;27446:5;27396:56;:::i;:::-;27475:7;27506:1;27491:284;27516:6;27513:1;27510:13;27491:284;;;27592:6;27586:13;27619:63;27678:3;27663:13;27619:63;:::i;:::-;27612:70;;27705:60;27758:6;27705:60;:::i;:::-;27695:70;;27551:224;27538:1;27535;27531:9;27526:14;;27491:284;;;27495:14;27791:3;27784:10;;27192:608;;;27068:732;;;;:::o;27806:831::-;28069:4;28107:3;28096:9;28092:19;28084:27;;28121:71;28189:1;28178:9;28174:17;28165:6;28121:71;:::i;:::-;28202:80;28278:2;28267:9;28263:18;28254:6;28202:80;:::i;:::-;28329:9;28323:4;28319:20;28314:2;28303:9;28299:18;28292:48;28357:108;28460:4;28451:6;28357:108;:::i;:::-;28349:116;;28475:72;28543:2;28532:9;28528:18;28519:6;28475:72;:::i;:::-;28557:73;28625:3;28614:9;28610:19;28601:6;28557:73;:::i;:::-;27806:831;;;;;;;;:::o

Swarm Source

ipfs://13098c2b8534d3143026f6a3f2406b5939fc1c2d72f43adee92cbe290944bf9e
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.