ETH Price: $3,392.72 (-2.54%)
Gas: 1 Gwei

Token

Metachain (Metchain)
 

Overview

Max Total Supply

1,000,000,000 Metchain

Holders

4

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,476,717.130211788468964425 Metchain

Value
$0.00
0x76bb7a550c05ae1dcda72dc0d21762db794d301f
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Metachain

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-23
*/

// SPDX-License-Identifier: MIT
/**

// Get ready to dive into a decentralized dreamland known as Metachain

**/ 

pragma solidity 0.8.17;

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
} 

// Safe Math Helpers 
// --------------------------------------------------------------
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 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;
    uint8 private _decimals;

    /**
     * @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_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    /**
     * @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 _decimals;
    }

    /**
     * @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 _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: cannot send 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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// Uniswap Router 
// --------------------------------------------------------------
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function allPairsLength() external view returns (uint256);
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);
    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);
    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);
    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}


// Main Contract Logic 
// --------------------------------------------------------------
contract Metachain  is Context, IERC20, Ownable {
    // Imports
    using SafeMath for uint256;
    using Address for address;

    // Configurables -----------------------------
    
    // Context";
    string private _name = "Metachain";
    string private _symbol = "Metchain";
    uint8 private _decimals = 18;

    // Supply 
    uint256 private _totalSupply = 1 * 1e9 * 1e18;    
    uint256 private minimumTokensBeforeSwap = _totalSupply * 1 / 1000;    

    // Restrictions
    uint256 public _maxTxAmount = (_totalSupply * 30) / 1000;      
    uint256 public _walletMax = (_totalSupply * 30) / 1000; 
    bool public checkWalletLimit = true;
    
    // wallets
    address payable public liquidityWallet = payable(0x99966FdD0d949A2c9F130b42Ca2c12113341FF72);
    address payable public operationsWallet =  payable(0x99966FdD0d949A2c9F130b42Ca2c12113341FF72);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    // fees    
    uint256 public liquidityFeeBuy = 0;
    uint256 public operationsFeeBuy = 4;
    uint256 public totalFeesBuy;
    uint256 public maxTotalFeeBuy = 10;

    // fees
    uint256 public liquidityFeeSell = 0;
    uint256 public operationsFeeSell = 75;
    uint256 public totalFeesSell;
    uint256 public maxTotalFeeSell = 99;

    // distribution ratio
    uint256 public _liquiditySharePercentage = 0;
    uint256 public _operationsSharePercentage = 100;
    uint256 public _totalDistributionShares;

    // max amounts    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) isTxLimitExempt;

    // Router Information    
    mapping (address => bool) public isMarketPair;
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair; 
    
    // toggle swap back (fees)
    bool inSwapAndLiquify;
    uint256 public tokensForLiquidity;
    uint256 public tokensForOperations;    

    // Launch Settings
    bool public tradingOpen = true;    

    // events    
    event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet);
    event OperationsWalletUpdated(address indexed newOperationsWallet, address indexed oldOperationsWallet); 
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); 
    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    // toogle to stop swap if already underway
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {

        // load total fees 
        totalFeesBuy = operationsFeeBuy + liquidityFeeBuy;
        totalFeesSell = operationsFeeSell + liquidityFeeSell; 

        // load total distribution 
        _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage;
        
        // create router ------------------------------
        IUniswapV2Router02 _uniswapV2Router;
        if (block.chainid == 1) {
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (block.chainid == 5) {
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else revert();

         // Create a uniswap pair for this new token         
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router; 
        isMarketPair[address(uniswapPair)] = true;

        // set allowances        
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;
        
        // exclude from paying fees or having max transaction amount
        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[address(0xdead)] = true; 
        isExcludedFromFee[liquidityWallet] = true; 
        isExcludedFromFee[operationsWallet] = true; 
        
        // exclude contracts from max wallet size
        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[liquidityWallet] = true; 
        isWalletLimitExempt[operationsWallet] = true; 
        
        // exclude contracts from max wallet size
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        
        _balances[_msgSender()] = _totalSupply;   
        emit Transfer(address(0), _msgSender(), _totalSupply);  
    }

    receive() external payable {

  	}
  	
  	// @dev Public read functions start -------------------------------------
    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    // custom allowance methods
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    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;
    }
    
    // get minimum tokens before swap
    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    // approve spending methods
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }
    
    function getBlock()public view returns (uint256) {
        return block.number;
    }

  	// @dev Owner functions start -------------------------------------
    
    // toogle market pair status
    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    // set excluded xx limit 
    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    // update max tx amount
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    // set excluded tax 
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }
    
    // update fees
    function updateFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner {
        operationsFeeBuy = _operationsFee;
        liquidityFeeBuy = _liquidityFee;
        totalFeesBuy = operationsFeeBuy + liquidityFeeBuy;
        require(totalFeesBuy <= maxTotalFeeBuy, "Must keep fees at maxTotalFeeBuy or less");
    }

    function updateFeesSell(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner {
        operationsFeeSell = _operationsFee;
        liquidityFeeSell = _liquidityFee;
        totalFeesSell = operationsFeeSell + liquidityFeeSell;
        require(totalFeesSell <= maxTotalFeeSell, "Must keep fees at maxTotalFeeSell or less");
    }
    
    // set distribution settings
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newOperationsShare) external onlyOwner() {
        _liquiditySharePercentage = newLiquidityShare;
        _operationsSharePercentage = newOperationsShare; 
        _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage;
        require(_totalDistributionShares == 100, "Distribution needs to total to 100");
    }

    // remove wallet limit
    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }
    
    // set excluded wallet limit 
    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }
    
    // update wallet limit
    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }
    
    // change the minimum amount of tokens to sell from fees
    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    // sets the wallet that receives LP tokens to lock
    function updateLiquidityWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Cannot set to address 0");
        isExcludedFromFee[newAddress] = true;
        isExcludedFromFee[liquidityWallet] = false;
        emit LiquidityWalletUpdated(newAddress, liquidityWallet);
        liquidityWallet =  payable(newAddress);
    }
    
    // updates the operations wallet (marketing, charity, etc.)
    function updateOperationsWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Cannot set to address 0");
        isExcludedFromFee[newAddress] = true;
        isExcludedFromFee[operationsWallet] = false;
        emit OperationsWalletUpdated(newAddress, operationsWallet);
        operationsWallet = payable(newAddress);
    }    

    // transfer amount to address
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    // change router address
    function changeRouterAddress(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 
        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        // check if new pair deployed
        if(newPairAddress == address(0)) 
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; 
        uniswapV2Router = _uniswapV2Router; 
        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

    // once enabled, can never be turned off
    function setTrading() public onlyOwner {
        tradingOpen = true;
    }
          
    // pre airdrop to any holders    
    function airdropToWallets(address[] memory airdropWallets, uint256[] memory amount) external onlyOwner() {
        require(airdropWallets.length == amount.length, "airdropToWallets:: Arrays must be the same length");
        for(uint256 i = 0; i < airdropWallets.length; i++){
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i];
            emit Transfer(msg.sender, wallet, airdropAmount);
        }
    }

    // @dev Views start here ------------------------------------

    // @dev User Callable Functions start here! ---------------------------------------------  

     function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }   

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        // check trading open
        if (!tradingOpen) {
            require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
        }

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {   
            // required for wallet distribution    
            if (sender != owner() && recipient != owner()){ 
                _checkTxLimit(sender,amount); 
            }

            // check can swap for fees and liq
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender]) 
            {
                swapAndLiquify(contractTokenBalance);    
            }

            // check senders balance
            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            // check wallet holding limit
            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            // continue    
            _balances[recipient] = _balances[recipient].add(finalAmount);
            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    // transfer for     
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    // take fee method
    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = 0;
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(totalFeesBuy).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(totalFeesSell).div(100);
        }
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }
        return amount.sub(feeAmount);
    }

    // swap tokens for fees and liq
    function swapAndLiquify(uint256 swapAmount) private lockTheSwap {

        // check there are currently tokens to sell
        uint256 tokensForLP = swapAmount.mul(_liquiditySharePercentage).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = swapAmount.sub(tokensForLP);   

        // swap tokens
        swapTokensForEth(tokensForSwap);

        // received amount
        uint256 amountReceived = address(this).balance;
        
        // work out distribution
        uint256 totalFee = _totalDistributionShares.sub(_liquiditySharePercentage.div(2));
        uint256 amountLiquidity = amountReceived.mul(_liquiditySharePercentage).div(totalFee).div(2);                
        uint256 amountOperations = amountReceived.sub(amountLiquidity);

        if(amountOperations > 0)
            transferToAddressETH(operationsWallet, amountOperations);

        if(amountLiquidity > 0 && tokensForLP > 0){
            addLiquidity(tokensForLP, amountLiquidity);
            emit SwapAndLiquify(tokensForSwap, amountLiquidity, tokensForLP);
        }
    }

    // swap tokens to eth
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this), 
            block.timestamp
        );
        emit SwapTokensForETH(tokenAmount, path);
    }

    // add liqiudity 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }
    
    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens(uint256 ETHAmountInWei) external onlyOwner {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function _checkTxLimit(address sender, uint256 amount) private view{ 
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOperationsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldOperationsWallet","type":"address"}],"name":"OperationsWalletUpdated","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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"inputs":[],"name":"_liquiditySharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ETHAmountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterAddress","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":"operationsFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newOperationsShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600981526020017f4d657461636861696e0000000000000000000000000000000000000000000000815250600190816200004a919062000f3c565b506040518060400160405280600881526020017f4d6574636861696e0000000000000000000000000000000000000000000000008152506002908162000091919062000f3c565b506012600360006101000a81548160ff021916908360ff1602179055506b033b2e3c9fd0803ce80000006004556103e86001600454620000d2919062001052565b620000de9190620010cc565b6005556103e8601e600454620000f5919062001052565b620001019190620010cc565b6006556103e8601e60045462000118919062001052565b620001249190620010cc565b6007556001600860006101000a81548160ff0219169083151502179055507399966fdd0d949a2c9f130b42ca2c12113341ff72600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507399966fdd0d949a2c9f130b42ca2c12113341ff72600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600a556004600b55600a600d556000600e55604b600f556063601155600060125560646013556001601f60006101000a81548160ff0219169083151502179055503480156200027157600080fd5b5060006200028462000c9160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600b5462000334919062001104565b600c81905550600e54600f546200034c919062001104565b60108190555060135460125462000364919062001104565b6014819055506000600146036200039257737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003be565b60054603620003b857737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003bd565b600080fd5b5b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004309190620011a9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000498573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004be9190620011a9565b6040518363ffffffff1660e01b8152600401620004dd929190620011ec565b6020604051808303816000875af1158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005239190620011a9565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600454601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160176000620006d962000c9960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000620008e662000c9960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600062000b1362000c9960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506004546015600062000bd362000c9160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000c2162000c9160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000c8291906200122a565b60405180910390a35062001247565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d4457607f821691505b60208210810362000d5a5762000d5962000cfc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dc47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d85565b62000dd0868362000d85565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e1d62000e1762000e118462000de8565b62000df2565b62000de8565b9050919050565b6000819050919050565b62000e398362000dfc565b62000e5162000e488262000e24565b84845462000d92565b825550505050565b600090565b62000e6862000e59565b62000e7581848462000e2e565b505050565b5b8181101562000e9d5762000e9160008262000e5e565b60018101905062000e7b565b5050565b601f82111562000eec5762000eb68162000d60565b62000ec18462000d75565b8101602085101562000ed1578190505b62000ee962000ee08562000d75565b83018262000e7a565b50505b505050565b600082821c905092915050565b600062000f116000198460080262000ef1565b1980831691505092915050565b600062000f2c838362000efe565b9150826002028217905092915050565b62000f478262000cc2565b67ffffffffffffffff81111562000f635762000f6262000ccd565b5b62000f6f825462000d2b565b62000f7c82828562000ea1565b600060209050601f83116001811462000fb4576000841562000f9f578287015190505b62000fab858262000f1e565b8655506200101b565b601f19841662000fc48662000d60565b60005b8281101562000fee5784890151825560018201915060208501945060208101905062000fc7565b868310156200100e57848901516200100a601f89168262000efe565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200105f8262000de8565b91506200106c8362000de8565b92508282026200107c8162000de8565b9150828204841483151762001096576200109562001023565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010d98262000de8565b9150620010e68362000de8565b925082620010f957620010f86200109d565b5b828204905092915050565b6000620011118262000de8565b91506200111e8362000de8565b925082820190508082111562001139576200113862001023565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011718262001144565b9050919050565b620011838162001164565b81146200118f57600080fd5b50565b600081519050620011a38162001178565b92915050565b600060208284031215620011c257620011c16200113f565b5b6000620011d28482850162001192565b91505092915050565b620011e68162001164565b82525050565b6000604082019050620012036000830185620011db565b620012126020830184620011db565b9392505050565b620012248162000de8565b82525050565b600060208201905062001241600083018462001219565b92915050565b6080516159536200126a60003960008181611824015261185001526159536000f3fe6080604052600436106103905760003560e01c80637c519ffb116101dc578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d59578063fc155d1d14610d84578063fd72e22a14610dad578063ffb54a9914610dd857610397565b8063f1d5f51714610cb3578063f2fde38b14610cdc578063f84ba65d14610d05578063f872858a14610d2e57610397565b8063e37ba8f9116100dc578063e37ba8f914610c0f578063ec28438a14610c38578063eea5b63f14610c61578063ef422a1814610c8a57610397565b8063d469801614610b7c578063dd62ed3e14610ba7578063e10e9f3214610be457610397565b806395d89b411161017a578063a9059cbb11610149578063a9059cbb14610aac578063ac23ca5914610ae9578063c816841b14610b14578063c867d60b14610b3f57610397565b806395d89b41146109ee578063a073d37f14610a19578063a08e671f14610a44578063a457c2d714610a6f57610397565b806382d20116116101b657806382d2011614610946578063844d591c14610971578063876b6f8e1461099a5780638da5cb5b146109c357610397565b80637c519ffb146108d95780637d1db4a5146108f0578063807c2d9c1461091b57610397565b806327c8f835116102c15780633b97084a1161025f5780636db794371161022e5780636db794371461083157806370a082311461085a578063715018a6146108975780637849c1cd146108ae57610397565b80633b97084a146107635780633ecad2711461078c5780634b743995146107c95780635342acb4146107f457610397565b80632e97766d1161029b5780632e97766d146106a757806330d5d18d146106d2578063313ce567146106fb578063395093511461072657610397565b806327c8f835146106265780632b112e49146106515780632baa72171461067c57610397565b806318160ddd1161032e5780632198cf6c116103085780632198cf6c1461056e5780632307b4411461059757806323b872dd146105c05780632563ae83146105fd57610397565b806318160ddd146104ed57806319c59e2c146105185780631a8145bb1461054357610397565b8063095ea7b31161036a578063095ea7b31461042f5780630e47e8221461046c5780631107b3a5146104975780631694505e146104c257610397565b8063031d6cd01461039c57806304db6e68146103c757806306fdde031461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e03565b6040516103be919061444f565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e991906144dc565b610e09565b6040516103fb9190614518565b60405180910390f35b34801561041057600080fd5b5061041961130c565b60405161042691906145c3565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614611565b61139e565b604051610463919061466c565b60405180910390f35b34801561047857600080fd5b506104816113bc565b60405161048e919061444f565b60405180910390f35b3480156104a357600080fd5b506104ac6113c2565b6040516104b9919061444f565b60405180910390f35b3480156104ce57600080fd5b506104d76113c8565b6040516104e491906146e6565b60405180910390f35b3480156104f957600080fd5b506105026113ee565b60405161050f919061444f565b60405180910390f35b34801561052457600080fd5b5061052d6113f8565b60405161053a919061444f565b60405180910390f35b34801561054f57600080fd5b506105586113fe565b604051610565919061444f565b60405180910390f35b34801561057a57600080fd5b506105956004803603810190610590919061472d565b611404565b005b3480156105a357600080fd5b506105be60048036038101906105b99190614978565b6114f4565b005b3480156105cc57600080fd5b506105e760048036038101906105e291906149f0565b611696565b6040516105f4919061466c565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190614a43565b611770565b005b34801561063257600080fd5b5061063b611822565b6040516106489190614518565b60405180910390f35b34801561065d57600080fd5b50610666611846565b604051610673919061444f565b60405180910390f35b34801561068857600080fd5b5061069161188a565b60405161069e919061444f565b60405180910390f35b3480156106b357600080fd5b506106bc611890565b6040516106c9919061444f565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906144dc565b611898565b005b34801561070757600080fd5b50610710611b2e565b60405161071d9190614a8c565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614611565b611b45565b60405161075a919061466c565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190614aa7565b611bf8565b005b34801561079857600080fd5b506107b360048036038101906107ae91906144dc565b611c97565b6040516107c0919061466c565b60405180910390f35b3480156107d557600080fd5b506107de611cb7565b6040516107eb919061444f565b60405180910390f35b34801561080057600080fd5b5061081b600480360381019061081691906144dc565b611cbd565b604051610828919061466c565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614ad4565b611cdd565b005b34801561086657600080fd5b50610881600480360381019061087c91906144dc565b611de1565b60405161088e919061444f565b60405180910390f35b3480156108a357600080fd5b506108ac611e2a565b005b3480156108ba57600080fd5b506108c3611f7d565b6040516108d0919061444f565b60405180910390f35b3480156108e557600080fd5b506108ee611f83565b005b3480156108fc57600080fd5b50610905612035565b604051610912919061444f565b60405180910390f35b34801561092757600080fd5b5061093061203b565b60405161093d919061444f565b60405180910390f35b34801561095257600080fd5b5061095b612041565b604051610968919061444f565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061472d565b612047565b005b3480156109a657600080fd5b506109c160048036038101906109bc9190614ad4565b612137565b005b3480156109cf57600080fd5b506109d861223b565b6040516109e59190614518565b60405180910390f35b3480156109fa57600080fd5b50610a03612264565b604051610a1091906145c3565b60405180910390f35b348015610a2557600080fd5b50610a2e6122f6565b604051610a3b919061444f565b60405180910390f35b348015610a5057600080fd5b50610a59612300565b604051610a66919061444f565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614611565b612306565b604051610aa3919061466c565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190614611565b6123d3565b604051610ae0919061466c565b60405180910390f35b348015610af557600080fd5b50610afe6123f2565b604051610b0b919061444f565b60405180910390f35b348015610b2057600080fd5b50610b296123f8565b604051610b369190614518565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b6191906144dc565b61241e565b604051610b73919061466c565b60405180910390f35b348015610b8857600080fd5b50610b9161243e565b604051610b9e9190614b35565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614b50565b612464565b604051610bdb919061444f565b60405180910390f35b348015610bf057600080fd5b50610bf96124eb565b604051610c06919061444f565b60405180910390f35b348015610c1b57600080fd5b50610c366004803603810190610c3191906144dc565b6124f1565b005b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190614aa7565b612787565b005b348015610c6d57600080fd5b50610c886004803603810190610c839190614ad4565b612826565b005b348015610c9657600080fd5b50610cb16004803603810190610cac919061472d565b612928565b005b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614aa7565b612a18565b005b348015610ce857600080fd5b50610d036004803603810190610cfe91906144dc565b612ab7565b005b348015610d1157600080fd5b50610d2c6004803603810190610d27919061472d565b612c78565b005b348015610d3a57600080fd5b50610d43612d68565b604051610d50919061466c565b60405180910390f35b348015610d6557600080fd5b50610d6e612d7b565b604051610d7b919061444f565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da69190614aa7565b612d81565b005b348015610db957600080fd5b50610dc261302d565b604051610dcf9190614b35565b60405180910390f35b348015610de457600080fd5b50610ded613053565b604051610dfa919061466c565b60405180910390f35b600f5481565b6000610e13613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790614bdc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f149190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190614c11565b6040518363ffffffff1660e01b8152600401610fbc929190614c3e565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190614c11565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190614c11565b6040518363ffffffff1660e01b815260040161114a929190614c3e565b6020604051808303816000875af1158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190614c11565b91505b81601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60606001805461131b90614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461134790614c96565b80156113945780601f1061136957610100808354040283529160200191611394565b820191906000526020600020905b81548152906001019060200180831161137757829003601f168201915b5050505050905090565b60006113b26113ab613066565b848461306e565b6001905092915050565b60105481565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c5481565b601d5481565b61140c613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090614bdc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114fc613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090614bdc565b60405180910390fd5b80518251146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614d39565b60405180910390fd5b60005b82518110156116915760008382815181106115ee576115ed614d59565b5b60200260200101519050600083838151811061160d5761160c614d59565b5b602002602001015190508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611674919061444f565b60405180910390a35050808061168990614db7565b9150506115d0565b505050565b60006116a3848484613237565b50611765846116b0613066565b611760856040518060600160405280602881526020016158d160289139601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611716613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b600190509392505050565b611778613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90614bdc565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006118856118747f0000000000000000000000000000000000000000000000000000000000000000611de1565b60045461386c90919063ffffffff16565b905090565b60135481565b600043905090565b6118a0613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611bee611b52613066565b84611be98560166000611b63613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b61306e565b6001905092915050565b611c00613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614bdc565b60405180910390fd5b8060058190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60176020528060005260406000206000915054906101000a900460ff1681565b611ce5613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990614bdc565b60405180910390fd5b81600b8190555080600a81905550600a54600b54611d909190614e6b565b600c81905550600d54600c541115611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614f11565b60405180910390fd5b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e32613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611f8b613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f90614bdc565b60405180910390fd5b6001601f60006101000a81548160ff021916908315150217905550565b60065481565b60075481565b600a5481565b61204f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614bdc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61213f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614bdc565b60405180910390fd5b81600f8190555080600e81905550600e54600f546121ea9190614e6b565b6010819055506011546010541115612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614fa3565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461227390614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461229f90614c96565b80156122ec5780601f106122c1576101008083540402835291602001916122ec565b820191906000526020600020905b8154815290600101906020018083116122cf57829003601f168201915b5050505050905090565b6000600554905090565b60145481565b60006123c9612313613066565b846123c4856040518060600160405280602581526020016158f9602591396016600061233d613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b6001905092915050565b60006123e76123e0613066565b8484613237565b506001905092915050565b60125481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6124f9613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257d90614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614bdc565b60405180910390fd5b8060068190555050565b61282e613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614bdc565b60405180910390fd5b81601281905550806013819055506013546012546128d99190614e6b565b601481905550606460145414612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90615035565b60405180910390fd5b5050565b612930613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614bdc565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612a20613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa490614bdc565b60405180910390fd5b8060078190555050565b612abf613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb2906150c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c80613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0490614bdc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b601e5481565b612d89613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d90614bdc565b60405180910390fd5b6000600267ffffffffffffffff811115612e3357612e32614772565b5b604051908082528060200260200182016040528015612e615781602001602082028036833780820191505090505b509050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614c11565b81600081518110612f0957612f08614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612f5857612f57614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ff794939291906151e0565b6000604051808303818588803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d49061529e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361314c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314390615330565b60405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161322a919061444f565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e906153c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d90615454565b60405180910390fd5b601f60009054906101000a900460ff166133a05761333261223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461339f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613396906154e6565b60405180910390fd5b5b601c60149054906101000a900460ff16156133c7576133c0848484613914565b9050613801565b6133cf61223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561343d575061340d61223b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561344d5761344c8483613ae7565b5b600061345830611de1565b90506000600554821015905080801561347e5750601c60149054906101000a900460ff16155b80156134d45750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e3576134e282613b84565b5b61356c846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136525750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366657613661878787613d3c565b613668565b845b9050600860009054906101000a900460ff1680156136d05750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136ff576007546136f3826136e589611de1565b6138b690919063ffffffff16565b11156136fe57600080fd5b5b61375181601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f1919061444f565b60405180910390a3600193505050505b9392505050565b6000838311158290613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384791906145c3565b60405180910390fd5b506000838561385f9190615506565b9050809150509392505050565b60006138ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613808565b905092915050565b60008082846138c59190614e6b565b90508381101561390a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390190615586565b60405180910390fd5b8091505092915050565b600061399f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3482601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ad4919061444f565b60405180910390a3600190509392505050565b60065481111580613b415750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b77906155f2565b60405180910390fd5b5050565b6001601c60146101000a81548160ff0219169083151502179055506000613bdd6002613bcf601454613bc160125487613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613bf4828461386c90919063ffffffff16565b9050613bff81614027565b60004790506000613c30613c1f6002601254613fdd90919063ffffffff16565b60145461386c90919063ffffffff16565b90506000613c6e6002613c6084613c5260125488613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613c85828561386c90919063ffffffff16565b90506000811115613cbd57613cbc600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826142a3565b5b600082118015613ccd5750600086115b15613d1857613cdc86836142ee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613d0f93929190615612565b60405180910390a15b5050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc457613dbd6064613daf600c5486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b9050613e42565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e4157613e3e6064613e3060105486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b90505b5b6000811115613f4657613e9d81601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f3d919061444f565b60405180910390a35b613f59818461386c90919063ffffffff16565b9150509392505050565b6000808303613f755760009050613fd7565b60008284613f839190615649565b9050828482613f9291906156ba565b14613fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc99061575d565b60405180910390fd5b809150505b92915050565b600061401f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143d3565b905092915050565b6000600267ffffffffffffffff81111561404457614043614772565b5b6040519080825280602002602001820160405280156140725781602001602082028036833780820191505090505b509050308160008151811061408a57614089614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141559190614c11565b8160018151811061416957614168614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141d030601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161423495949392919061577d565b600060405180830381600087803b15801561424e57600080fd5b505af1158015614262573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516142979291906157d7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156142e9573d6000803e3d6000fd5b505050565b61431b30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061436761223b565b426040518863ffffffff1660e01b815260040161438996959493929190615807565b60606040518083038185885af11580156143a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143cc919061587d565b5050505050565b6000808311829061441a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441191906145c3565b60405180910390fd5b506000838561442991906156ba565b9050809150509392505050565b6000819050919050565b61444981614436565b82525050565b60006020820190506144646000830184614440565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144a98261447e565b9050919050565b6144b98161449e565b81146144c457600080fd5b50565b6000813590506144d6816144b0565b92915050565b6000602082840312156144f2576144f1614474565b5b6000614500848285016144c7565b91505092915050565b6145128161449e565b82525050565b600060208201905061452d6000830184614509565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561456d578082015181840152602081019050614552565b60008484015250505050565b6000601f19601f8301169050919050565b600061459582614533565b61459f818561453e565b93506145af81856020860161454f565b6145b881614579565b840191505092915050565b600060208201905081810360008301526145dd818461458a565b905092915050565b6145ee81614436565b81146145f957600080fd5b50565b60008135905061460b816145e5565b92915050565b6000806040838503121561462857614627614474565b5b6000614636858286016144c7565b9250506020614647858286016145fc565b9150509250929050565b60008115159050919050565b61466681614651565b82525050565b6000602082019050614681600083018461465d565b92915050565b6000819050919050565b60006146ac6146a76146a28461447e565b614687565b61447e565b9050919050565b60006146be82614691565b9050919050565b60006146d0826146b3565b9050919050565b6146e0816146c5565b82525050565b60006020820190506146fb60008301846146d7565b92915050565b61470a81614651565b811461471557600080fd5b50565b60008135905061472781614701565b92915050565b6000806040838503121561474457614743614474565b5b6000614752858286016144c7565b925050602061476385828601614718565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6147aa82614579565b810181811067ffffffffffffffff821117156147c9576147c8614772565b5b80604052505050565b60006147dc61446a565b90506147e882826147a1565b919050565b600067ffffffffffffffff82111561480857614807614772565b5b602082029050602081019050919050565b600080fd5b600061483161482c846147ed565b6147d2565b9050808382526020820190506020840283018581111561485457614853614819565b5b835b8181101561487d578061486988826144c7565b845260208401935050602081019050614856565b5050509392505050565b600082601f83011261489c5761489b61476d565b5b81356148ac84826020860161481e565b91505092915050565b600067ffffffffffffffff8211156148d0576148cf614772565b5b602082029050602081019050919050565b60006148f46148ef846148b5565b6147d2565b9050808382526020820190506020840283018581111561491757614916614819565b5b835b81811015614940578061492c88826145fc565b845260208401935050602081019050614919565b5050509392505050565b600082601f83011261495f5761495e61476d565b5b813561496f8482602086016148e1565b91505092915050565b6000806040838503121561498f5761498e614474565b5b600083013567ffffffffffffffff8111156149ad576149ac614479565b5b6149b985828601614887565b925050602083013567ffffffffffffffff8111156149da576149d9614479565b5b6149e68582860161494a565b9150509250929050565b600080600060608486031215614a0957614a08614474565b5b6000614a17868287016144c7565b9350506020614a28868287016144c7565b9250506040614a39868287016145fc565b9150509250925092565b600060208284031215614a5957614a58614474565b5b6000614a6784828501614718565b91505092915050565b600060ff82169050919050565b614a8681614a70565b82525050565b6000602082019050614aa16000830184614a7d565b92915050565b600060208284031215614abd57614abc614474565b5b6000614acb848285016145fc565b91505092915050565b60008060408385031215614aeb57614aea614474565b5b6000614af9858286016145fc565b9250506020614b0a858286016145fc565b9150509250929050565b6000614b1f8261447e565b9050919050565b614b2f81614b14565b82525050565b6000602082019050614b4a6000830184614b26565b92915050565b60008060408385031215614b6757614b66614474565b5b6000614b75858286016144c7565b9250506020614b86858286016144c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bc660208361453e565b9150614bd182614b90565b602082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b600081519050614c0b816144b0565b92915050565b600060208284031215614c2757614c26614474565b5b6000614c3584828501614bfc565b91505092915050565b6000604082019050614c536000830185614509565b614c606020830184614509565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cae57607f821691505b602082108103614cc157614cc0614c67565b5b50919050565b7f61697264726f70546f57616c6c6574733a3a20417272617973206d757374206260008201527f65207468652073616d65206c656e677468000000000000000000000000000000602082015250565b6000614d2360318361453e565b9150614d2e82614cc7565b604082019050919050565b60006020820190508181036000830152614d5281614d16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dc282614436565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614df457614df3614d88565b5b600182019050919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614e3560178361453e565b9150614e4082614dff565b602082019050919050565b60006020820190508181036000830152614e6481614e28565b9050919050565b6000614e7682614436565b9150614e8183614436565b9250828201905080821115614e9957614e98614d88565b5b92915050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614efb60288361453e565b9150614f0682614e9f565b604082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614f8d60298361453e565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061501f60228361453e565b915061502a82614fc3565b604082019050919050565b6000602082019050818103600083015261504e81615012565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b160268361453e565b91506150bc82615055565b604082019050919050565b600060208201905081810360008301526150e0816150a4565b9050919050565b6000819050919050565b600061510c615107615102846150e7565b614687565b614436565b9050919050565b61511c816150f1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151578161449e565b82525050565b6000615169838361514e565b60208301905092915050565b6000602082019050919050565b600061518d82615122565b615197818561512d565b93506151a28361513e565b8060005b838110156151d35781516151ba888261515d565b97506151c583615175565b9250506001810190506151a6565b5085935050505092915050565b60006080820190506151f56000830187615113565b81810360208301526152078186615182565b90506152166040830185614509565b6152236060830184614440565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061528860248361453e565b91506152938261522c565b604082019050919050565b600060208201905081810360008301526152b78161527b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061531a60228361453e565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ac60258361453e565b91506153b782615350565b604082019050919050565b600060208201905081810360008301526153db8161539f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061543e60238361453e565b9150615449826153e2565b604082019050919050565b6000602082019050818103600083015261546d81615431565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b60006154d0603f8361453e565b91506154db82615474565b604082019050919050565b600060208201905081810360008301526154ff816154c3565b9050919050565b600061551182614436565b915061551c83614436565b925082820390508181111561553457615533614d88565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615570601b8361453e565b915061557b8261553a565b602082019050919050565b6000602082019050818103600083015261559f81615563565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006155dc60118361453e565b91506155e7826155a6565b602082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b60006060820190506156276000830186614440565b6156346020830185614440565b6156416040830184614440565b949350505050565b600061565482614436565b915061565f83614436565b925082820261566d81614436565b9150828204841483151761568457615683614d88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156c582614436565b91506156d083614436565b9250826156e0576156df61568b565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061574760218361453e565b9150615752826156eb565b604082019050919050565b600060208201905081810360008301526157768161573a565b9050919050565b600060a0820190506157926000830188614440565b61579f6020830187615113565b81810360408301526157b18186615182565b90506157c06060830185614509565b6157cd6080830184614440565b9695505050505050565b60006040820190506157ec6000830185614440565b81810360208301526157fe8184615182565b90509392505050565b600060c08201905061581c6000830189614509565b6158296020830188614440565b6158366040830187615113565b6158436060830186615113565b6158506080830185614509565b61585d60a0830184614440565b979650505050505050565b600081519050615877816145e5565b92915050565b60008060006060848603121561589657615895614474565b5b60006158a486828701615868565b93505060206158b586828701615868565b92505060406158c686828701615868565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e257b339971ee0f06db92d01c3a32e2befe2452042b800af11f059d48e44f64b64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80637c519ffb116101dc578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d59578063fc155d1d14610d84578063fd72e22a14610dad578063ffb54a9914610dd857610397565b8063f1d5f51714610cb3578063f2fde38b14610cdc578063f84ba65d14610d05578063f872858a14610d2e57610397565b8063e37ba8f9116100dc578063e37ba8f914610c0f578063ec28438a14610c38578063eea5b63f14610c61578063ef422a1814610c8a57610397565b8063d469801614610b7c578063dd62ed3e14610ba7578063e10e9f3214610be457610397565b806395d89b411161017a578063a9059cbb11610149578063a9059cbb14610aac578063ac23ca5914610ae9578063c816841b14610b14578063c867d60b14610b3f57610397565b806395d89b41146109ee578063a073d37f14610a19578063a08e671f14610a44578063a457c2d714610a6f57610397565b806382d20116116101b657806382d2011614610946578063844d591c14610971578063876b6f8e1461099a5780638da5cb5b146109c357610397565b80637c519ffb146108d95780637d1db4a5146108f0578063807c2d9c1461091b57610397565b806327c8f835116102c15780633b97084a1161025f5780636db794371161022e5780636db794371461083157806370a082311461085a578063715018a6146108975780637849c1cd146108ae57610397565b80633b97084a146107635780633ecad2711461078c5780634b743995146107c95780635342acb4146107f457610397565b80632e97766d1161029b5780632e97766d146106a757806330d5d18d146106d2578063313ce567146106fb578063395093511461072657610397565b806327c8f835146106265780632b112e49146106515780632baa72171461067c57610397565b806318160ddd1161032e5780632198cf6c116103085780632198cf6c1461056e5780632307b4411461059757806323b872dd146105c05780632563ae83146105fd57610397565b806318160ddd146104ed57806319c59e2c146105185780631a8145bb1461054357610397565b8063095ea7b31161036a578063095ea7b31461042f5780630e47e8221461046c5780631107b3a5146104975780631694505e146104c257610397565b8063031d6cd01461039c57806304db6e68146103c757806306fdde031461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e03565b6040516103be919061444f565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e991906144dc565b610e09565b6040516103fb9190614518565b60405180910390f35b34801561041057600080fd5b5061041961130c565b60405161042691906145c3565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614611565b61139e565b604051610463919061466c565b60405180910390f35b34801561047857600080fd5b506104816113bc565b60405161048e919061444f565b60405180910390f35b3480156104a357600080fd5b506104ac6113c2565b6040516104b9919061444f565b60405180910390f35b3480156104ce57600080fd5b506104d76113c8565b6040516104e491906146e6565b60405180910390f35b3480156104f957600080fd5b506105026113ee565b60405161050f919061444f565b60405180910390f35b34801561052457600080fd5b5061052d6113f8565b60405161053a919061444f565b60405180910390f35b34801561054f57600080fd5b506105586113fe565b604051610565919061444f565b60405180910390f35b34801561057a57600080fd5b506105956004803603810190610590919061472d565b611404565b005b3480156105a357600080fd5b506105be60048036038101906105b99190614978565b6114f4565b005b3480156105cc57600080fd5b506105e760048036038101906105e291906149f0565b611696565b6040516105f4919061466c565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190614a43565b611770565b005b34801561063257600080fd5b5061063b611822565b6040516106489190614518565b60405180910390f35b34801561065d57600080fd5b50610666611846565b604051610673919061444f565b60405180910390f35b34801561068857600080fd5b5061069161188a565b60405161069e919061444f565b60405180910390f35b3480156106b357600080fd5b506106bc611890565b6040516106c9919061444f565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906144dc565b611898565b005b34801561070757600080fd5b50610710611b2e565b60405161071d9190614a8c565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614611565b611b45565b60405161075a919061466c565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190614aa7565b611bf8565b005b34801561079857600080fd5b506107b360048036038101906107ae91906144dc565b611c97565b6040516107c0919061466c565b60405180910390f35b3480156107d557600080fd5b506107de611cb7565b6040516107eb919061444f565b60405180910390f35b34801561080057600080fd5b5061081b600480360381019061081691906144dc565b611cbd565b604051610828919061466c565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614ad4565b611cdd565b005b34801561086657600080fd5b50610881600480360381019061087c91906144dc565b611de1565b60405161088e919061444f565b60405180910390f35b3480156108a357600080fd5b506108ac611e2a565b005b3480156108ba57600080fd5b506108c3611f7d565b6040516108d0919061444f565b60405180910390f35b3480156108e557600080fd5b506108ee611f83565b005b3480156108fc57600080fd5b50610905612035565b604051610912919061444f565b60405180910390f35b34801561092757600080fd5b5061093061203b565b60405161093d919061444f565b60405180910390f35b34801561095257600080fd5b5061095b612041565b604051610968919061444f565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061472d565b612047565b005b3480156109a657600080fd5b506109c160048036038101906109bc9190614ad4565b612137565b005b3480156109cf57600080fd5b506109d861223b565b6040516109e59190614518565b60405180910390f35b3480156109fa57600080fd5b50610a03612264565b604051610a1091906145c3565b60405180910390f35b348015610a2557600080fd5b50610a2e6122f6565b604051610a3b919061444f565b60405180910390f35b348015610a5057600080fd5b50610a59612300565b604051610a66919061444f565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614611565b612306565b604051610aa3919061466c565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190614611565b6123d3565b604051610ae0919061466c565b60405180910390f35b348015610af557600080fd5b50610afe6123f2565b604051610b0b919061444f565b60405180910390f35b348015610b2057600080fd5b50610b296123f8565b604051610b369190614518565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b6191906144dc565b61241e565b604051610b73919061466c565b60405180910390f35b348015610b8857600080fd5b50610b9161243e565b604051610b9e9190614b35565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614b50565b612464565b604051610bdb919061444f565b60405180910390f35b348015610bf057600080fd5b50610bf96124eb565b604051610c06919061444f565b60405180910390f35b348015610c1b57600080fd5b50610c366004803603810190610c3191906144dc565b6124f1565b005b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190614aa7565b612787565b005b348015610c6d57600080fd5b50610c886004803603810190610c839190614ad4565b612826565b005b348015610c9657600080fd5b50610cb16004803603810190610cac919061472d565b612928565b005b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614aa7565b612a18565b005b348015610ce857600080fd5b50610d036004803603810190610cfe91906144dc565b612ab7565b005b348015610d1157600080fd5b50610d2c6004803603810190610d27919061472d565b612c78565b005b348015610d3a57600080fd5b50610d43612d68565b604051610d50919061466c565b60405180910390f35b348015610d6557600080fd5b50610d6e612d7b565b604051610d7b919061444f565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da69190614aa7565b612d81565b005b348015610db957600080fd5b50610dc261302d565b604051610dcf9190614b35565b60405180910390f35b348015610de457600080fd5b50610ded613053565b604051610dfa919061466c565b60405180910390f35b600f5481565b6000610e13613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790614bdc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f149190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190614c11565b6040518363ffffffff1660e01b8152600401610fbc929190614c3e565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190614c11565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190614c11565b6040518363ffffffff1660e01b815260040161114a929190614c3e565b6020604051808303816000875af1158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190614c11565b91505b81601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60606001805461131b90614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461134790614c96565b80156113945780601f1061136957610100808354040283529160200191611394565b820191906000526020600020905b81548152906001019060200180831161137757829003601f168201915b5050505050905090565b60006113b26113ab613066565b848461306e565b6001905092915050565b60105481565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c5481565b601d5481565b61140c613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090614bdc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114fc613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090614bdc565b60405180910390fd5b80518251146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614d39565b60405180910390fd5b60005b82518110156116915760008382815181106115ee576115ed614d59565b5b60200260200101519050600083838151811061160d5761160c614d59565b5b602002602001015190508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611674919061444f565b60405180910390a35050808061168990614db7565b9150506115d0565b505050565b60006116a3848484613237565b50611765846116b0613066565b611760856040518060600160405280602881526020016158d160289139601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611716613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b600190509392505050565b611778613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90614bdc565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006118856118747f000000000000000000000000000000000000000000000000000000000000dead611de1565b60045461386c90919063ffffffff16565b905090565b60135481565b600043905090565b6118a0613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611bee611b52613066565b84611be98560166000611b63613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b61306e565b6001905092915050565b611c00613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614bdc565b60405180910390fd5b8060058190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60176020528060005260406000206000915054906101000a900460ff1681565b611ce5613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990614bdc565b60405180910390fd5b81600b8190555080600a81905550600a54600b54611d909190614e6b565b600c81905550600d54600c541115611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614f11565b60405180910390fd5b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e32613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611f8b613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f90614bdc565b60405180910390fd5b6001601f60006101000a81548160ff021916908315150217905550565b60065481565b60075481565b600a5481565b61204f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614bdc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61213f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614bdc565b60405180910390fd5b81600f8190555080600e81905550600e54600f546121ea9190614e6b565b6010819055506011546010541115612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614fa3565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461227390614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461229f90614c96565b80156122ec5780601f106122c1576101008083540402835291602001916122ec565b820191906000526020600020905b8154815290600101906020018083116122cf57829003601f168201915b5050505050905090565b6000600554905090565b60145481565b60006123c9612313613066565b846123c4856040518060600160405280602581526020016158f9602591396016600061233d613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b6001905092915050565b60006123e76123e0613066565b8484613237565b506001905092915050565b60125481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6124f9613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257d90614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614bdc565b60405180910390fd5b8060068190555050565b61282e613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614bdc565b60405180910390fd5b81601281905550806013819055506013546012546128d99190614e6b565b601481905550606460145414612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90615035565b60405180910390fd5b5050565b612930613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614bdc565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612a20613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa490614bdc565b60405180910390fd5b8060078190555050565b612abf613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb2906150c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c80613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0490614bdc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b601e5481565b612d89613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d90614bdc565b60405180910390fd5b6000600267ffffffffffffffff811115612e3357612e32614772565b5b604051908082528060200260200182016040528015612e615781602001602082028036833780820191505090505b509050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614c11565b81600081518110612f0957612f08614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612f5857612f57614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ff794939291906151e0565b6000604051808303818588803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d49061529e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361314c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314390615330565b60405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161322a919061444f565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e906153c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d90615454565b60405180910390fd5b601f60009054906101000a900460ff166133a05761333261223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461339f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613396906154e6565b60405180910390fd5b5b601c60149054906101000a900460ff16156133c7576133c0848484613914565b9050613801565b6133cf61223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561343d575061340d61223b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561344d5761344c8483613ae7565b5b600061345830611de1565b90506000600554821015905080801561347e5750601c60149054906101000a900460ff16155b80156134d45750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e3576134e282613b84565b5b61356c846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136525750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366657613661878787613d3c565b613668565b845b9050600860009054906101000a900460ff1680156136d05750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136ff576007546136f3826136e589611de1565b6138b690919063ffffffff16565b11156136fe57600080fd5b5b61375181601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f1919061444f565b60405180910390a3600193505050505b9392505050565b6000838311158290613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384791906145c3565b60405180910390fd5b506000838561385f9190615506565b9050809150509392505050565b60006138ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613808565b905092915050565b60008082846138c59190614e6b565b90508381101561390a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390190615586565b60405180910390fd5b8091505092915050565b600061399f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3482601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ad4919061444f565b60405180910390a3600190509392505050565b60065481111580613b415750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b77906155f2565b60405180910390fd5b5050565b6001601c60146101000a81548160ff0219169083151502179055506000613bdd6002613bcf601454613bc160125487613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613bf4828461386c90919063ffffffff16565b9050613bff81614027565b60004790506000613c30613c1f6002601254613fdd90919063ffffffff16565b60145461386c90919063ffffffff16565b90506000613c6e6002613c6084613c5260125488613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613c85828561386c90919063ffffffff16565b90506000811115613cbd57613cbc600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826142a3565b5b600082118015613ccd5750600086115b15613d1857613cdc86836142ee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613d0f93929190615612565b60405180910390a15b5050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc457613dbd6064613daf600c5486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b9050613e42565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e4157613e3e6064613e3060105486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b90505b5b6000811115613f4657613e9d81601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f3d919061444f565b60405180910390a35b613f59818461386c90919063ffffffff16565b9150509392505050565b6000808303613f755760009050613fd7565b60008284613f839190615649565b9050828482613f9291906156ba565b14613fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc99061575d565b60405180910390fd5b809150505b92915050565b600061401f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143d3565b905092915050565b6000600267ffffffffffffffff81111561404457614043614772565b5b6040519080825280602002602001820160405280156140725781602001602082028036833780820191505090505b509050308160008151811061408a57614089614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141559190614c11565b8160018151811061416957614168614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141d030601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161423495949392919061577d565b600060405180830381600087803b15801561424e57600080fd5b505af1158015614262573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516142979291906157d7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156142e9573d6000803e3d6000fd5b505050565b61431b30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061436761223b565b426040518863ffffffff1660e01b815260040161438996959493929190615807565b60606040518083038185885af11580156143a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143cc919061587d565b5050505050565b6000808311829061441a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441191906145c3565b60405180910390fd5b506000838561442991906156ba565b9050809150509392505050565b6000819050919050565b61444981614436565b82525050565b60006020820190506144646000830184614440565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144a98261447e565b9050919050565b6144b98161449e565b81146144c457600080fd5b50565b6000813590506144d6816144b0565b92915050565b6000602082840312156144f2576144f1614474565b5b6000614500848285016144c7565b91505092915050565b6145128161449e565b82525050565b600060208201905061452d6000830184614509565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561456d578082015181840152602081019050614552565b60008484015250505050565b6000601f19601f8301169050919050565b600061459582614533565b61459f818561453e565b93506145af81856020860161454f565b6145b881614579565b840191505092915050565b600060208201905081810360008301526145dd818461458a565b905092915050565b6145ee81614436565b81146145f957600080fd5b50565b60008135905061460b816145e5565b92915050565b6000806040838503121561462857614627614474565b5b6000614636858286016144c7565b9250506020614647858286016145fc565b9150509250929050565b60008115159050919050565b61466681614651565b82525050565b6000602082019050614681600083018461465d565b92915050565b6000819050919050565b60006146ac6146a76146a28461447e565b614687565b61447e565b9050919050565b60006146be82614691565b9050919050565b60006146d0826146b3565b9050919050565b6146e0816146c5565b82525050565b60006020820190506146fb60008301846146d7565b92915050565b61470a81614651565b811461471557600080fd5b50565b60008135905061472781614701565b92915050565b6000806040838503121561474457614743614474565b5b6000614752858286016144c7565b925050602061476385828601614718565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6147aa82614579565b810181811067ffffffffffffffff821117156147c9576147c8614772565b5b80604052505050565b60006147dc61446a565b90506147e882826147a1565b919050565b600067ffffffffffffffff82111561480857614807614772565b5b602082029050602081019050919050565b600080fd5b600061483161482c846147ed565b6147d2565b9050808382526020820190506020840283018581111561485457614853614819565b5b835b8181101561487d578061486988826144c7565b845260208401935050602081019050614856565b5050509392505050565b600082601f83011261489c5761489b61476d565b5b81356148ac84826020860161481e565b91505092915050565b600067ffffffffffffffff8211156148d0576148cf614772565b5b602082029050602081019050919050565b60006148f46148ef846148b5565b6147d2565b9050808382526020820190506020840283018581111561491757614916614819565b5b835b81811015614940578061492c88826145fc565b845260208401935050602081019050614919565b5050509392505050565b600082601f83011261495f5761495e61476d565b5b813561496f8482602086016148e1565b91505092915050565b6000806040838503121561498f5761498e614474565b5b600083013567ffffffffffffffff8111156149ad576149ac614479565b5b6149b985828601614887565b925050602083013567ffffffffffffffff8111156149da576149d9614479565b5b6149e68582860161494a565b9150509250929050565b600080600060608486031215614a0957614a08614474565b5b6000614a17868287016144c7565b9350506020614a28868287016144c7565b9250506040614a39868287016145fc565b9150509250925092565b600060208284031215614a5957614a58614474565b5b6000614a6784828501614718565b91505092915050565b600060ff82169050919050565b614a8681614a70565b82525050565b6000602082019050614aa16000830184614a7d565b92915050565b600060208284031215614abd57614abc614474565b5b6000614acb848285016145fc565b91505092915050565b60008060408385031215614aeb57614aea614474565b5b6000614af9858286016145fc565b9250506020614b0a858286016145fc565b9150509250929050565b6000614b1f8261447e565b9050919050565b614b2f81614b14565b82525050565b6000602082019050614b4a6000830184614b26565b92915050565b60008060408385031215614b6757614b66614474565b5b6000614b75858286016144c7565b9250506020614b86858286016144c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bc660208361453e565b9150614bd182614b90565b602082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b600081519050614c0b816144b0565b92915050565b600060208284031215614c2757614c26614474565b5b6000614c3584828501614bfc565b91505092915050565b6000604082019050614c536000830185614509565b614c606020830184614509565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cae57607f821691505b602082108103614cc157614cc0614c67565b5b50919050565b7f61697264726f70546f57616c6c6574733a3a20417272617973206d757374206260008201527f65207468652073616d65206c656e677468000000000000000000000000000000602082015250565b6000614d2360318361453e565b9150614d2e82614cc7565b604082019050919050565b60006020820190508181036000830152614d5281614d16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dc282614436565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614df457614df3614d88565b5b600182019050919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614e3560178361453e565b9150614e4082614dff565b602082019050919050565b60006020820190508181036000830152614e6481614e28565b9050919050565b6000614e7682614436565b9150614e8183614436565b9250828201905080821115614e9957614e98614d88565b5b92915050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614efb60288361453e565b9150614f0682614e9f565b604082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614f8d60298361453e565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061501f60228361453e565b915061502a82614fc3565b604082019050919050565b6000602082019050818103600083015261504e81615012565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b160268361453e565b91506150bc82615055565b604082019050919050565b600060208201905081810360008301526150e0816150a4565b9050919050565b6000819050919050565b600061510c615107615102846150e7565b614687565b614436565b9050919050565b61511c816150f1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151578161449e565b82525050565b6000615169838361514e565b60208301905092915050565b6000602082019050919050565b600061518d82615122565b615197818561512d565b93506151a28361513e565b8060005b838110156151d35781516151ba888261515d565b97506151c583615175565b9250506001810190506151a6565b5085935050505092915050565b60006080820190506151f56000830187615113565b81810360208301526152078186615182565b90506152166040830185614509565b6152236060830184614440565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061528860248361453e565b91506152938261522c565b604082019050919050565b600060208201905081810360008301526152b78161527b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061531a60228361453e565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ac60258361453e565b91506153b782615350565b604082019050919050565b600060208201905081810360008301526153db8161539f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061543e60238361453e565b9150615449826153e2565b604082019050919050565b6000602082019050818103600083015261546d81615431565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b60006154d0603f8361453e565b91506154db82615474565b604082019050919050565b600060208201905081810360008301526154ff816154c3565b9050919050565b600061551182614436565b915061551c83614436565b925082820390508181111561553457615533614d88565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615570601b8361453e565b915061557b8261553a565b602082019050919050565b6000602082019050818103600083015261559f81615563565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006155dc60118361453e565b91506155e7826155a6565b602082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b60006060820190506156276000830186614440565b6156346020830185614440565b6156416040830184614440565b949350505050565b600061565482614436565b915061565f83614436565b925082820261566d81614436565b9150828204841483151761568457615683614d88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156c582614436565b91506156d083614436565b9250826156e0576156df61568b565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061574760218361453e565b9150615752826156eb565b604082019050919050565b600060208201905081810360008301526157768161573a565b9050919050565b600060a0820190506157926000830188614440565b61579f6020830187615113565b81810360408301526157b18186615182565b90506157c06060830185614509565b6157cd6080830184614440565b9695505050505050565b60006040820190506157ec6000830185614440565b81810360208301526157fe8184615182565b90509392505050565b600060c08201905061581c6000830189614509565b6158296020830188614440565b6158366040830187615113565b6158436060830186615113565b6158506080830185614509565b61585d60a0830184614440565b979650505050505050565b600081519050615877816145e5565b92915050565b60008060006060848603121561589657615895614474565b5b60006158a486828701615868565b93505060206158b586828701615868565b92505060406158c686828701615868565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e257b339971ee0f06db92d01c3a32e2befe2452042b800af11f059d48e44f64b64736f6c63430008110033

Deployed Bytecode Sourcemap

31258:18654:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32484:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42068:772;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36260:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37659:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32528:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32442:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33181:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36537:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32352:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33329:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40507:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43027:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43835:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40347:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32158:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38173:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32685:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38313:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41488:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36446:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36954:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40858:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33129:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32563:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32932:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39164:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36645:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4267:148;;;;;;;;;;;;;:::i;:::-;;32310:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42894:76;;;;;;;;;;;;;:::i;:::-;;31763:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31832:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32269:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38520:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39506:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3625:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36351:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37498:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32739:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37178:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43660:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32634:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33229:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32989:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31958:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36805:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32386:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41046:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38852:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39898:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38997:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40682:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4570:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38688:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31894:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33369:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49208:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32057:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33440:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32484:37;;;;:::o;42068:772::-;42148:22;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42185:35:::1;42242:16;42185:74;;42306:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42288:53;;;42350:4;42357:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42288:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42271:110;;42462:1;42436:28;;:14;:28;;::::0;42433:201:::1;;42526:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42508:74;;;42591:4;42598:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42508:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42491:131;;42433:201;42660:14;42646:11;;:28;;;;;;;;;;;;;;;;;;42704:16;42686:15;;:34;;;;;;;;;;;;;;;;;;42776:4;42732:19;:41;42760:11;;;;;;;;;;;42732:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;42828:4;42791:12;:34;42812:11;;;;;;;;;;;42791:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;42172:668;42068:772:::0;;;:::o;36260:83::-;36297:13;36330:5;36323:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36260:83;:::o;37659:161::-;37734:4;37751:39;37760:12;:10;:12::i;:::-;37774:7;37783:6;37751:8;:39::i;:::-;37808:4;37801:11;;37659:161;;;;:::o;32528:28::-;;;;:::o;32442:35::-;;;;:::o;33181:41::-;;;;;;;;;;;;;:::o;36537:100::-;36590:7;36617:12;;36610:19;;36537:100;:::o;32352:27::-;;;;:::o;33329:33::-;;;;:::o;40507:135::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40628:6:::1;40598:19;:27;40618:6;40598:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;40507:135:::0;;:::o;43027:456::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43176:6:::1;:13;43151:14;:21;:38;43143:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43258:9;43254:222;43277:14;:21;43273:1;:25;43254:222;;;43319:14;43336;43351:1;43336:17;;;;;;;;:::i;:::-;;;;;;;;43319:34;;43368:21;43392:6;43399:1;43392:9;;;;;;;;:::i;:::-;;;;;;;;43368:33;;43442:6;43421:43;;43430:10;43421:43;;;43450:13;43421:43;;;;;;:::i;:::-;;;;;;;;43304:172;;43300:3;;;;;:::i;:::-;;;;43254:222;;;;43027:456:::0;;:::o;43835:313::-;43933:4;43950:36;43960:6;43968:9;43979:6;43950:9;:36::i;:::-;;43997:121;44006:6;44014:12;:10;:12::i;:::-;44028:89;44066:6;44028:89;;;;;;;;;;;;;;;;;:11;:19;44040:6;44028:19;;;;;;;;;;;;;;;:33;44048:12;:10;:12::i;:::-;44028:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;43997:8;:121::i;:::-;44136:4;44129:11;;43835:313;;;;;:::o;40347:113::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40444:8:::1;40425:16;;:27;;;;;;;;;;;;;;;;;;40347:113:::0;:::o;32158:81::-;;;:::o;38173:128::-;38226:7;38253:40;38270:22;38280:11;38270:9;:22::i;:::-;38253:12;;:16;;:40;;;;:::i;:::-;38246:47;;38173:128;:::o;32685:47::-;;;;:::o;38313:87::-;38353:7;38380:12;38373:19;;38313:87;:::o;41488:369::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41600:1:::1;41578:24;;:10;:24;;::::0;41570:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41673:4;41641:17;:29;41659:10;41641:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41726:5;41688:17;:35;41706:16;;;;;;;;;;;41688:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;41783:16;;;;;;;;;;;41747:53;;41771:10;41747:53;;;;;;;;;;;;41838:10;41811:16;;:38;;;;;;;;;;;;;;;;;;41488:369:::0;:::o;36446:83::-;36487:5;36512:9;;;;;;;;;;;36505:16;;36446:83;:::o;36954:218::-;37042:4;37059:83;37068:12;:10;:12::i;:::-;37082:7;37091:50;37130:10;37091:11;:25;37103:12;:10;:12::i;:::-;37091:25;;;;;;;;;;;;;;;:34;37117:7;37091:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;37059:8;:83::i;:::-;37160:4;37153:11;;36954:218;;;;:::o;40858:124::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40966:8:::1;40940:23;:34;;;;40858:124:::0;:::o;33129:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;32563:35::-;;;;:::o;32932:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;39164:334::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39280:14:::1;39261:16;:33;;;;39323:13;39305:15;:31;;;;39381:15;;39362:16;;:34;;;;:::i;:::-;39347:12;:49;;;;39431:14;;39415:12;;:30;;39407:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;39164:334:::0;;:::o;36645:119::-;36711:7;36738:9;:18;36748:7;36738:18;;;;;;;;;;;;;;;;36731:25;;36645:119;;;:::o;4267:148::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4374:1:::1;4337:40;;4358:6;::::0;::::1;;;;;;;;4337:40;;;;;;;;;;;;4405:1;4388:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4267:148::o:0;32310:35::-;;;;:::o;42894:76::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42958:4:::1;42944:11;;:18;;;;;;;;;;;;;;;;;;42894:76::o:0;31763:56::-;;;;:::o;31832:54::-;;;;:::o;32269:34::-;;;;:::o;38520:129::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38633:8:::1;38609:12;:21;38622:7;38609:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38520:129:::0;;:::o;39506:346::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39627:14:::1;39607:17;:34;;;;39671:13;39652:16;:32;;;;39731:16;;39711:17;;:36;;;;:::i;:::-;39695:13;:52;;;;39783:15;;39766:13;;:32;;39758:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;39506:346:::0;;:::o;3625:79::-;3663:7;3690:6;;;;;;;;;;;3683:13;;3625:79;:::o;36351:87::-;36390:13;36423:7;36416:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36351:87;:::o;37498:120::-;37560:7;37587:23;;37580:30;;37498:120;:::o;32739:39::-;;;;:::o;37178:269::-;37271:4;37288:129;37297:12;:10;:12::i;:::-;37311:7;37320:96;37359:15;37320:96;;;;;;;;;;;;;;;;;:11;:25;37332:12;:10;:12::i;:::-;37320:25;;;;;;;;;;;;;;;:34;37346:7;37320:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;37288:8;:129::i;:::-;37435:4;37428:11;;37178:269;;;;:::o;43660:167::-;43738:4;43755:42;43765:12;:10;:12::i;:::-;43779:9;43790:6;43755:9;:42::i;:::-;;43815:4;43808:11;;43660:167;;;;:::o;32634:44::-;;;;:::o;33229:26::-;;;;;;;;;;;;;:::o;32989:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;31958:92::-;;;;;;;;;;;;;:::o;36805:143::-;36886:7;36913:11;:18;36925:5;36913:18;;;;;;;;;;;;;;;:27;36932:7;36913:27;;;;;;;;;;;;;;;;36906:34;;36805:143;;;;:::o;32386:34::-;;;;:::o;41046:365::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41157:1:::1;41135:24;;:10;:24;;::::0;41127:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41230:4;41198:17;:29;41216:10;41198:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41282:5;41245:17;:34;41263:15;;;;;;;;;;;41245:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;41338:15;;;;;;;;;;;41303:51;;41326:10;41303:51;;;;;;;;;;;;41392:10;41365:15;;:38;;;;;;;;;;;;;;;;;;41046:365:::0;:::o;38852:111::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38944:11:::1;38929:12;:26;;;;38852:111:::0;:::o;39898:413::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40046:17:::1;40018:25;:45;;;;40103:18;40074:26;:47;;;;40188:26;;40160:25;;:54;;;;:::i;:::-;40133:24;:81;;;;40261:3;40233:24;;:31;40225:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39898:413:::0;;:::o;38997:135::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39116:8:::1;39087:17;:26;39105:7;39087:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;38997:135:::0;;:::o;40682:102::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40768:8:::1;40754:10;:22;;;;40682:102:::0;:::o;4570:244::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4679:1:::1;4659:22;;:8;:22;;::::0;4651:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4769:8;4740:38;;4761:6;::::0;::::1;;;;;;;;4740:38;;;;;;;;;;;;4798:8;4789:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;4570:244:::0;:::o;38688:127::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38801:6:::1;38775:15;:23;38791:6;38775:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38688:127:::0;;:::o;31894:35::-;;;;;;;;;;;;;:::o;33369:34::-;;;;:::o;49208:527::-;3847:12;:10;:12::i;:::-;3837:22;;:6;;;;;;;;;;:22;;;3829:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49343:21:::1;49381:1;49367:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49343:40;;49404:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49394:4;49399:1;49394:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;49455:4;49437;49442:1;49437:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;49499:15;;;;;;;;;;;:66;;;49573:14;49603:1;49652:4;49679:6;49701:15;49499:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;49274:461;49208:527:::0;:::o;32057:94::-;;;;;;;;;;;;;:::o;33440:30::-;;;;;;;;;;;;;:::o;182:98::-;235:7;262:10;255:17;;182:98;:::o;37826:335::-;37936:1;37919:19;;:5;:19;;;37911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38017:1;37998:21;;:7;:21;;;37990:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38099:6;38069:11;:18;38081:5;38069:18;;;;;;;;;;;;;;;:27;38088:7;38069:27;;;;;;;;;;;;;;;:36;;;;38137:7;38121:32;;38130:5;38121:32;;;38146:6;38121:32;;;;;;:::i;:::-;;;;;;;;37826:335;;;:::o;44159:1870::-;44246:4;44289:1;44271:20;;:6;:20;;;44263:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44373:1;44352:23;;:9;:23;;;44344:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44464:11;;;;;;;;;;;44459:138;;44510:7;:5;:7::i;:::-;44500:17;;:6;:17;;;44492:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;44459:138;44612:16;;;;;;;;;;;44609:1413;;;44662:41;44677:6;44685:9;44696:6;44662:14;:41::i;:::-;44655:48;;;;44609:1413;44825:7;:5;:7::i;:::-;44815:17;;:6;:17;;;;:41;;;;;44849:7;:5;:7::i;:::-;44836:20;;:9;:20;;;;44815:41;44811:111;;;44877:28;44891:6;44898;44877:13;:28::i;:::-;44811:111;44986:28;45017:24;45035:4;45017:9;:24::i;:::-;44986:55;;45056:28;45111:23;;45087:20;:47;;45056:78;;45153:23;:44;;;;;45181:16;;;;;;;;;;;45180:17;45153:44;:69;;;;;45202:12;:20;45215:6;45202:20;;;;;;;;;;;;;;;;;;;;;;;;;45201:21;45153:69;45149:164;;;45257:36;45272:20;45257:14;:36::i;:::-;45149:164;45387:53;45409:6;45387:53;;;;;;;;;;;;;;;;;:9;:17;45397:6;45387:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;45367:9;:17;45377:6;45367:17;;;;;;;;;;;;;;;:73;;;;45455:19;45478:17;:25;45496:6;45478:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;45507:17;:28;45525:9;45507:28;;;;;;;;;;;;;;;;;;;;;;;;;45478:57;45477:148;;45591:34;45599:6;45607:9;45618:6;45591:7;:34::i;:::-;45477:148;;;45582:6;45477:148;45455:170;;45688:16;;;;;;;;;;;:51;;;;;45709:19;:30;45729:9;45709:30;;;;;;;;;;;;;;;;;;;;;;;;;45708:31;45688:51;45685:133;;;45807:10;;45766:37;45791:11;45766:20;45776:9;45766;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;45758:60;;;;;;45685:133;45887:37;45912:11;45887:9;:20;45897:9;45887:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;45864:9;:20;45874:9;45864:20;;;;;;;;;;;;;;;:60;;;;45961:9;45944:40;;45953:6;45944:40;;;45972:11;45944:40;;;;;;:::i;:::-;;;;;;;;46006:4;45999:11;;;;;44159:1870;;;;;;:::o;9371:192::-;9457:7;9490:1;9485;:6;;9493:12;9477:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9517:9;9533:1;9529;:5;;;;:::i;:::-;9517:17;;9554:1;9547:8;;;9371:192;;;;;:::o;8932:136::-;8990:7;9017:43;9021:1;9024;9017:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9010:50;;8932:136;;;;:::o;8468:181::-;8526:7;8546:9;8562:1;8558;:5;;;;:::i;:::-;8546:17;;8587:1;8582;:6;;8574:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8640:1;8633:8;;;8468:181;;;;:::o;46063:330::-;46156:4;46193:53;46215:6;46193:53;;;;;;;;;;;;;;;;;:9;:17;46203:6;46193:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;46173:9;:17;46183:6;46173:17;;;;;;;;;;;;;;;:73;;;;46280:32;46305:6;46280:9;:20;46290:9;46280:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;46257:9;:20;46267:9;46257:20;;;;;;;;;;;;;;;:55;;;;46345:9;46328:35;;46337:6;46328:35;;;46356:6;46328:35;;;;;;:::i;:::-;;;;;;;;46381:4;46374:11;;46063:330;;;;;:::o;49743:166::-;49840:12;;49830:6;:22;;:49;;;;49856:15;:23;49872:6;49856:23;;;;;;;;;;;;;;;;;;;;;;;;;49830:49;49822:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;49743:166;;:::o;47054:1095::-;33988:4;33969:16;;:23;;;;;;;;;;;;;;;;;;47184:19:::1;47206:78;47282:1;47206:71;47252:24;;47206:41;47221:25;;47206:10;:14;;:41;;;;:::i;:::-;:45;;:71;;;;:::i;:::-;:75;;:78;;;;:::i;:::-;47184:100;;47295:21;47319:27;47334:11;47319:10;:14;;:27;;;;:::i;:::-;47295:51;;47386:31;47403:13;47386:16;:31::i;:::-;47458:22;47483:21;47458:46;;47559:16;47578:62;47607:32;47637:1;47607:25;;:29;;:32;;;;:::i;:::-;47578:24;;:28;;:62;;;;:::i;:::-;47559:81;;47651:23;47677:66;47741:1;47677:59;47727:8;47677:45;47696:25;;47677:14;:18;;:45;;;;:::i;:::-;:49;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;47651:92;;47770:24;47797:35;47816:15;47797:14;:18;;:35;;;;:::i;:::-;47770:62;;47867:1;47848:16;:20;47845:94;;;47883:56;47904:16;;;;;;;;;;;47922;47883:20;:56::i;:::-;47845:94;47973:1;47955:15;:19;:38;;;;;47992:1;47978:11;:15;47955:38;47952:190;;;48009:42;48022:11;48035:15;48009:12;:42::i;:::-;48071:59;48086:13;48101:15;48118:11;48071:59;;;;;;;;:::i;:::-;;;;;;;;47952:190;47118:1031;;;;;;34034:5:::0;34015:16;;:24;;;;;;;;;;;;;;;;;;47054:1095;:::o;46429:580::-;46515:7;46535:17;46555:1;46535:21;;46570:12;:20;46583:6;46570:20;;;;;;;;;;;;;;;;;;;;;;;;;46567:213;;;46619:33;46648:3;46619:24;46630:12;;46619:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46607:45;;46567:213;;;46682:12;:23;46695:9;46682:23;;;;;;;;;;;;;;;;;;;;;;;;;46679:101;;;46734:34;46764:3;46734:25;46745:13;;46734:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46722:46;;46679:101;46567:213;46805:1;46793:9;:13;46790:173;;;46850:39;46879:9;46850;:24;46868:4;46850:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;46823:9;:24;46841:4;46823:24;;;;;;;;;;;;;;;:66;;;;46934:4;46909:42;;46918:6;46909:42;;;46941:9;46909:42;;;;;;:::i;:::-;;;;;;;;46790:173;46980:21;46991:9;46980:6;:10;;:21;;;;:::i;:::-;46973:28;;;46429:580;;;;;:::o;9822:471::-;9880:7;10130:1;10125;:6;10121:47;;10155:1;10148:8;;;;10121:47;10180:9;10196:1;10192;:5;;;;:::i;:::-;10180:17;;10225:1;10220;10216;:5;;;;:::i;:::-;:10;10208:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10284:1;10277:8;;;9822:471;;;;;:::o;10769:132::-;10827:7;10854:39;10858:1;10861;10854:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10847:46;;10769:132;;;;:::o;48184:524::-;48250:21;48288:1;48274:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48250:40;;48319:4;48301;48306:1;48301:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48345:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48335:4;48340:1;48335:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48378:62;48395:4;48410:15;;;;;;;;;;;48428:11;48378:8;:62::i;:::-;48451:15;;;;;;;;;;;:66;;;48532:11;48558:1;48575:4;48602;48623:15;48451:198;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48665:35;48682:11;48695:4;48665:35;;;;;;;:::i;:::-;;;;;;;;48239:469;48184:524;:::o;41904:126::-;41996:9;:18;;:26;42015:6;41996:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41904:126;;:::o;48739:362::-;48820:62;48837:4;48852:15;;;;;;;;;;;48870:11;48820:8;:62::i;:::-;48893:15;;;;;;;;;;;:31;;;48932:9;48965:4;48985:11;49011:1;49028;49045:7;:5;:7::i;:::-;49067:15;48893:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48739:362;;:::o;11397:278::-;11483:7;11515:1;11511;:5;11518:12;11503:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11542:9;11558:1;11554;:5;;;;:::i;:::-;11542:17;;11666:1;11659:8;;;11397:278;;;;;:::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:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:118::-;1698:24;1716:5;1698:24;:::i;:::-;1693:3;1686:37;1611:118;;:::o;1735:222::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1735:222;;;;:::o;1963:99::-;2015:6;2049:5;2043:12;2033:22;;1963:99;;;:::o;2068:169::-;2152:11;2186:6;2181:3;2174:19;2226:4;2221:3;2217:14;2202:29;;2068:169;;;;:::o;2243:246::-;2324:1;2334:113;2348:6;2345:1;2342:13;2334:113;;;2433:1;2428:3;2424:11;2418:18;2414:1;2409:3;2405:11;2398:39;2370:2;2367:1;2363:10;2358:15;;2334:113;;;2481:1;2472:6;2467:3;2463:16;2456:27;2305:184;2243:246;;;:::o;2495:102::-;2536:6;2587:2;2583:7;2578:2;2571:5;2567:14;2563:28;2553:38;;2495:102;;;:::o;2603:377::-;2691:3;2719:39;2752:5;2719:39;:::i;:::-;2774:71;2838:6;2833:3;2774:71;:::i;:::-;2767:78;;2854:65;2912:6;2907:3;2900:4;2893:5;2889:16;2854:65;:::i;:::-;2944:29;2966:6;2944:29;:::i;:::-;2939:3;2935:39;2928:46;;2695:285;2603:377;;;;:::o;2986:313::-;3099:4;3137:2;3126:9;3122:18;3114:26;;3186:9;3180:4;3176:20;3172:1;3161:9;3157:17;3150:47;3214:78;3287:4;3278:6;3214:78;:::i;:::-;3206:86;;2986:313;;;;:::o;3305:122::-;3378:24;3396:5;3378:24;:::i;:::-;3371:5;3368:35;3358:63;;3417:1;3414;3407:12;3358:63;3305:122;:::o;3433:139::-;3479:5;3517:6;3504:20;3495:29;;3533:33;3560:5;3533:33;:::i;:::-;3433:139;;;;:::o;3578:474::-;3646:6;3654;3703:2;3691:9;3682:7;3678:23;3674:32;3671:119;;;3709:79;;:::i;:::-;3671:119;3829:1;3854:53;3899:7;3890:6;3879:9;3875:22;3854:53;:::i;:::-;3844:63;;3800:117;3956:2;3982:53;4027:7;4018:6;4007:9;4003:22;3982:53;:::i;:::-;3972:63;;3927:118;3578:474;;;;;:::o;4058:90::-;4092:7;4135:5;4128:13;4121:21;4110:32;;4058:90;;;:::o;4154:109::-;4235:21;4250:5;4235:21;:::i;:::-;4230:3;4223:34;4154:109;;:::o;4269:210::-;4356:4;4394:2;4383:9;4379:18;4371:26;;4407:65;4469:1;4458:9;4454:17;4445:6;4407:65;:::i;:::-;4269:210;;;;:::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:116::-;5533:21;5548:5;5533:21;:::i;:::-;5526:5;5523:32;5513:60;;5569:1;5566;5559:12;5513:60;5463:116;:::o;5585:133::-;5628:5;5666:6;5653:20;5644:29;;5682:30;5706:5;5682:30;:::i;:::-;5585:133;;;;:::o;5724:468::-;5789:6;5797;5846:2;5834:9;5825:7;5821:23;5817:32;5814:119;;;5852:79;;:::i;:::-;5814:119;5972:1;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5943:117;6099:2;6125:50;6167:7;6158:6;6147:9;6143:22;6125:50;:::i;:::-;6115:60;;6070:115;5724:468;;;;;:::o;6198:117::-;6307:1;6304;6297:12;6321:180;6369:77;6366:1;6359:88;6466:4;6463:1;6456:15;6490:4;6487:1;6480:15;6507:281;6590:27;6612:4;6590:27;:::i;:::-;6582:6;6578:40;6720:6;6708:10;6705:22;6684:18;6672:10;6669:34;6666:62;6663:88;;;6731:18;;:::i;:::-;6663:88;6771:10;6767:2;6760:22;6550:238;6507:281;;:::o;6794:129::-;6828:6;6855:20;;:::i;:::-;6845:30;;6884:33;6912:4;6904:6;6884:33;:::i;:::-;6794:129;;;:::o;6929:311::-;7006:4;7096:18;7088:6;7085:30;7082:56;;;7118:18;;:::i;:::-;7082:56;7168:4;7160:6;7156:17;7148:25;;7228:4;7222;7218:15;7210:23;;6929:311;;;:::o;7246:117::-;7355:1;7352;7345:12;7386:710;7482:5;7507:81;7523:64;7580:6;7523:64;:::i;:::-;7507:81;:::i;:::-;7498:90;;7608:5;7637:6;7630:5;7623:21;7671:4;7664:5;7660:16;7653:23;;7724:4;7716:6;7712:17;7704:6;7700:30;7753:3;7745:6;7742:15;7739:122;;;7772:79;;:::i;:::-;7739:122;7887:6;7870:220;7904:6;7899:3;7896:15;7870:220;;;7979:3;8008:37;8041:3;8029:10;8008:37;:::i;:::-;8003:3;7996:50;8075:4;8070:3;8066:14;8059:21;;7946:144;7930:4;7925:3;7921:14;7914:21;;7870:220;;;7874:21;7488:608;;7386:710;;;;;:::o;8119:370::-;8190:5;8239:3;8232:4;8224:6;8220:17;8216:27;8206:122;;8247:79;;:::i;:::-;8206:122;8364:6;8351:20;8389:94;8479:3;8471:6;8464:4;8456:6;8452:17;8389:94;:::i;:::-;8380:103;;8196:293;8119:370;;;;:::o;8495:311::-;8572:4;8662:18;8654:6;8651:30;8648:56;;;8684:18;;:::i;:::-;8648:56;8734:4;8726:6;8722:17;8714:25;;8794:4;8788;8784:15;8776:23;;8495:311;;;:::o;8829:710::-;8925:5;8950:81;8966:64;9023:6;8966:64;:::i;:::-;8950:81;:::i;:::-;8941:90;;9051:5;9080:6;9073:5;9066:21;9114:4;9107:5;9103:16;9096:23;;9167:4;9159:6;9155:17;9147:6;9143:30;9196:3;9188:6;9185:15;9182:122;;;9215:79;;:::i;:::-;9182:122;9330:6;9313:220;9347:6;9342:3;9339:15;9313:220;;;9422:3;9451:37;9484:3;9472:10;9451:37;:::i;:::-;9446:3;9439:50;9518:4;9513:3;9509:14;9502:21;;9389:144;9373:4;9368:3;9364:14;9357:21;;9313:220;;;9317:21;8931:608;;8829:710;;;;;:::o;9562:370::-;9633:5;9682:3;9675:4;9667:6;9663:17;9659:27;9649:122;;9690:79;;:::i;:::-;9649:122;9807:6;9794:20;9832:94;9922:3;9914:6;9907:4;9899:6;9895:17;9832:94;:::i;:::-;9823:103;;9639:293;9562:370;;;;:::o;9938:894::-;10056:6;10064;10113:2;10101:9;10092:7;10088:23;10084:32;10081:119;;;10119:79;;:::i;:::-;10081:119;10267:1;10256:9;10252:17;10239:31;10297:18;10289:6;10286:30;10283:117;;;10319:79;;:::i;:::-;10283:117;10424:78;10494:7;10485:6;10474:9;10470:22;10424:78;:::i;:::-;10414:88;;10210:302;10579:2;10568:9;10564:18;10551:32;10610:18;10602:6;10599:30;10596:117;;;10632:79;;:::i;:::-;10596:117;10737:78;10807:7;10798:6;10787:9;10783:22;10737:78;:::i;:::-;10727:88;;10522:303;9938:894;;;;;:::o;10838:619::-;10915:6;10923;10931;10980:2;10968:9;10959:7;10955:23;10951:32;10948:119;;;10986:79;;:::i;:::-;10948:119;11106:1;11131:53;11176:7;11167:6;11156:9;11152:22;11131:53;:::i;:::-;11121:63;;11077:117;11233:2;11259:53;11304:7;11295:6;11284:9;11280:22;11259:53;:::i;:::-;11249:63;;11204:118;11361:2;11387:53;11432:7;11423:6;11412:9;11408:22;11387:53;:::i;:::-;11377:63;;11332:118;10838:619;;;;;:::o;11463:323::-;11519:6;11568:2;11556:9;11547:7;11543:23;11539:32;11536:119;;;11574:79;;:::i;:::-;11536:119;11694:1;11719:50;11761:7;11752:6;11741:9;11737:22;11719:50;:::i;:::-;11709:60;;11665:114;11463:323;;;;:::o;11792:86::-;11827:7;11867:4;11860:5;11856:16;11845:27;;11792:86;;;:::o;11884:112::-;11967:22;11983:5;11967:22;:::i;:::-;11962:3;11955:35;11884:112;;:::o;12002:214::-;12091:4;12129:2;12118:9;12114:18;12106:26;;12142:67;12206:1;12195:9;12191:17;12182:6;12142:67;:::i;:::-;12002:214;;;;:::o;12222:329::-;12281:6;12330:2;12318:9;12309:7;12305:23;12301:32;12298:119;;;12336:79;;:::i;:::-;12298:119;12456:1;12481:53;12526:7;12517:6;12506:9;12502:22;12481:53;:::i;:::-;12471:63;;12427:117;12222:329;;;;:::o;12557:474::-;12625:6;12633;12682:2;12670:9;12661:7;12657:23;12653:32;12650:119;;;12688:79;;:::i;:::-;12650:119;12808:1;12833:53;12878:7;12869:6;12858:9;12854:22;12833:53;:::i;:::-;12823:63;;12779:117;12935:2;12961:53;13006:7;12997:6;12986:9;12982:22;12961:53;:::i;:::-;12951:63;;12906:118;12557:474;;;;;:::o;13037:104::-;13082:7;13111:24;13129:5;13111:24;:::i;:::-;13100:35;;13037:104;;;:::o;13147:142::-;13250:32;13276:5;13250:32;:::i;:::-;13245:3;13238:45;13147:142;;:::o;13295:254::-;13404:4;13442:2;13431:9;13427:18;13419:26;;13455:87;13539:1;13528:9;13524:17;13515:6;13455:87;:::i;:::-;13295:254;;;;:::o;13555:474::-;13623:6;13631;13680:2;13668:9;13659:7;13655:23;13651:32;13648:119;;;13686:79;;:::i;:::-;13648:119;13806:1;13831:53;13876:7;13867:6;13856:9;13852:22;13831:53;:::i;:::-;13821:63;;13777:117;13933:2;13959:53;14004:7;13995:6;13984:9;13980:22;13959:53;:::i;:::-;13949:63;;13904:118;13555:474;;;;;:::o;14035:182::-;14175:34;14171:1;14163:6;14159:14;14152:58;14035:182;:::o;14223:366::-;14365:3;14386:67;14450:2;14445:3;14386:67;:::i;:::-;14379:74;;14462:93;14551:3;14462:93;:::i;:::-;14580:2;14575:3;14571:12;14564:19;;14223:366;;;:::o;14595:419::-;14761:4;14799:2;14788:9;14784:18;14776:26;;14848:9;14842:4;14838:20;14834:1;14823:9;14819:17;14812:47;14876:131;15002:4;14876:131;:::i;:::-;14868:139;;14595:419;;;:::o;15020:143::-;15077:5;15108:6;15102:13;15093:22;;15124:33;15151:5;15124:33;:::i;:::-;15020:143;;;;:::o;15169:351::-;15239:6;15288:2;15276:9;15267:7;15263:23;15259:32;15256:119;;;15294:79;;:::i;:::-;15256:119;15414:1;15439:64;15495:7;15486:6;15475:9;15471:22;15439:64;:::i;:::-;15429:74;;15385:128;15169:351;;;;:::o;15526:332::-;15647:4;15685:2;15674:9;15670:18;15662:26;;15698:71;15766:1;15755:9;15751:17;15742:6;15698:71;:::i;:::-;15779:72;15847:2;15836:9;15832:18;15823:6;15779:72;:::i;:::-;15526:332;;;;;:::o;15864:180::-;15912:77;15909:1;15902:88;16009:4;16006:1;15999:15;16033:4;16030:1;16023:15;16050:320;16094:6;16131:1;16125:4;16121:12;16111:22;;16178:1;16172:4;16168:12;16199:18;16189:81;;16255:4;16247:6;16243:17;16233:27;;16189:81;16317:2;16309:6;16306:14;16286:18;16283:38;16280:84;;16336:18;;:::i;:::-;16280:84;16101:269;16050:320;;;:::o;16376:236::-;16516:34;16512:1;16504:6;16500:14;16493:58;16585:19;16580:2;16572:6;16568:15;16561:44;16376:236;:::o;16618:366::-;16760:3;16781:67;16845:2;16840:3;16781:67;:::i;:::-;16774:74;;16857:93;16946:3;16857:93;:::i;:::-;16975:2;16970:3;16966:12;16959:19;;16618:366;;;:::o;16990:419::-;17156:4;17194:2;17183:9;17179:18;17171:26;;17243:9;17237:4;17233:20;17229:1;17218:9;17214:17;17207:47;17271:131;17397:4;17271:131;:::i;:::-;17263:139;;16990:419;;;:::o;17415:180::-;17463:77;17460:1;17453:88;17560:4;17557:1;17550:15;17584:4;17581:1;17574:15;17601:180;17649:77;17646:1;17639:88;17746:4;17743:1;17736:15;17770:4;17767:1;17760:15;17787:233;17826:3;17849:24;17867:5;17849:24;:::i;:::-;17840:33;;17895:66;17888:5;17885:77;17882:103;;17965:18;;:::i;:::-;17882:103;18012:1;18005:5;18001:13;17994:20;;17787:233;;;:::o;18026:173::-;18166:25;18162:1;18154:6;18150:14;18143:49;18026:173;:::o;18205:366::-;18347:3;18368:67;18432:2;18427:3;18368:67;:::i;:::-;18361:74;;18444:93;18533:3;18444:93;:::i;:::-;18562:2;18557:3;18553:12;18546:19;;18205:366;;;:::o;18577:419::-;18743:4;18781:2;18770:9;18766:18;18758:26;;18830:9;18824:4;18820:20;18816:1;18805:9;18801:17;18794:47;18858:131;18984:4;18858:131;:::i;:::-;18850:139;;18577:419;;;:::o;19002:191::-;19042:3;19061:20;19079:1;19061:20;:::i;:::-;19056:25;;19095:20;19113:1;19095:20;:::i;:::-;19090:25;;19138:1;19135;19131:9;19124:16;;19159:3;19156:1;19153:10;19150:36;;;19166:18;;:::i;:::-;19150:36;19002:191;;;;:::o;19199:227::-;19339:34;19335:1;19327:6;19323:14;19316:58;19408:10;19403:2;19395:6;19391:15;19384:35;19199:227;:::o;19432:366::-;19574:3;19595:67;19659:2;19654:3;19595:67;:::i;:::-;19588:74;;19671:93;19760:3;19671:93;:::i;:::-;19789:2;19784:3;19780:12;19773:19;;19432:366;;;:::o;19804:419::-;19970:4;20008:2;19997:9;19993:18;19985:26;;20057:9;20051:4;20047:20;20043:1;20032:9;20028:17;20021:47;20085:131;20211:4;20085:131;:::i;:::-;20077:139;;19804:419;;;:::o;20229:228::-;20369:34;20365:1;20357:6;20353:14;20346:58;20438:11;20433:2;20425:6;20421:15;20414:36;20229:228;:::o;20463:366::-;20605:3;20626:67;20690:2;20685:3;20626:67;:::i;:::-;20619:74;;20702:93;20791:3;20702:93;:::i;:::-;20820:2;20815:3;20811:12;20804:19;;20463:366;;;:::o;20835:419::-;21001:4;21039:2;21028:9;21024:18;21016:26;;21088:9;21082:4;21078:20;21074:1;21063:9;21059:17;21052:47;21116:131;21242:4;21116:131;:::i;:::-;21108:139;;20835:419;;;:::o;21260:221::-;21400:34;21396:1;21388:6;21384:14;21377:58;21469:4;21464:2;21456:6;21452:15;21445:29;21260:221;:::o;21487:366::-;21629:3;21650:67;21714:2;21709:3;21650:67;:::i;:::-;21643:74;;21726:93;21815:3;21726:93;:::i;:::-;21844:2;21839:3;21835:12;21828:19;;21487:366;;;:::o;21859:419::-;22025:4;22063:2;22052:9;22048:18;22040:26;;22112:9;22106:4;22102:20;22098:1;22087:9;22083:17;22076:47;22140:131;22266:4;22140:131;:::i;:::-;22132:139;;21859:419;;;:::o;22284:225::-;22424:34;22420:1;22412:6;22408:14;22401:58;22493:8;22488:2;22480:6;22476:15;22469:33;22284:225;:::o;22515:366::-;22657:3;22678:67;22742:2;22737:3;22678:67;:::i;:::-;22671:74;;22754:93;22843:3;22754:93;:::i;:::-;22872:2;22867:3;22863:12;22856:19;;22515:366;;;:::o;22887:419::-;23053:4;23091:2;23080:9;23076:18;23068:26;;23140:9;23134:4;23130:20;23126:1;23115:9;23111:17;23104:47;23168:131;23294:4;23168:131;:::i;:::-;23160:139;;22887:419;;;:::o;23312:85::-;23357:7;23386:5;23375:16;;23312:85;;;:::o;23403:158::-;23461:9;23494:61;23512:42;23521:32;23547:5;23521:32;:::i;:::-;23512:42;:::i;:::-;23494:61;:::i;:::-;23481:74;;23403:158;;;:::o;23567:147::-;23662:45;23701:5;23662:45;:::i;:::-;23657:3;23650:58;23567:147;;:::o;23720:114::-;23787:6;23821:5;23815:12;23805:22;;23720:114;;;:::o;23840:184::-;23939:11;23973:6;23968:3;23961:19;24013:4;24008:3;24004:14;23989:29;;23840:184;;;;:::o;24030:132::-;24097:4;24120:3;24112:11;;24150:4;24145:3;24141:14;24133:22;;24030:132;;;:::o;24168:108::-;24245:24;24263:5;24245:24;:::i;:::-;24240:3;24233:37;24168:108;;:::o;24282:179::-;24351:10;24372:46;24414:3;24406:6;24372:46;:::i;:::-;24450:4;24445:3;24441:14;24427:28;;24282:179;;;;:::o;24467:113::-;24537:4;24569;24564:3;24560:14;24552:22;;24467:113;;;:::o;24616:732::-;24735:3;24764:54;24812:5;24764:54;:::i;:::-;24834:86;24913:6;24908:3;24834:86;:::i;:::-;24827:93;;24944:56;24994:5;24944:56;:::i;:::-;25023:7;25054:1;25039:284;25064:6;25061:1;25058:13;25039:284;;;25140:6;25134:13;25167:63;25226:3;25211:13;25167:63;:::i;:::-;25160:70;;25253:60;25306:6;25253:60;:::i;:::-;25243:70;;25099:224;25086:1;25083;25079:9;25074:14;;25039:284;;;25043:14;25339:3;25332:10;;24740:608;;;24616:732;;;;:::o;25354:720::-;25589:4;25627:3;25616:9;25612:19;25604:27;;25641:79;25717:1;25706:9;25702:17;25693:6;25641:79;:::i;:::-;25767:9;25761:4;25757:20;25752:2;25741:9;25737:18;25730:48;25795:108;25898:4;25889:6;25795:108;:::i;:::-;25787:116;;25913:72;25981:2;25970:9;25966:18;25957:6;25913:72;:::i;:::-;25995;26063:2;26052:9;26048:18;26039:6;25995:72;:::i;:::-;25354:720;;;;;;;:::o;26080:223::-;26220:34;26216:1;26208:6;26204:14;26197:58;26289:6;26284:2;26276:6;26272:15;26265:31;26080:223;:::o;26309:366::-;26451:3;26472:67;26536:2;26531:3;26472:67;:::i;:::-;26465:74;;26548:93;26637:3;26548:93;:::i;:::-;26666:2;26661:3;26657:12;26650:19;;26309:366;;;:::o;26681:419::-;26847:4;26885:2;26874:9;26870:18;26862:26;;26934:9;26928:4;26924:20;26920:1;26909:9;26905:17;26898:47;26962:131;27088:4;26962:131;:::i;:::-;26954:139;;26681:419;;;:::o;27106:221::-;27246:34;27242:1;27234:6;27230:14;27223:58;27315:4;27310:2;27302:6;27298:15;27291:29;27106:221;:::o;27333:366::-;27475:3;27496:67;27560:2;27555:3;27496:67;:::i;:::-;27489:74;;27572:93;27661:3;27572:93;:::i;:::-;27690:2;27685:3;27681:12;27674:19;;27333:366;;;:::o;27705:419::-;27871:4;27909:2;27898:9;27894:18;27886:26;;27958:9;27952:4;27948:20;27944:1;27933:9;27929:17;27922:47;27986:131;28112:4;27986:131;:::i;:::-;27978:139;;27705:419;;;:::o;28130:224::-;28270:34;28266:1;28258:6;28254:14;28247:58;28339:7;28334:2;28326:6;28322:15;28315:32;28130:224;:::o;28360:366::-;28502:3;28523:67;28587:2;28582:3;28523:67;:::i;:::-;28516:74;;28599:93;28688:3;28599:93;:::i;:::-;28717:2;28712:3;28708:12;28701:19;;28360:366;;;:::o;28732:419::-;28898:4;28936:2;28925:9;28921:18;28913:26;;28985:9;28979:4;28975:20;28971:1;28960:9;28956:17;28949:47;29013:131;29139:4;29013:131;:::i;:::-;29005:139;;28732:419;;;:::o;29157:222::-;29297:34;29293:1;29285:6;29281:14;29274:58;29366:5;29361:2;29353:6;29349:15;29342:30;29157:222;:::o;29385:366::-;29527:3;29548:67;29612:2;29607:3;29548:67;:::i;:::-;29541:74;;29624:93;29713:3;29624:93;:::i;:::-;29742:2;29737:3;29733:12;29726:19;;29385:366;;;:::o;29757:419::-;29923:4;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29757:419;;;:::o;30182:250::-;30322:34;30318:1;30310:6;30306:14;30299:58;30391:33;30386:2;30378:6;30374:15;30367:58;30182:250;:::o;30438:366::-;30580:3;30601:67;30665:2;30660:3;30601:67;:::i;:::-;30594:74;;30677:93;30766:3;30677:93;:::i;:::-;30795:2;30790:3;30786:12;30779:19;;30438:366;;;:::o;30810:419::-;30976:4;31014:2;31003:9;30999:18;30991:26;;31063:9;31057:4;31053:20;31049:1;31038:9;31034:17;31027:47;31091:131;31217:4;31091:131;:::i;:::-;31083:139;;30810:419;;;:::o;31235:194::-;31275:4;31295:20;31313:1;31295:20;:::i;:::-;31290:25;;31329:20;31347:1;31329:20;:::i;:::-;31324:25;;31373:1;31370;31366:9;31358:17;;31397:1;31391:4;31388:11;31385:37;;;31402:18;;:::i;:::-;31385:37;31235:194;;;;:::o;31435:177::-;31575:29;31571:1;31563:6;31559:14;31552:53;31435:177;:::o;31618:366::-;31760:3;31781:67;31845:2;31840:3;31781:67;:::i;:::-;31774:74;;31857:93;31946:3;31857:93;:::i;:::-;31975:2;31970:3;31966:12;31959:19;;31618:366;;;:::o;31990:419::-;32156:4;32194:2;32183:9;32179:18;32171:26;;32243:9;32237:4;32233:20;32229:1;32218:9;32214:17;32207:47;32271:131;32397:4;32271:131;:::i;:::-;32263:139;;31990:419;;;:::o;32415:167::-;32555:19;32551:1;32543:6;32539:14;32532:43;32415:167;:::o;32588:366::-;32730:3;32751:67;32815:2;32810:3;32751:67;:::i;:::-;32744:74;;32827:93;32916:3;32827:93;:::i;:::-;32945:2;32940:3;32936:12;32929:19;;32588:366;;;:::o;32960:419::-;33126:4;33164:2;33153:9;33149:18;33141:26;;33213:9;33207:4;33203:20;33199:1;33188:9;33184:17;33177:47;33241:131;33367:4;33241:131;:::i;:::-;33233:139;;32960:419;;;:::o;33385:442::-;33534:4;33572:2;33561:9;33557:18;33549:26;;33585:71;33653:1;33642:9;33638:17;33629:6;33585:71;:::i;:::-;33666:72;33734:2;33723:9;33719:18;33710:6;33666:72;:::i;:::-;33748;33816:2;33805:9;33801:18;33792:6;33748:72;:::i;:::-;33385:442;;;;;;:::o;33833:410::-;33873:7;33896:20;33914:1;33896:20;:::i;:::-;33891:25;;33930:20;33948:1;33930:20;:::i;:::-;33925:25;;33985:1;33982;33978:9;34007:30;34025:11;34007:30;:::i;:::-;33996:41;;34186:1;34177:7;34173:15;34170:1;34167:22;34147:1;34140:9;34120:83;34097:139;;34216:18;;:::i;:::-;34097:139;33881:362;33833:410;;;;:::o;34249:180::-;34297:77;34294:1;34287:88;34394:4;34391:1;34384:15;34418:4;34415:1;34408:15;34435:185;34475:1;34492:20;34510:1;34492:20;:::i;:::-;34487:25;;34526:20;34544:1;34526:20;:::i;:::-;34521:25;;34565:1;34555:35;;34570:18;;:::i;:::-;34555:35;34612:1;34609;34605:9;34600:14;;34435:185;;;;:::o;34626:220::-;34766:34;34762:1;34754:6;34750:14;34743:58;34835:3;34830:2;34822:6;34818:15;34811:28;34626:220;:::o;34852:366::-;34994:3;35015:67;35079:2;35074:3;35015:67;:::i;:::-;35008:74;;35091:93;35180:3;35091:93;:::i;:::-;35209:2;35204:3;35200:12;35193:19;;34852:366;;;:::o;35224:419::-;35390:4;35428:2;35417:9;35413:18;35405:26;;35477:9;35471:4;35467:20;35463:1;35452:9;35448:17;35441:47;35505:131;35631:4;35505:131;:::i;:::-;35497:139;;35224:419;;;:::o;35649:831::-;35912:4;35950:3;35939:9;35935:19;35927:27;;35964:71;36032:1;36021:9;36017:17;36008:6;35964:71;:::i;:::-;36045:80;36121:2;36110:9;36106:18;36097:6;36045:80;:::i;:::-;36172:9;36166:4;36162:20;36157:2;36146:9;36142:18;36135:48;36200:108;36303:4;36294:6;36200:108;:::i;:::-;36192:116;;36318:72;36386:2;36375:9;36371:18;36362:6;36318:72;:::i;:::-;36400:73;36468:3;36457:9;36453:19;36444:6;36400:73;:::i;:::-;35649:831;;;;;;;;:::o;36486:483::-;36657:4;36695:2;36684:9;36680:18;36672:26;;36708:71;36776:1;36765:9;36761:17;36752:6;36708:71;:::i;:::-;36826:9;36820:4;36816:20;36811:2;36800:9;36796:18;36789:48;36854:108;36957:4;36948:6;36854:108;:::i;:::-;36846:116;;36486:483;;;;;:::o;36975:807::-;37224:4;37262:3;37251:9;37247:19;37239:27;;37276:71;37344:1;37333:9;37329:17;37320:6;37276:71;:::i;:::-;37357:72;37425:2;37414:9;37410:18;37401:6;37357:72;:::i;:::-;37439:80;37515:2;37504:9;37500:18;37491:6;37439:80;:::i;:::-;37529;37605:2;37594:9;37590:18;37581:6;37529:80;:::i;:::-;37619:73;37687:3;37676:9;37672:19;37663:6;37619:73;:::i;:::-;37702;37770:3;37759:9;37755:19;37746:6;37702:73;:::i;:::-;36975:807;;;;;;;;;:::o;37788:143::-;37845:5;37876:6;37870:13;37861:22;;37892:33;37919:5;37892:33;:::i;:::-;37788:143;;;;:::o;37937:663::-;38025:6;38033;38041;38090:2;38078:9;38069:7;38065:23;38061:32;38058:119;;;38096:79;;:::i;:::-;38058:119;38216:1;38241:64;38297:7;38288:6;38277:9;38273:22;38241:64;:::i;:::-;38231:74;;38187:128;38354:2;38380:64;38436:7;38427:6;38416:9;38412:22;38380:64;:::i;:::-;38370:74;;38325:129;38493:2;38519:64;38575:7;38566:6;38555:9;38551:22;38519:64;:::i;:::-;38509:74;;38464:129;37937:663;;;;;:::o

Swarm Source

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