ETH Price: $2,279.38 (+0.30%)

Token

Sam Bankman Fed (SBFed)
 

Overview

Max Total Supply

1,000,000,000 SBFed

Holders

40

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
SBFED

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-10
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;


// ERC Standard Objects 
// --------------------------------------------------------------
/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
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 SBFED is Context, IERC20, Ownable {
    // Imports
    using SafeMath for uint256;
    using Address for address;

    // Configurables -----------------------------
    
    // Context
    string private _name = "Sam Bankman Fed";
    string private _symbol = "SBFed";
    uint8 private _decimals = 18;

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

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

    // fees
    uint256 public liquidityFeeSell = 1;
    uint256 public operationsFeeSell = 2;
    uint256 public totalFeesSell;
    uint256 public maxTotalFeeSell = 10;

    // distribution ratio
    uint256 public _liquiditySharePercentage = 10;
    uint256 public _operationsSharePercentage = 90;
    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 = false;    

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

    // @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":"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"}]

60a06040526040518060400160405280600f81526020017f53616d2042616e6b6d616e204665640000000000000000000000000000000000815250600190816200004a919062000f3d565b506040518060400160405280600581526020017f53424665640000000000000000000000000000000000000000000000000000008152506002908162000091919062000f3d565b506012600360006101000a81548160ff021916908360ff1602179055506b033b2e3c9fd0803ce8000000600455620186a06019600454620000d3919062001053565b620000df9190620010cd565b6005556103e8600a600454620000f6919062001053565b620001029190620010cd565b6006556103e8600a60045462000119919062001053565b620001259190620010cd565b6007556001600860006101000a81548160ff02191690831515021790555073c7a788c1bdd3151541c336cac8ff8bc502320e48600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c7a788c1bdd3151541c336cac8ff8bc502320e48600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506001600a556002600b55600a600d556001600e556002600f55600a601155600a601255605a6013556000601f60006101000a81548160ff0219169083151502179055503480156200027257600080fd5b5060006200028562000c9260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600b5462000335919062001105565b600c81905550600e54600f546200034d919062001105565b60108190555060135460125462000365919062001105565b6014819055506000600146036200039357737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003bf565b60054603620003b957737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003be565b600080fd5b5b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004319190620011aa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000499573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004bf9190620011aa565b6040518363ffffffff1660e01b8152600401620004de929190620011ed565b6020604051808303816000875af1158015620004fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005249190620011aa565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600454601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160176000620006da62000c9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000620008e762000c9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600062000b1462000c9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506004546015600062000bd462000c9260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000c2262000c9260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000c8391906200122b565b60405180910390a35062001248565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d4557607f821691505b60208210810362000d5b5762000d5a62000cfd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dc57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d86565b62000dd1868362000d86565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e1e62000e1862000e128462000de9565b62000df3565b62000de9565b9050919050565b6000819050919050565b62000e3a8362000dfd565b62000e5262000e498262000e25565b84845462000d93565b825550505050565b600090565b62000e6962000e5a565b62000e7681848462000e2f565b505050565b5b8181101562000e9e5762000e9260008262000e5f565b60018101905062000e7c565b5050565b601f82111562000eed5762000eb78162000d61565b62000ec28462000d76565b8101602085101562000ed2578190505b62000eea62000ee18562000d76565b83018262000e7b565b50505b505050565b600082821c905092915050565b600062000f126000198460080262000ef2565b1980831691505092915050565b600062000f2d838362000eff565b9150826002028217905092915050565b62000f488262000cc3565b67ffffffffffffffff81111562000f645762000f6362000cce565b5b62000f70825462000d2c565b62000f7d82828562000ea2565b600060209050601f83116001811462000fb5576000841562000fa0578287015190505b62000fac858262000f1f565b8655506200101c565b601f19841662000fc58662000d61565b60005b8281101562000fef5784890151825560018201915060208501945060208101905062000fc8565b868310156200100f57848901516200100b601f89168262000eff565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010608262000de9565b91506200106d8362000de9565b92508282026200107d8162000de9565b9150828204841483151762001097576200109662001024565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010da8262000de9565b9150620010e78362000de9565b925082620010fa57620010f96200109e565b5b828204905092915050565b6000620011128262000de9565b91506200111f8362000de9565b92508282019050808211156200113a576200113962001024565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011728262001145565b9050919050565b620011848162001165565b81146200119057600080fd5b50565b600081519050620011a48162001179565b92915050565b600060208284031215620011c357620011c262001140565b5b6000620011d38482850162001193565b91505092915050565b620011e78162001165565b82525050565b6000604082019050620012046000830185620011dc565b620012136020830184620011dc565b9392505050565b620012258162000de9565b82525050565b60006020820190506200124260008301846200121a565b92915050565b6080516153676200126b6000396000818161164e015261167a01526153676000f3fe6080604052600436106103855760003560e01c80637d1db4a5116101d1578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d25578063fc155d1d14610d50578063fd72e22a14610d79578063ffb54a9914610da45761038c565b8063f1d5f51714610c7f578063f2fde38b14610ca8578063f84ba65d14610cd1578063f872858a14610cfa5761038c565b8063e37ba8f9116100dc578063e37ba8f914610bdb578063ec28438a14610c04578063eea5b63f14610c2d578063ef422a1814610c565761038c565b8063d469801614610b48578063dd62ed3e14610b73578063e10e9f3214610bb05761038c565b8063a073d37f1161016f578063a9059cbb11610149578063a9059cbb14610a78578063ac23ca5914610ab5578063c816841b14610ae0578063c867d60b14610b0b5761038c565b8063a073d37f146109e5578063a08e671f14610a10578063a457c2d714610a3b5761038c565b8063844d591c116101ab578063844d591c1461093d578063876b6f8e146109665780638da5cb5b1461098f57806395d89b41146109ba5761038c565b80637d1db4a5146108bc578063807c2d9c146108e757806382d20116146109125761038c565b80632b112e49116102b65780633ecad2711161025457806370a082311161022357806370a0823114610826578063715018a6146108635780637849c1cd1461087a5780637c519ffb146108a55761038c565b80633ecad271146107585780634b743995146107955780635342acb4146107c05780636db79437146107fd5761038c565b806330d5d18d1161029057806330d5d18d1461069e578063313ce567146106c757806339509351146106f25780633b97084a1461072f5761038c565b80632b112e491461061d5780632baa7217146106485780632e97766d146106735761038c565b806318160ddd116103235780632198cf6c116102fd5780632198cf6c1461056357806323b872dd1461058c5780632563ae83146105c957806327c8f835146105f25761038c565b806318160ddd146104e257806319c59e2c1461050d5780631a8145bb146105385761038c565b8063095ea7b31161035f578063095ea7b3146104245780630e47e822146104615780631107b3a51461048c5780631694505e146104b75761038c565b8063031d6cd01461039157806304db6e68146103bc57806306fdde03146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcf565b6040516103b39190614232565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906142b0565b610dd5565b6040516103f091906142ec565b60405180910390f35b34801561040557600080fd5b5061040e6112d8565b60405161041b9190614397565b60405180910390f35b34801561043057600080fd5b5061044b600480360381019061044691906143e5565b61136a565b6040516104589190614440565b60405180910390f35b34801561046d57600080fd5b50610476611388565b6040516104839190614232565b60405180910390f35b34801561049857600080fd5b506104a161138e565b6040516104ae9190614232565b60405180910390f35b3480156104c357600080fd5b506104cc611394565b6040516104d991906144ba565b60405180910390f35b3480156104ee57600080fd5b506104f76113ba565b6040516105049190614232565b60405180910390f35b34801561051957600080fd5b506105226113c4565b60405161052f9190614232565b60405180910390f35b34801561054457600080fd5b5061054d6113ca565b60405161055a9190614232565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190614501565b6113d0565b005b34801561059857600080fd5b506105b360048036038101906105ae9190614541565b6114c0565b6040516105c09190614440565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190614594565b61159a565b005b3480156105fe57600080fd5b5061060761164c565b60405161061491906142ec565b60405180910390f35b34801561062957600080fd5b50610632611670565b60405161063f9190614232565b60405180910390f35b34801561065457600080fd5b5061065d6116b4565b60405161066a9190614232565b60405180910390f35b34801561067f57600080fd5b506106886116ba565b6040516106959190614232565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906142b0565b6116c2565b005b3480156106d357600080fd5b506106dc611958565b6040516106e991906145dd565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906143e5565b61196f565b6040516107269190614440565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906145f8565b611a22565b005b34801561076457600080fd5b5061077f600480360381019061077a91906142b0565b611ac1565b60405161078c9190614440565b60405180910390f35b3480156107a157600080fd5b506107aa611ae1565b6040516107b79190614232565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e291906142b0565b611ae7565b6040516107f49190614440565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190614625565b611b07565b005b34801561083257600080fd5b5061084d600480360381019061084891906142b0565b611c0b565b60405161085a9190614232565b60405180910390f35b34801561086f57600080fd5b50610878611c54565b005b34801561088657600080fd5b5061088f611da7565b60405161089c9190614232565b60405180910390f35b3480156108b157600080fd5b506108ba611dad565b005b3480156108c857600080fd5b506108d1611e5f565b6040516108de9190614232565b60405180910390f35b3480156108f357600080fd5b506108fc611e65565b6040516109099190614232565b60405180910390f35b34801561091e57600080fd5b50610927611e6b565b6040516109349190614232565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f9190614501565b611e71565b005b34801561097257600080fd5b5061098d60048036038101906109889190614625565b611f61565b005b34801561099b57600080fd5b506109a461201e565b6040516109b191906142ec565b60405180910390f35b3480156109c657600080fd5b506109cf612047565b6040516109dc9190614397565b60405180910390f35b3480156109f157600080fd5b506109fa6120d9565b604051610a079190614232565b60405180910390f35b348015610a1c57600080fd5b50610a256120e3565b604051610a329190614232565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d91906143e5565b6120e9565b604051610a6f9190614440565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906143e5565b6121b6565b604051610aac9190614440565b60405180910390f35b348015610ac157600080fd5b50610aca6121d5565b604051610ad79190614232565b60405180910390f35b348015610aec57600080fd5b50610af56121db565b604051610b0291906142ec565b60405180910390f35b348015610b1757600080fd5b50610b326004803603810190610b2d91906142b0565b612201565b604051610b3f9190614440565b60405180910390f35b348015610b5457600080fd5b50610b5d612221565b604051610b6a9190614686565b60405180910390f35b348015610b7f57600080fd5b50610b9a6004803603810190610b9591906146a1565b612247565b604051610ba79190614232565b60405180910390f35b348015610bbc57600080fd5b50610bc56122ce565b604051610bd29190614232565b60405180910390f35b348015610be757600080fd5b50610c026004803603810190610bfd91906142b0565b6122d4565b005b348015610c1057600080fd5b50610c2b6004803603810190610c2691906145f8565b61256a565b005b348015610c3957600080fd5b50610c546004803603810190610c4f9190614625565b612609565b005b348015610c6257600080fd5b50610c7d6004803603810190610c789190614501565b61270b565b005b348015610c8b57600080fd5b50610ca66004803603810190610ca191906145f8565b6127fb565b005b348015610cb457600080fd5b50610ccf6004803603810190610cca91906142b0565b61289a565b005b348015610cdd57600080fd5b50610cf86004803603810190610cf39190614501565b612a5b565b005b348015610d0657600080fd5b50610d0f612b4b565b604051610d1c9190614440565b60405180910390f35b348015610d3157600080fd5b50610d3a612b5e565b604051610d479190614232565b60405180910390f35b348015610d5c57600080fd5b50610d776004803603810190610d7291906145f8565b612b64565b005b348015610d8557600080fd5b50610d8e612e10565b604051610d9b9190614686565b60405180910390f35b348015610db057600080fd5b50610db9612e36565b604051610dc69190614440565b60405180910390f35b600f5481565b6000610ddf612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e639061472d565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190614762565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b9190614762565b6040518363ffffffff1660e01b8152600401610f8892919061478f565b602060405180830381865afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc99190614762565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115c578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e9190614762565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190614762565b6040518363ffffffff1660e01b815260040161111692919061478f565b6020604051808303816000875af1158015611135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111599190614762565b91505b81601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6060600180546112e7906147e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611313906147e7565b80156113605780601f1061133557610100808354040283529160200191611360565b820191906000526020600020905b81548152906001019060200180831161134357829003601f168201915b5050505050905090565b600061137e611377612e49565b8484612e51565b6001905092915050565b60105481565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c5481565b601d5481565b6113d8612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c9061472d565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006114cd84848461301a565b5061158f846114da612e49565b61158a856040518060600160405280602881526020016152e560289139601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611540612e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135eb9092919063ffffffff16565b612e51565b600190509392505050565b6115a2612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116269061472d565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006116af61169e7f0000000000000000000000000000000000000000000000000000000000000000611c0b565b60045461364f90919063ffffffff16565b905090565b60135481565b600043905090565b6116ca612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061472d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90614864565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611a1861197c612e49565b84611a13856016600061198d612e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461369990919063ffffffff16565b612e51565b6001905092915050565b611a2a612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae9061472d565b60405180910390fd5b8060058190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60176020528060005260406000206000915054906101000a900460ff1681565b611b0f612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b939061472d565b60405180910390fd5b81600b8190555080600a81905550600a54600b54611bba91906148b3565b600c81905550600d54600c541115611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe90614959565b60405180910390fd5b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c5c612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce09061472d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611db5612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e399061472d565b60405180910390fd5b6001601f60006101000a81548160ff021916908315150217905550565b60065481565b60075481565b600a5481565b611e79612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd9061472d565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611f69612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed9061472d565b60405180910390fd5b81600f8190555080600e81905550600e54600f5461201491906148b3565b6010819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054612056906147e7565b80601f0160208091040260200160405190810160405280929190818152602001828054612082906147e7565b80156120cf5780601f106120a4576101008083540402835291602001916120cf565b820191906000526020600020905b8154815290600101906020018083116120b257829003601f168201915b5050505050905090565b6000600554905090565b60145481565b60006121ac6120f6612e49565b846121a78560405180606001604052806025815260200161530d6025913960166000612120612e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135eb9092919063ffffffff16565b612e51565b6001905092915050565b60006121ca6121c3612e49565b848461301a565b506001905092915050565b60125481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6122dc612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612369576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123609061472d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf90614864565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612572612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f69061472d565b60405180910390fd5b8060068190555050565b612611612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461269e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126959061472d565b60405180910390fd5b81601281905550806013819055506013546012546126bc91906148b3565b601481905550606460145414612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe906149eb565b60405180910390fd5b5050565b612713612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127979061472d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612803612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128879061472d565b60405180910390fd5b8060078190555050565b6128a2612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461292f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129269061472d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361299e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299590614a7d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a63612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae79061472d565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b601e5481565b612b6c612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf09061472d565b60405180910390fd5b6000600267ffffffffffffffff811115612c1657612c15614a9d565b5b604051908082528060200260200182016040528015612c445781602001602082028036833780820191505090505b509050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd89190614762565b81600081518110612cec57612ceb614acc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612d3b57612d3a614acc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612dda9493929190614bf4565b6000604051808303818588803b158015612df357600080fd5b505af1158015612e07573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb790614cb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2690614d44565b60405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161300d9190614232565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361308a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308190614dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f090614e68565b60405180910390fd5b601f60009054906101000a900460ff166131835761311561201e565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317990614efa565b60405180910390fd5b5b601c60149054906101000a900460ff16156131aa576131a38484846136f7565b90506135e4565b6131b261201e565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561322057506131f061201e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156132305761322f84836138ca565b5b600061323b30611c0b565b9050600060055482101590508080156132615750601c60149054906101000a900460ff16155b80156132b75750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c6576132c582613967565b5b61334f846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135eb9092919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134355750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61344957613444878787613b1f565b61344b565b845b9050600860009054906101000a900460ff1680156134b35750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e2576007546134d6826134c889611c0b565b61369990919063ffffffff16565b11156134e157600080fd5b5b61353481601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461369990919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135d49190614232565b60405180910390a3600193505050505b9392505050565b6000838311158290613633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362a9190614397565b60405180910390fd5b50600083856136429190614f1a565b9050809150509392505050565b600061369183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135eb565b905092915050565b60008082846136a891906148b3565b9050838110156136ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e490614f9a565b60405180910390fd5b8091505092915050565b6000613782826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135eb9092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381782601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461369990919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138b79190614232565b60405180910390a3600190509392505050565b600654811115806139245750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395a90615006565b60405180910390fd5b5050565b6001601c60146101000a81548160ff02191690831515021790555060006139c060026139b26014546139a460125487613d4690919063ffffffff16565b613dc090919063ffffffff16565b613dc090919063ffffffff16565b905060006139d7828461364f90919063ffffffff16565b90506139e281613e0a565b60004790506000613a13613a026002601254613dc090919063ffffffff16565b60145461364f90919063ffffffff16565b90506000613a516002613a4384613a3560125488613d4690919063ffffffff16565b613dc090919063ffffffff16565b613dc090919063ffffffff16565b90506000613a68828561364f90919063ffffffff16565b90506000811115613aa057613a9f600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614086565b5b600082118015613ab05750600086115b15613afb57613abf86836140d1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613af293929190615026565b60405180910390a15b5050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ba757613ba06064613b92600c5486613d4690919063ffffffff16565b613dc090919063ffffffff16565b9050613c25565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c2457613c216064613c1360105486613d4690919063ffffffff16565b613dc090919063ffffffff16565b90505b5b6000811115613d2957613c8081601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461369990919063ffffffff16565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d209190614232565b60405180910390a35b613d3c818461364f90919063ffffffff16565b9150509392505050565b6000808303613d585760009050613dba565b60008284613d66919061505d565b9050828482613d7591906150ce565b14613db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dac90615171565b60405180910390fd5b809150505b92915050565b6000613e0283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141b6565b905092915050565b6000600267ffffffffffffffff811115613e2757613e26614a9d565b5b604051908082528060200260200182016040528015613e555781602001602082028036833780820191505090505b5090503081600081518110613e6d57613e6c614acc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f389190614762565b81600181518110613f4c57613f4b614acc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613fb330601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e51565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614017959493929190615191565b600060405180830381600087803b15801561403157600080fd5b505af1158015614045573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161407a9291906151eb565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156140cc573d6000803e3d6000fd5b505050565b6140fe30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e51565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061414a61201e565b426040518863ffffffff1660e01b815260040161416c9695949392919061521b565b60606040518083038185885af115801561418a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141af9190615291565b5050505050565b600080831182906141fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141f49190614397565b60405180910390fd5b506000838561420c91906150ce565b9050809150509392505050565b6000819050919050565b61422c81614219565b82525050565b60006020820190506142476000830184614223565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061427d82614252565b9050919050565b61428d81614272565b811461429857600080fd5b50565b6000813590506142aa81614284565b92915050565b6000602082840312156142c6576142c561424d565b5b60006142d48482850161429b565b91505092915050565b6142e681614272565b82525050565b600060208201905061430160008301846142dd565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614341578082015181840152602081019050614326565b60008484015250505050565b6000601f19601f8301169050919050565b600061436982614307565b6143738185614312565b9350614383818560208601614323565b61438c8161434d565b840191505092915050565b600060208201905081810360008301526143b1818461435e565b905092915050565b6143c281614219565b81146143cd57600080fd5b50565b6000813590506143df816143b9565b92915050565b600080604083850312156143fc576143fb61424d565b5b600061440a8582860161429b565b925050602061441b858286016143d0565b9150509250929050565b60008115159050919050565b61443a81614425565b82525050565b60006020820190506144556000830184614431565b92915050565b6000819050919050565b600061448061447b61447684614252565b61445b565b614252565b9050919050565b600061449282614465565b9050919050565b60006144a482614487565b9050919050565b6144b481614499565b82525050565b60006020820190506144cf60008301846144ab565b92915050565b6144de81614425565b81146144e957600080fd5b50565b6000813590506144fb816144d5565b92915050565b600080604083850312156145185761451761424d565b5b60006145268582860161429b565b9250506020614537858286016144ec565b9150509250929050565b60008060006060848603121561455a5761455961424d565b5b60006145688682870161429b565b93505060206145798682870161429b565b925050604061458a868287016143d0565b9150509250925092565b6000602082840312156145aa576145a961424d565b5b60006145b8848285016144ec565b91505092915050565b600060ff82169050919050565b6145d7816145c1565b82525050565b60006020820190506145f260008301846145ce565b92915050565b60006020828403121561460e5761460d61424d565b5b600061461c848285016143d0565b91505092915050565b6000806040838503121561463c5761463b61424d565b5b600061464a858286016143d0565b925050602061465b858286016143d0565b9150509250929050565b600061467082614252565b9050919050565b61468081614665565b82525050565b600060208201905061469b6000830184614677565b92915050565b600080604083850312156146b8576146b761424d565b5b60006146c68582860161429b565b92505060206146d78582860161429b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614717602083614312565b9150614722826146e1565b602082019050919050565b600060208201905081810360008301526147468161470a565b9050919050565b60008151905061475c81614284565b92915050565b6000602082840312156147785761477761424d565b5b60006147868482850161474d565b91505092915050565b60006040820190506147a460008301856142dd565b6147b160208301846142dd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147ff57607f821691505b602082108103614812576148116147b8565b5b50919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b600061484e601783614312565b915061485982614818565b602082019050919050565b6000602082019050818103600083015261487d81614841565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148be82614219565b91506148c983614219565b92508282019050808211156148e1576148e0614884565b5b92915050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614943602883614312565b915061494e826148e7565b604082019050919050565b6000602082019050818103600083015261497281614936565b9050919050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d5602283614312565b91506149e082614979565b604082019050919050565b60006020820190508181036000830152614a04816149c8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a67602683614312565b9150614a7282614a0b565b604082019050919050565b60006020820190508181036000830152614a9681614a5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614b20614b1b614b1684614afb565b61445b565b614219565b9050919050565b614b3081614b05565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b6b81614272565b82525050565b6000614b7d8383614b62565b60208301905092915050565b6000602082019050919050565b6000614ba182614b36565b614bab8185614b41565b9350614bb683614b52565b8060005b83811015614be7578151614bce8882614b71565b9750614bd983614b89565b925050600181019050614bba565b5085935050505092915050565b6000608082019050614c096000830187614b27565b8181036020830152614c1b8186614b96565b9050614c2a60408301856142dd565b614c376060830184614223565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c9c602483614312565b9150614ca782614c40565b604082019050919050565b60006020820190508181036000830152614ccb81614c8f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d2e602283614312565b9150614d3982614cd2565b604082019050919050565b60006020820190508181036000830152614d5d81614d21565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dc0602583614312565b9150614dcb82614d64565b604082019050919050565b60006020820190508181036000830152614def81614db3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e52602383614312565b9150614e5d82614df6565b604082019050919050565b60006020820190508181036000830152614e8181614e45565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000614ee4603f83614312565b9150614eef82614e88565b604082019050919050565b60006020820190508181036000830152614f1381614ed7565b9050919050565b6000614f2582614219565b9150614f3083614219565b9250828203905081811115614f4857614f47614884565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f84601b83614312565b9150614f8f82614f4e565b602082019050919050565b60006020820190508181036000830152614fb381614f77565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614ff0601183614312565b9150614ffb82614fba565b602082019050919050565b6000602082019050818103600083015261501f81614fe3565b9050919050565b600060608201905061503b6000830186614223565b6150486020830185614223565b6150556040830184614223565b949350505050565b600061506882614219565b915061507383614219565b925082820261508181614219565b9150828204841483151761509857615097614884565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150d982614219565b91506150e483614219565b9250826150f4576150f361509f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061515b602183614312565b9150615166826150ff565b604082019050919050565b6000602082019050818103600083015261518a8161514e565b9050919050565b600060a0820190506151a66000830188614223565b6151b36020830187614b27565b81810360408301526151c58186614b96565b90506151d460608301856142dd565b6151e16080830184614223565b9695505050505050565b60006040820190506152006000830185614223565b81810360208301526152128184614b96565b90509392505050565b600060c08201905061523060008301896142dd565b61523d6020830188614223565b61524a6040830187614b27565b6152576060830186614b27565b61526460808301856142dd565b61527160a0830184614223565b979650505050505050565b60008151905061528b816143b9565b92915050565b6000806000606084860312156152aa576152a961424d565b5b60006152b88682870161527c565b93505060206152c98682870161527c565b92505060406152da8682870161527c565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b1db81353afee1c11be97c595afe3f26ee2edd85848c711b726ec141fbda52f64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80637d1db4a5116101d1578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d25578063fc155d1d14610d50578063fd72e22a14610d79578063ffb54a9914610da45761038c565b8063f1d5f51714610c7f578063f2fde38b14610ca8578063f84ba65d14610cd1578063f872858a14610cfa5761038c565b8063e37ba8f9116100dc578063e37ba8f914610bdb578063ec28438a14610c04578063eea5b63f14610c2d578063ef422a1814610c565761038c565b8063d469801614610b48578063dd62ed3e14610b73578063e10e9f3214610bb05761038c565b8063a073d37f1161016f578063a9059cbb11610149578063a9059cbb14610a78578063ac23ca5914610ab5578063c816841b14610ae0578063c867d60b14610b0b5761038c565b8063a073d37f146109e5578063a08e671f14610a10578063a457c2d714610a3b5761038c565b8063844d591c116101ab578063844d591c1461093d578063876b6f8e146109665780638da5cb5b1461098f57806395d89b41146109ba5761038c565b80637d1db4a5146108bc578063807c2d9c146108e757806382d20116146109125761038c565b80632b112e49116102b65780633ecad2711161025457806370a082311161022357806370a0823114610826578063715018a6146108635780637849c1cd1461087a5780637c519ffb146108a55761038c565b80633ecad271146107585780634b743995146107955780635342acb4146107c05780636db79437146107fd5761038c565b806330d5d18d1161029057806330d5d18d1461069e578063313ce567146106c757806339509351146106f25780633b97084a1461072f5761038c565b80632b112e491461061d5780632baa7217146106485780632e97766d146106735761038c565b806318160ddd116103235780632198cf6c116102fd5780632198cf6c1461056357806323b872dd1461058c5780632563ae83146105c957806327c8f835146105f25761038c565b806318160ddd146104e257806319c59e2c1461050d5780631a8145bb146105385761038c565b8063095ea7b31161035f578063095ea7b3146104245780630e47e822146104615780631107b3a51461048c5780631694505e146104b75761038c565b8063031d6cd01461039157806304db6e68146103bc57806306fdde03146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcf565b6040516103b39190614232565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906142b0565b610dd5565b6040516103f091906142ec565b60405180910390f35b34801561040557600080fd5b5061040e6112d8565b60405161041b9190614397565b60405180910390f35b34801561043057600080fd5b5061044b600480360381019061044691906143e5565b61136a565b6040516104589190614440565b60405180910390f35b34801561046d57600080fd5b50610476611388565b6040516104839190614232565b60405180910390f35b34801561049857600080fd5b506104a161138e565b6040516104ae9190614232565b60405180910390f35b3480156104c357600080fd5b506104cc611394565b6040516104d991906144ba565b60405180910390f35b3480156104ee57600080fd5b506104f76113ba565b6040516105049190614232565b60405180910390f35b34801561051957600080fd5b506105226113c4565b60405161052f9190614232565b60405180910390f35b34801561054457600080fd5b5061054d6113ca565b60405161055a9190614232565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190614501565b6113d0565b005b34801561059857600080fd5b506105b360048036038101906105ae9190614541565b6114c0565b6040516105c09190614440565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190614594565b61159a565b005b3480156105fe57600080fd5b5061060761164c565b60405161061491906142ec565b60405180910390f35b34801561062957600080fd5b50610632611670565b60405161063f9190614232565b60405180910390f35b34801561065457600080fd5b5061065d6116b4565b60405161066a9190614232565b60405180910390f35b34801561067f57600080fd5b506106886116ba565b6040516106959190614232565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906142b0565b6116c2565b005b3480156106d357600080fd5b506106dc611958565b6040516106e991906145dd565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906143e5565b61196f565b6040516107269190614440565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906145f8565b611a22565b005b34801561076457600080fd5b5061077f600480360381019061077a91906142b0565b611ac1565b60405161078c9190614440565b60405180910390f35b3480156107a157600080fd5b506107aa611ae1565b6040516107b79190614232565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e291906142b0565b611ae7565b6040516107f49190614440565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190614625565b611b07565b005b34801561083257600080fd5b5061084d600480360381019061084891906142b0565b611c0b565b60405161085a9190614232565b60405180910390f35b34801561086f57600080fd5b50610878611c54565b005b34801561088657600080fd5b5061088f611da7565b60405161089c9190614232565b60405180910390f35b3480156108b157600080fd5b506108ba611dad565b005b3480156108c857600080fd5b506108d1611e5f565b6040516108de9190614232565b60405180910390f35b3480156108f357600080fd5b506108fc611e65565b6040516109099190614232565b60405180910390f35b34801561091e57600080fd5b50610927611e6b565b6040516109349190614232565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f9190614501565b611e71565b005b34801561097257600080fd5b5061098d60048036038101906109889190614625565b611f61565b005b34801561099b57600080fd5b506109a461201e565b6040516109b191906142ec565b60405180910390f35b3480156109c657600080fd5b506109cf612047565b6040516109dc9190614397565b60405180910390f35b3480156109f157600080fd5b506109fa6120d9565b604051610a079190614232565b60405180910390f35b348015610a1c57600080fd5b50610a256120e3565b604051610a329190614232565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d91906143e5565b6120e9565b604051610a6f9190614440565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906143e5565b6121b6565b604051610aac9190614440565b60405180910390f35b348015610ac157600080fd5b50610aca6121d5565b604051610ad79190614232565b60405180910390f35b348015610aec57600080fd5b50610af56121db565b604051610b0291906142ec565b60405180910390f35b348015610b1757600080fd5b50610b326004803603810190610b2d91906142b0565b612201565b604051610b3f9190614440565b60405180910390f35b348015610b5457600080fd5b50610b5d612221565b604051610b6a9190614686565b60405180910390f35b348015610b7f57600080fd5b50610b9a6004803603810190610b9591906146a1565b612247565b604051610ba79190614232565b60405180910390f35b348015610bbc57600080fd5b50610bc56122ce565b604051610bd29190614232565b60405180910390f35b348015610be757600080fd5b50610c026004803603810190610bfd91906142b0565b6122d4565b005b348015610c1057600080fd5b50610c2b6004803603810190610c2691906145f8565b61256a565b005b348015610c3957600080fd5b50610c546004803603810190610c4f9190614625565b612609565b005b348015610c6257600080fd5b50610c7d6004803603810190610c789190614501565b61270b565b005b348015610c8b57600080fd5b50610ca66004803603810190610ca191906145f8565b6127fb565b005b348015610cb457600080fd5b50610ccf6004803603810190610cca91906142b0565b61289a565b005b348015610cdd57600080fd5b50610cf86004803603810190610cf39190614501565b612a5b565b005b348015610d0657600080fd5b50610d0f612b4b565b604051610d1c9190614440565b60405180910390f35b348015610d3157600080fd5b50610d3a612b5e565b604051610d479190614232565b60405180910390f35b348015610d5c57600080fd5b50610d776004803603810190610d7291906145f8565b612b64565b005b348015610d8557600080fd5b50610d8e612e10565b604051610d9b9190614686565b60405180910390f35b348015610db057600080fd5b50610db9612e36565b604051610dc69190614440565b60405180910390f35b600f5481565b6000610ddf612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e639061472d565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190614762565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b9190614762565b6040518363ffffffff1660e01b8152600401610f8892919061478f565b602060405180830381865afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc99190614762565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115c578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e9190614762565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190614762565b6040518363ffffffff1660e01b815260040161111692919061478f565b6020604051808303816000875af1158015611135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111599190614762565b91505b81601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6060600180546112e7906147e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611313906147e7565b80156113605780601f1061133557610100808354040283529160200191611360565b820191906000526020600020905b81548152906001019060200180831161134357829003601f168201915b5050505050905090565b600061137e611377612e49565b8484612e51565b6001905092915050565b60105481565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c5481565b601d5481565b6113d8612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c9061472d565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006114cd84848461301a565b5061158f846114da612e49565b61158a856040518060600160405280602881526020016152e560289139601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611540612e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135eb9092919063ffffffff16565b612e51565b600190509392505050565b6115a2612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116269061472d565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006116af61169e7f000000000000000000000000000000000000000000000000000000000000dead611c0b565b60045461364f90919063ffffffff16565b905090565b60135481565b600043905090565b6116ca612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061472d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90614864565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611a1861197c612e49565b84611a13856016600061198d612e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461369990919063ffffffff16565b612e51565b6001905092915050565b611a2a612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae9061472d565b60405180910390fd5b8060058190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60176020528060005260406000206000915054906101000a900460ff1681565b611b0f612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b939061472d565b60405180910390fd5b81600b8190555080600a81905550600a54600b54611bba91906148b3565b600c81905550600d54600c541115611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe90614959565b60405180910390fd5b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c5c612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce09061472d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611db5612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e399061472d565b60405180910390fd5b6001601f60006101000a81548160ff021916908315150217905550565b60065481565b60075481565b600a5481565b611e79612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd9061472d565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611f69612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed9061472d565b60405180910390fd5b81600f8190555080600e81905550600e54600f5461201491906148b3565b6010819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054612056906147e7565b80601f0160208091040260200160405190810160405280929190818152602001828054612082906147e7565b80156120cf5780601f106120a4576101008083540402835291602001916120cf565b820191906000526020600020905b8154815290600101906020018083116120b257829003601f168201915b5050505050905090565b6000600554905090565b60145481565b60006121ac6120f6612e49565b846121a78560405180606001604052806025815260200161530d6025913960166000612120612e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135eb9092919063ffffffff16565b612e51565b6001905092915050565b60006121ca6121c3612e49565b848461301a565b506001905092915050565b60125481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6122dc612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612369576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123609061472d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf90614864565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612572612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f69061472d565b60405180910390fd5b8060068190555050565b612611612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461269e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126959061472d565b60405180910390fd5b81601281905550806013819055506013546012546126bc91906148b3565b601481905550606460145414612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe906149eb565b60405180910390fd5b5050565b612713612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127979061472d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612803612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128879061472d565b60405180910390fd5b8060078190555050565b6128a2612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461292f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129269061472d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361299e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299590614a7d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a63612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae79061472d565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b601e5481565b612b6c612e49565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf09061472d565b60405180910390fd5b6000600267ffffffffffffffff811115612c1657612c15614a9d565b5b604051908082528060200260200182016040528015612c445781602001602082028036833780820191505090505b509050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd89190614762565b81600081518110612cec57612ceb614acc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612d3b57612d3a614acc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612dda9493929190614bf4565b6000604051808303818588803b158015612df357600080fd5b505af1158015612e07573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb790614cb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2690614d44565b60405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161300d9190614232565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361308a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308190614dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f090614e68565b60405180910390fd5b601f60009054906101000a900460ff166131835761311561201e565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317990614efa565b60405180910390fd5b5b601c60149054906101000a900460ff16156131aa576131a38484846136f7565b90506135e4565b6131b261201e565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561322057506131f061201e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156132305761322f84836138ca565b5b600061323b30611c0b565b9050600060055482101590508080156132615750601c60149054906101000a900460ff16155b80156132b75750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c6576132c582613967565b5b61334f846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135eb9092919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134355750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61344957613444878787613b1f565b61344b565b845b9050600860009054906101000a900460ff1680156134b35750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e2576007546134d6826134c889611c0b565b61369990919063ffffffff16565b11156134e157600080fd5b5b61353481601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461369990919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135d49190614232565b60405180910390a3600193505050505b9392505050565b6000838311158290613633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362a9190614397565b60405180910390fd5b50600083856136429190614f1a565b9050809150509392505050565b600061369183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135eb565b905092915050565b60008082846136a891906148b3565b9050838110156136ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e490614f9a565b60405180910390fd5b8091505092915050565b6000613782826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135eb9092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381782601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461369990919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138b79190614232565b60405180910390a3600190509392505050565b600654811115806139245750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395a90615006565b60405180910390fd5b5050565b6001601c60146101000a81548160ff02191690831515021790555060006139c060026139b26014546139a460125487613d4690919063ffffffff16565b613dc090919063ffffffff16565b613dc090919063ffffffff16565b905060006139d7828461364f90919063ffffffff16565b90506139e281613e0a565b60004790506000613a13613a026002601254613dc090919063ffffffff16565b60145461364f90919063ffffffff16565b90506000613a516002613a4384613a3560125488613d4690919063ffffffff16565b613dc090919063ffffffff16565b613dc090919063ffffffff16565b90506000613a68828561364f90919063ffffffff16565b90506000811115613aa057613a9f600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614086565b5b600082118015613ab05750600086115b15613afb57613abf86836140d1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613af293929190615026565b60405180910390a15b5050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ba757613ba06064613b92600c5486613d4690919063ffffffff16565b613dc090919063ffffffff16565b9050613c25565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c2457613c216064613c1360105486613d4690919063ffffffff16565b613dc090919063ffffffff16565b90505b5b6000811115613d2957613c8081601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461369990919063ffffffff16565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d209190614232565b60405180910390a35b613d3c818461364f90919063ffffffff16565b9150509392505050565b6000808303613d585760009050613dba565b60008284613d66919061505d565b9050828482613d7591906150ce565b14613db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dac90615171565b60405180910390fd5b809150505b92915050565b6000613e0283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141b6565b905092915050565b6000600267ffffffffffffffff811115613e2757613e26614a9d565b5b604051908082528060200260200182016040528015613e555781602001602082028036833780820191505090505b5090503081600081518110613e6d57613e6c614acc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f389190614762565b81600181518110613f4c57613f4b614acc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613fb330601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e51565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614017959493929190615191565b600060405180830381600087803b15801561403157600080fd5b505af1158015614045573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161407a9291906151eb565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156140cc573d6000803e3d6000fd5b505050565b6140fe30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e51565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061414a61201e565b426040518863ffffffff1660e01b815260040161416c9695949392919061521b565b60606040518083038185885af115801561418a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141af9190615291565b5050505050565b600080831182906141fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141f49190614397565b60405180910390fd5b506000838561420c91906150ce565b9050809150509392505050565b6000819050919050565b61422c81614219565b82525050565b60006020820190506142476000830184614223565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061427d82614252565b9050919050565b61428d81614272565b811461429857600080fd5b50565b6000813590506142aa81614284565b92915050565b6000602082840312156142c6576142c561424d565b5b60006142d48482850161429b565b91505092915050565b6142e681614272565b82525050565b600060208201905061430160008301846142dd565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614341578082015181840152602081019050614326565b60008484015250505050565b6000601f19601f8301169050919050565b600061436982614307565b6143738185614312565b9350614383818560208601614323565b61438c8161434d565b840191505092915050565b600060208201905081810360008301526143b1818461435e565b905092915050565b6143c281614219565b81146143cd57600080fd5b50565b6000813590506143df816143b9565b92915050565b600080604083850312156143fc576143fb61424d565b5b600061440a8582860161429b565b925050602061441b858286016143d0565b9150509250929050565b60008115159050919050565b61443a81614425565b82525050565b60006020820190506144556000830184614431565b92915050565b6000819050919050565b600061448061447b61447684614252565b61445b565b614252565b9050919050565b600061449282614465565b9050919050565b60006144a482614487565b9050919050565b6144b481614499565b82525050565b60006020820190506144cf60008301846144ab565b92915050565b6144de81614425565b81146144e957600080fd5b50565b6000813590506144fb816144d5565b92915050565b600080604083850312156145185761451761424d565b5b60006145268582860161429b565b9250506020614537858286016144ec565b9150509250929050565b60008060006060848603121561455a5761455961424d565b5b60006145688682870161429b565b93505060206145798682870161429b565b925050604061458a868287016143d0565b9150509250925092565b6000602082840312156145aa576145a961424d565b5b60006145b8848285016144ec565b91505092915050565b600060ff82169050919050565b6145d7816145c1565b82525050565b60006020820190506145f260008301846145ce565b92915050565b60006020828403121561460e5761460d61424d565b5b600061461c848285016143d0565b91505092915050565b6000806040838503121561463c5761463b61424d565b5b600061464a858286016143d0565b925050602061465b858286016143d0565b9150509250929050565b600061467082614252565b9050919050565b61468081614665565b82525050565b600060208201905061469b6000830184614677565b92915050565b600080604083850312156146b8576146b761424d565b5b60006146c68582860161429b565b92505060206146d78582860161429b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614717602083614312565b9150614722826146e1565b602082019050919050565b600060208201905081810360008301526147468161470a565b9050919050565b60008151905061475c81614284565b92915050565b6000602082840312156147785761477761424d565b5b60006147868482850161474d565b91505092915050565b60006040820190506147a460008301856142dd565b6147b160208301846142dd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147ff57607f821691505b602082108103614812576148116147b8565b5b50919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b600061484e601783614312565b915061485982614818565b602082019050919050565b6000602082019050818103600083015261487d81614841565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148be82614219565b91506148c983614219565b92508282019050808211156148e1576148e0614884565b5b92915050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614943602883614312565b915061494e826148e7565b604082019050919050565b6000602082019050818103600083015261497281614936565b9050919050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d5602283614312565b91506149e082614979565b604082019050919050565b60006020820190508181036000830152614a04816149c8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a67602683614312565b9150614a7282614a0b565b604082019050919050565b60006020820190508181036000830152614a9681614a5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614b20614b1b614b1684614afb565b61445b565b614219565b9050919050565b614b3081614b05565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b6b81614272565b82525050565b6000614b7d8383614b62565b60208301905092915050565b6000602082019050919050565b6000614ba182614b36565b614bab8185614b41565b9350614bb683614b52565b8060005b83811015614be7578151614bce8882614b71565b9750614bd983614b89565b925050600181019050614bba565b5085935050505092915050565b6000608082019050614c096000830187614b27565b8181036020830152614c1b8186614b96565b9050614c2a60408301856142dd565b614c376060830184614223565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c9c602483614312565b9150614ca782614c40565b604082019050919050565b60006020820190508181036000830152614ccb81614c8f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d2e602283614312565b9150614d3982614cd2565b604082019050919050565b60006020820190508181036000830152614d5d81614d21565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dc0602583614312565b9150614dcb82614d64565b604082019050919050565b60006020820190508181036000830152614def81614db3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e52602383614312565b9150614e5d82614df6565b604082019050919050565b60006020820190508181036000830152614e8181614e45565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000614ee4603f83614312565b9150614eef82614e88565b604082019050919050565b60006020820190508181036000830152614f1381614ed7565b9050919050565b6000614f2582614219565b9150614f3083614219565b9250828203905081811115614f4857614f47614884565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f84601b83614312565b9150614f8f82614f4e565b602082019050919050565b60006020820190508181036000830152614fb381614f77565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614ff0601183614312565b9150614ffb82614fba565b602082019050919050565b6000602082019050818103600083015261501f81614fe3565b9050919050565b600060608201905061503b6000830186614223565b6150486020830185614223565b6150556040830184614223565b949350505050565b600061506882614219565b915061507383614219565b925082820261508181614219565b9150828204841483151761509857615097614884565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150d982614219565b91506150e483614219565b9250826150f4576150f361509f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061515b602183614312565b9150615166826150ff565b604082019050919050565b6000602082019050818103600083015261518a8161514e565b9050919050565b600060a0820190506151a66000830188614223565b6151b36020830187614b27565b81810360408301526151c58186614b96565b90506151d460608301856142dd565b6151e16080830184614223565b9695505050505050565b60006040820190506152006000830185614223565b81810360208301526152128184614b96565b90509392505050565b600060c08201905061523060008301896142dd565b61523d6020830188614223565b61524a6040830187614b27565b6152576060830186614b27565b61526460808301856142dd565b61527160a0830184614223565b979650505050505050565b60008151905061528b816143b9565b92915050565b6000806000606084860312156152aa576152a961424d565b5b60006152b88682870161527c565b93505060206152c98682870161527c565b92505060406152da8682870161527c565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b1db81353afee1c11be97c595afe3f26ee2edd85848c711b726ec141fbda52f64736f6c63430008110033

Deployed Bytecode Sourcemap

31772:18043:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32997:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42484:772;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36773:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38172:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33040:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32955:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33693:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37050:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32865:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33841:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40923:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43738:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40763:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32671:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38686:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33198:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38826:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41904:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36959:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37467:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41274:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33641:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33075:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33444:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39677:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37158:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4781:148;;;;;;;;;;;;;:::i;:::-;;32823:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43310:76;;;;;;;;;;;;;:::i;:::-;;32276:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32345:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32782:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39033:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40019:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4139:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36864:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38011:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33251:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37691:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43563:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33146:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33741:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33501:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32471:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37318:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32899:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41462:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39365:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40314:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39510:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41098:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5084:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39201:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32407:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33881:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49111:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32570:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33952:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32997:36;;;;:::o;42484:772::-;42564:22;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42601:35:::1;42658:16;42601:74;;42722:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42704:53;;;42766:4;42773:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42704:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42687:110;;42878:1;42852:28;;:14;:28;;::::0;42849:201:::1;;42942:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42924:74;;;43007:4;43014:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42924:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42907:131;;42849:201;43076:14;43062:11;;:28;;;;;;;;;;;;;;;;;;43120:16;43102:15;;:34;;;;;;;;;;;;;;;;;;43192:4;43148:19;:41;43176:11;;;;;;;;;;;43148:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;43244:4;43207:12;:34;43228:11;;;;;;;;;;;43207:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;42588:668;42484:772:::0;;;:::o;36773:83::-;36810:13;36843:5;36836:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36773:83;:::o;38172:161::-;38247:4;38264:39;38273:12;:10;:12::i;:::-;38287:7;38296:6;38264:8;:39::i;:::-;38321:4;38314:11;;38172:161;;;;:::o;33040:28::-;;;;:::o;32955:35::-;;;;:::o;33693:41::-;;;;;;;;;;;;;:::o;37050:100::-;37103:7;37130:12;;37123:19;;37050:100;:::o;32865:27::-;;;;:::o;33841:33::-;;;;:::o;40923:135::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41044:6:::1;41014:19;:27;41034:6;41014:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;40923:135:::0;;:::o;43738:313::-;43836:4;43853:36;43863:6;43871:9;43882:6;43853:9;:36::i;:::-;;43900:121;43909:6;43917:12;:10;:12::i;:::-;43931:89;43969:6;43931:89;;;;;;;;;;;;;;;;;:11;:19;43943:6;43931:19;;;;;;;;;;;;;;;:33;43951:12;:10;:12::i;:::-;43931:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;43900:8;:121::i;:::-;44039:4;44032:11;;43738:313;;;;;:::o;40763:113::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40860:8:::1;40841:16;;:27;;;;;;;;;;;;;;;;;;40763:113:::0;:::o;32671:81::-;;;:::o;38686:128::-;38739:7;38766:40;38783:22;38793:11;38783:9;:22::i;:::-;38766:12;;:16;;:40;;;;:::i;:::-;38759:47;;38686:128;:::o;33198:46::-;;;;:::o;38826:87::-;38866:7;38893:12;38886:19;;38826:87;:::o;41904:369::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42016:1:::1;41994:24;;:10;:24;;::::0;41986:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42089:4;42057:17;:29;42075:10;42057:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;42142:5;42104:17;:35;42122:16;;;;;;;;;;;42104:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;42199:16;;;;;;;;;;;42163:53;;42187:10;42163:53;;;;;;;;;;;;42254:10;42227:16;;:38;;;;;;;;;;;;;;;;;;41904:369:::0;:::o;36959:83::-;37000:5;37025:9;;;;;;;;;;;37018:16;;36959:83;:::o;37467:218::-;37555:4;37572:83;37581:12;:10;:12::i;:::-;37595:7;37604:50;37643:10;37604:11;:25;37616:12;:10;:12::i;:::-;37604:25;;;;;;;;;;;;;;;:34;37630:7;37604:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;37572:8;:83::i;:::-;37673:4;37666:11;;37467:218;;;;:::o;41274:124::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41382:8:::1;41356:23;:34;;;;41274:124:::0;:::o;33641:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;33075:35::-;;;;:::o;33444:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;39677:334::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39793:14:::1;39774:16;:33;;;;39836:13;39818:15;:31;;;;39894:15;;39875:16;;:34;;;;:::i;:::-;39860:12;:49;;;;39944:14;;39928:12;;:30;;39920:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;39677:334:::0;;:::o;37158:119::-;37224:7;37251:9;:18;37261:7;37251:18;;;;;;;;;;;;;;;;37244:25;;37158:119;;;:::o;4781:148::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4888:1:::1;4851:40;;4872:6;::::0;::::1;;;;;;;;4851:40;;;;;;;;;;;;4919:1;4902:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4781:148::o:0;32823:35::-;;;;:::o;43310:76::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43374:4:::1;43360:11;;:18;;;;;;;;;;;;;;;;;;43310:76::o:0;32276:56::-;;;;:::o;32345:54::-;;;;:::o;32782:34::-;;;;:::o;39033:129::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39146:8:::1;39122:12;:21;39135:7;39122:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;39033:129:::0;;:::o;40019:249::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40140:14:::1;40120:17;:34;;;;40184:13;40165:16;:32;;;;40244:16;;40224:17;;:36;;;;:::i;:::-;40208:13;:52;;;;40019:249:::0;;:::o;4139:79::-;4177:7;4204:6;;;;;;;;;;;4197:13;;4139:79;:::o;36864:87::-;36903:13;36936:7;36929:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36864:87;:::o;38011:120::-;38073:7;38100:23;;38093:30;;38011:120;:::o;33251:39::-;;;;:::o;37691:269::-;37784:4;37801:129;37810:12;:10;:12::i;:::-;37824:7;37833:96;37872:15;37833:96;;;;;;;;;;;;;;;;;:11;:25;37845:12;:10;:12::i;:::-;37833:25;;;;;;;;;;;;;;;:34;37859:7;37833:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;37801:8;:129::i;:::-;37948:4;37941:11;;37691:269;;;;:::o;43563:167::-;43641:4;43658:42;43668:12;:10;:12::i;:::-;43682:9;43693:6;43658:9;:42::i;:::-;;43718:4;43711:11;;43563:167;;;;:::o;33146:45::-;;;;:::o;33741:26::-;;;;;;;;;;;;;:::o;33501:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;32471:92::-;;;;;;;;;;;;;:::o;37318:143::-;37399:7;37426:11;:18;37438:5;37426:18;;;;;;;;;;;;;;;:27;37445:7;37426:27;;;;;;;;;;;;;;;;37419:34;;37318:143;;;;:::o;32899:34::-;;;;:::o;41462:365::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41573:1:::1;41551:24;;:10;:24;;::::0;41543:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41646:4;41614:17;:29;41632:10;41614:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41698:5;41661:17;:34;41679:15;;;;;;;;;;;41661:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;41754:15;;;;;;;;;;;41719:51;;41742:10;41719:51;;;;;;;;;;;;41808:10;41781:15;;:38;;;;;;;;;;;;;;;;;;41462:365:::0;:::o;39365:111::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39457:11:::1;39442:12;:26;;;;39365:111:::0;:::o;40314:413::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40462:17:::1;40434:25;:45;;;;40519:18;40490:26;:47;;;;40604:26;;40576:25;;:54;;;;:::i;:::-;40549:24;:81;;;;40677:3;40649:24;;:31;40641:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;40314:413:::0;;:::o;39510:135::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39629:8:::1;39600:17;:26;39618:7;39600:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;39510:135:::0;;:::o;41098:102::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41184:8:::1;41170:10;:22;;;;41098:102:::0;:::o;5084:244::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5193:1:::1;5173:22;;:8;:22;;::::0;5165:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5283:8;5254:38;;5275:6;::::0;::::1;;;;;;;;5254:38;;;;;;;;;;;;5312:8;5303:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5084:244:::0;:::o;39201:127::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39314:6:::1;39288:15;:23;39304:6;39288:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;39201:127:::0;;:::o;32407:35::-;;;;;;;;;;;;;:::o;33881:34::-;;;;:::o;49111:527::-;4361:12;:10;:12::i;:::-;4351:22;;:6;;;;;;;;;;:22;;;4343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49246:21:::1;49284:1;49270:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49246:40;;49307:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49297:4;49302:1;49297:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;49358:4;49340;49345:1;49340:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;49402:15;;;;;;;;;;;:66;;;49476:14;49506:1;49555:4;49582:6;49604:15;49402:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;49177:461;49111:527:::0;:::o;32570:94::-;;;;;;;;;;;;;:::o;33952:31::-;;;;;;;;;;;;;:::o;696:98::-;749:7;776:10;769:17;;696:98;:::o;38339:335::-;38449:1;38432:19;;:5;:19;;;38424:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38530:1;38511:21;;:7;:21;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38612:6;38582:11;:18;38594:5;38582:18;;;;;;;;;;;;;;;:27;38601:7;38582:27;;;;;;;;;;;;;;;:36;;;;38650:7;38634:32;;38643:5;38634:32;;;38659:6;38634:32;;;;;;:::i;:::-;;;;;;;;38339:335;;;:::o;44062:1870::-;44149:4;44192:1;44174:20;;:6;:20;;;44166:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44276:1;44255:23;;:9;:23;;;44247:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44367:11;;;;;;;;;;;44362:138;;44413:7;:5;:7::i;:::-;44403:17;;:6;:17;;;44395:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;44362:138;44515:16;;;;;;;;;;;44512:1413;;;44565:41;44580:6;44588:9;44599:6;44565:14;:41::i;:::-;44558:48;;;;44512:1413;44728:7;:5;:7::i;:::-;44718:17;;:6;:17;;;;:41;;;;;44752:7;:5;:7::i;:::-;44739:20;;:9;:20;;;;44718:41;44714:111;;;44780:28;44794:6;44801;44780:13;:28::i;:::-;44714:111;44889:28;44920:24;44938:4;44920:9;:24::i;:::-;44889:55;;44959:28;45014:23;;44990:20;:47;;44959:78;;45056:23;:44;;;;;45084:16;;;;;;;;;;;45083:17;45056:44;:69;;;;;45105:12;:20;45118:6;45105:20;;;;;;;;;;;;;;;;;;;;;;;;;45104:21;45056:69;45052:164;;;45160:36;45175:20;45160:14;:36::i;:::-;45052:164;45290:53;45312:6;45290:53;;;;;;;;;;;;;;;;;:9;:17;45300:6;45290:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;45270:9;:17;45280:6;45270:17;;;;;;;;;;;;;;;:73;;;;45358:19;45381:17;:25;45399:6;45381:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;45410:17;:28;45428:9;45410:28;;;;;;;;;;;;;;;;;;;;;;;;;45381:57;45380:148;;45494:34;45502:6;45510:9;45521:6;45494:7;:34::i;:::-;45380:148;;;45485:6;45380:148;45358:170;;45591:16;;;;;;;;;;;:51;;;;;45612:19;:30;45632:9;45612:30;;;;;;;;;;;;;;;;;;;;;;;;;45611:31;45591:51;45588:133;;;45710:10;;45669:37;45694:11;45669:20;45679:9;45669;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;45661:60;;;;;;45588:133;45790:37;45815:11;45790:9;:20;45800:9;45790:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;45767:9;:20;45777:9;45767:20;;;;;;;;;;;;;;;:60;;;;45864:9;45847:40;;45856:6;45847:40;;;45875:11;45847:40;;;;;;:::i;:::-;;;;;;;;45909:4;45902:11;;;;;44062:1870;;;;;;:::o;9885:192::-;9971:7;10004:1;9999;:6;;10007:12;9991:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10031:9;10047:1;10043;:5;;;;:::i;:::-;10031:17;;10068:1;10061:8;;;9885:192;;;;;:::o;9446:136::-;9504:7;9531:43;9535:1;9538;9531:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9524:50;;9446:136;;;;:::o;8982:181::-;9040:7;9060:9;9076:1;9072;:5;;;;:::i;:::-;9060:17;;9101:1;9096;:6;;9088:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9154:1;9147:8;;;8982:181;;;;:::o;45966:330::-;46059:4;46096:53;46118:6;46096:53;;;;;;;;;;;;;;;;;:9;:17;46106:6;46096:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;46076:9;:17;46086:6;46076:17;;;;;;;;;;;;;;;:73;;;;46183:32;46208:6;46183:9;:20;46193:9;46183:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;46160:9;:20;46170:9;46160:20;;;;;;;;;;;;;;;:55;;;;46248:9;46231:35;;46240:6;46231:35;;;46259:6;46231:35;;;;;;:::i;:::-;;;;;;;;46284:4;46277:11;;45966:330;;;;;:::o;49646:166::-;49743:12;;49733:6;:22;;:49;;;;49759:15;:23;49775:6;49759:23;;;;;;;;;;;;;;;;;;;;;;;;;49733:49;49725:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;49646:166;;:::o;46957:1095::-;34501:4;34482:16;;:23;;;;;;;;;;;;;;;;;;47087:19:::1;47109:78;47185:1;47109:71;47155:24;;47109:41;47124:25;;47109:10;:14;;:41;;;;:::i;:::-;:45;;:71;;;;:::i;:::-;:75;;:78;;;;:::i;:::-;47087:100;;47198:21;47222:27;47237:11;47222:10;:14;;:27;;;;:::i;:::-;47198:51;;47289:31;47306:13;47289:16;:31::i;:::-;47361:22;47386:21;47361:46;;47462:16;47481:62;47510:32;47540:1;47510:25;;:29;;:32;;;;:::i;:::-;47481:24;;:28;;:62;;;;:::i;:::-;47462:81;;47554:23;47580:66;47644:1;47580:59;47630:8;47580:45;47599:25;;47580:14;:18;;:45;;;;:::i;:::-;:49;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;47554:92;;47673:24;47700:35;47719:15;47700:14;:18;;:35;;;;:::i;:::-;47673:62;;47770:1;47751:16;:20;47748:94;;;47786:56;47807:16;;;;;;;;;;;47825;47786:20;:56::i;:::-;47748:94;47876:1;47858:15;:19;:38;;;;;47895:1;47881:11;:15;47858:38;47855:190;;;47912:42;47925:11;47938:15;47912:12;:42::i;:::-;47974:59;47989:13;48004:15;48021:11;47974:59;;;;;;;;:::i;:::-;;;;;;;;47855:190;47021:1031;;;;;;34547:5:::0;34528:16;;:24;;;;;;;;;;;;;;;;;;46957:1095;:::o;46332:580::-;46418:7;46438:17;46458:1;46438:21;;46473:12;:20;46486:6;46473:20;;;;;;;;;;;;;;;;;;;;;;;;;46470:213;;;46522:33;46551:3;46522:24;46533:12;;46522:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46510:45;;46470:213;;;46585:12;:23;46598:9;46585:23;;;;;;;;;;;;;;;;;;;;;;;;;46582:101;;;46637:34;46667:3;46637:25;46648:13;;46637:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46625:46;;46582:101;46470:213;46708:1;46696:9;:13;46693:173;;;46753:39;46782:9;46753;:24;46771:4;46753:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;46726:9;:24;46744:4;46726:24;;;;;;;;;;;;;;;:66;;;;46837:4;46812:42;;46821:6;46812:42;;;46844:9;46812:42;;;;;;:::i;:::-;;;;;;;;46693:173;46883:21;46894:9;46883:6;:10;;:21;;;;:::i;:::-;46876:28;;;46332:580;;;;;:::o;10336:471::-;10394:7;10644:1;10639;:6;10635:47;;10669:1;10662:8;;;;10635:47;10694:9;10710:1;10706;:5;;;;:::i;:::-;10694:17;;10739:1;10734;10730;:5;;;;:::i;:::-;:10;10722:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10798:1;10791:8;;;10336:471;;;;;:::o;11283:132::-;11341:7;11368:39;11372:1;11375;11368:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11361:46;;11283:132;;;;:::o;48087:524::-;48153:21;48191:1;48177:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48153:40;;48222:4;48204;48209:1;48204:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48248:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48238:4;48243:1;48238:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48281:62;48298:4;48313:15;;;;;;;;;;;48331:11;48281:8;:62::i;:::-;48354:15;;;;;;;;;;;:66;;;48435:11;48461:1;48478:4;48505;48526:15;48354:198;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48568:35;48585:11;48598:4;48568:35;;;;;;;:::i;:::-;;;;;;;;48142:469;48087:524;:::o;42320:126::-;42412:9;:18;;:26;42431:6;42412:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42320:126;;:::o;48642:362::-;48723:62;48740:4;48755:15;;;;;;;;;;;48773:11;48723:8;:62::i;:::-;48796:15;;;;;;;;;;;:31;;;48835:9;48868:4;48888:11;48914:1;48931;48948:7;:5;:7::i;:::-;48970:15;48796:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48642:362;;:::o;11911:278::-;11997:7;12029:1;12025;:5;12032:12;12017:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12056:9;12072:1;12068;:5;;;;:::i;:::-;12056:17;;12180:1;12173:8;;;11911: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;523:117::-;632:1;629;622: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:619::-;6275:6;6283;6291;6340:2;6328:9;6319:7;6315:23;6311:32;6308:119;;;6346:79;;:::i;:::-;6308:119;6466:1;6491:53;6536:7;6527:6;6516:9;6512:22;6491:53;:::i;:::-;6481:63;;6437:117;6593:2;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6564:118;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6198:619;;;;;:::o;6823:323::-;6879:6;6928:2;6916:9;6907:7;6903:23;6899:32;6896:119;;;6934:79;;:::i;:::-;6896:119;7054:1;7079:50;7121:7;7112:6;7101:9;7097:22;7079:50;:::i;:::-;7069:60;;7025:114;6823:323;;;;:::o;7152:86::-;7187:7;7227:4;7220:5;7216:16;7205:27;;7152:86;;;:::o;7244:112::-;7327:22;7343:5;7327:22;:::i;:::-;7322:3;7315:35;7244:112;;:::o;7362:214::-;7451:4;7489:2;7478:9;7474:18;7466:26;;7502:67;7566:1;7555:9;7551:17;7542:6;7502:67;:::i;:::-;7362:214;;;;:::o;7582:329::-;7641:6;7690:2;7678:9;7669:7;7665:23;7661:32;7658:119;;;7696:79;;:::i;:::-;7658:119;7816:1;7841:53;7886:7;7877:6;7866:9;7862:22;7841:53;:::i;:::-;7831:63;;7787:117;7582:329;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:104::-;8442:7;8471:24;8489:5;8471:24;:::i;:::-;8460:35;;8397:104;;;:::o;8507:142::-;8610:32;8636:5;8610:32;:::i;:::-;8605:3;8598:45;8507:142;;:::o;8655:254::-;8764:4;8802:2;8791:9;8787:18;8779:26;;8815:87;8899:1;8888:9;8884:17;8875:6;8815:87;:::i;:::-;8655:254;;;;:::o;8915:474::-;8983:6;8991;9040:2;9028:9;9019:7;9015:23;9011:32;9008:119;;;9046:79;;:::i;:::-;9008:119;9166:1;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9137:117;9293:2;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9264:118;8915:474;;;;;:::o;9395:182::-;9535:34;9531:1;9523:6;9519:14;9512:58;9395:182;:::o;9583:366::-;9725:3;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9583:366;;;:::o;9955:419::-;10121:4;10159:2;10148:9;10144:18;10136:26;;10208:9;10202:4;10198:20;10194:1;10183:9;10179:17;10172:47;10236:131;10362:4;10236:131;:::i;:::-;10228:139;;9955:419;;;:::o;10380:143::-;10437:5;10468:6;10462:13;10453:22;;10484:33;10511:5;10484:33;:::i;:::-;10380:143;;;;:::o;10529:351::-;10599:6;10648:2;10636:9;10627:7;10623:23;10619:32;10616:119;;;10654:79;;:::i;:::-;10616:119;10774:1;10799:64;10855:7;10846:6;10835:9;10831:22;10799:64;:::i;:::-;10789:74;;10745:128;10529:351;;;;:::o;10886:332::-;11007:4;11045:2;11034:9;11030:18;11022:26;;11058:71;11126:1;11115:9;11111:17;11102:6;11058:71;:::i;:::-;11139:72;11207:2;11196:9;11192:18;11183:6;11139:72;:::i;:::-;10886:332;;;;;:::o;11224:180::-;11272:77;11269:1;11262:88;11369:4;11366:1;11359:15;11393:4;11390:1;11383:15;11410:320;11454:6;11491:1;11485:4;11481:12;11471:22;;11538:1;11532:4;11528:12;11559:18;11549:81;;11615:4;11607:6;11603:17;11593:27;;11549:81;11677:2;11669:6;11666:14;11646:18;11643:38;11640:84;;11696:18;;:::i;:::-;11640:84;11461:269;11410:320;;;:::o;11736:173::-;11876:25;11872:1;11864:6;11860:14;11853:49;11736:173;:::o;11915:366::-;12057:3;12078:67;12142:2;12137:3;12078:67;:::i;:::-;12071:74;;12154:93;12243:3;12154:93;:::i;:::-;12272:2;12267:3;12263:12;12256:19;;11915:366;;;:::o;12287:419::-;12453:4;12491:2;12480:9;12476:18;12468:26;;12540:9;12534:4;12530:20;12526:1;12515:9;12511:17;12504:47;12568:131;12694:4;12568:131;:::i;:::-;12560:139;;12287:419;;;:::o;12712:180::-;12760:77;12757:1;12750:88;12857:4;12854:1;12847:15;12881:4;12878:1;12871:15;12898:191;12938:3;12957:20;12975:1;12957:20;:::i;:::-;12952:25;;12991:20;13009:1;12991:20;:::i;:::-;12986:25;;13034:1;13031;13027:9;13020:16;;13055:3;13052:1;13049:10;13046:36;;;13062:18;;:::i;:::-;13046:36;12898:191;;;;:::o;13095:227::-;13235:34;13231:1;13223:6;13219:14;13212:58;13304:10;13299:2;13291:6;13287:15;13280:35;13095:227;:::o;13328:366::-;13470:3;13491:67;13555:2;13550:3;13491:67;:::i;:::-;13484:74;;13567:93;13656:3;13567:93;:::i;:::-;13685:2;13680:3;13676:12;13669:19;;13328:366;;;:::o;13700:419::-;13866:4;13904:2;13893:9;13889:18;13881:26;;13953:9;13947:4;13943:20;13939:1;13928:9;13924:17;13917:47;13981:131;14107:4;13981:131;:::i;:::-;13973:139;;13700:419;;;:::o;14125:221::-;14265:34;14261:1;14253:6;14249:14;14242:58;14334:4;14329:2;14321:6;14317:15;14310:29;14125:221;:::o;14352:366::-;14494:3;14515:67;14579:2;14574:3;14515:67;:::i;:::-;14508:74;;14591:93;14680:3;14591:93;:::i;:::-;14709:2;14704:3;14700:12;14693:19;;14352:366;;;:::o;14724:419::-;14890:4;14928:2;14917:9;14913:18;14905:26;;14977:9;14971:4;14967:20;14963:1;14952:9;14948:17;14941:47;15005:131;15131:4;15005:131;:::i;:::-;14997:139;;14724:419;;;:::o;15149:225::-;15289:34;15285:1;15277:6;15273:14;15266:58;15358:8;15353:2;15345:6;15341:15;15334:33;15149:225;:::o;15380:366::-;15522:3;15543:67;15607:2;15602:3;15543:67;:::i;:::-;15536:74;;15619:93;15708:3;15619:93;:::i;:::-;15737:2;15732:3;15728:12;15721:19;;15380:366;;;:::o;15752:419::-;15918:4;15956:2;15945:9;15941:18;15933:26;;16005:9;15999:4;15995:20;15991:1;15980:9;15976:17;15969:47;16033:131;16159:4;16033:131;:::i;:::-;16025:139;;15752:419;;;:::o;16177:180::-;16225:77;16222:1;16215:88;16322:4;16319:1;16312:15;16346:4;16343:1;16336:15;16363:180;16411:77;16408:1;16401:88;16508:4;16505:1;16498:15;16532:4;16529:1;16522:15;16549:85;16594:7;16623:5;16612:16;;16549:85;;;:::o;16640:158::-;16698:9;16731:61;16749:42;16758:32;16784:5;16758:32;:::i;:::-;16749:42;:::i;:::-;16731:61;:::i;:::-;16718:74;;16640:158;;;:::o;16804:147::-;16899:45;16938:5;16899:45;:::i;:::-;16894:3;16887:58;16804:147;;:::o;16957:114::-;17024:6;17058:5;17052:12;17042:22;;16957:114;;;:::o;17077:184::-;17176:11;17210:6;17205:3;17198:19;17250:4;17245:3;17241:14;17226:29;;17077:184;;;;:::o;17267:132::-;17334:4;17357:3;17349:11;;17387:4;17382:3;17378:14;17370:22;;17267:132;;;:::o;17405:108::-;17482:24;17500:5;17482:24;:::i;:::-;17477:3;17470:37;17405:108;;:::o;17519:179::-;17588:10;17609:46;17651:3;17643:6;17609:46;:::i;:::-;17687:4;17682:3;17678:14;17664:28;;17519:179;;;;:::o;17704:113::-;17774:4;17806;17801:3;17797:14;17789:22;;17704:113;;;:::o;17853:732::-;17972:3;18001:54;18049:5;18001:54;:::i;:::-;18071:86;18150:6;18145:3;18071:86;:::i;:::-;18064:93;;18181:56;18231:5;18181:56;:::i;:::-;18260:7;18291:1;18276:284;18301:6;18298:1;18295:13;18276:284;;;18377:6;18371:13;18404:63;18463:3;18448:13;18404:63;:::i;:::-;18397:70;;18490:60;18543:6;18490:60;:::i;:::-;18480:70;;18336:224;18323:1;18320;18316:9;18311:14;;18276:284;;;18280:14;18576:3;18569:10;;17977:608;;;17853:732;;;;:::o;18591:720::-;18826:4;18864:3;18853:9;18849:19;18841:27;;18878:79;18954:1;18943:9;18939:17;18930:6;18878:79;:::i;:::-;19004:9;18998:4;18994:20;18989:2;18978:9;18974:18;18967:48;19032:108;19135:4;19126:6;19032:108;:::i;:::-;19024:116;;19150:72;19218:2;19207:9;19203:18;19194:6;19150:72;:::i;:::-;19232;19300:2;19289:9;19285:18;19276:6;19232:72;:::i;:::-;18591:720;;;;;;;:::o;19317:223::-;19457:34;19453:1;19445:6;19441:14;19434:58;19526:6;19521:2;19513:6;19509:15;19502:31;19317:223;:::o;19546:366::-;19688:3;19709:67;19773:2;19768:3;19709:67;:::i;:::-;19702:74;;19785:93;19874:3;19785:93;:::i;:::-;19903:2;19898:3;19894:12;19887:19;;19546:366;;;:::o;19918:419::-;20084:4;20122:2;20111:9;20107:18;20099:26;;20171:9;20165:4;20161:20;20157:1;20146:9;20142:17;20135:47;20199:131;20325:4;20199:131;:::i;:::-;20191:139;;19918:419;;;:::o;20343:221::-;20483:34;20479:1;20471:6;20467:14;20460:58;20552:4;20547:2;20539:6;20535:15;20528:29;20343:221;:::o;20570:366::-;20712:3;20733:67;20797:2;20792:3;20733:67;:::i;:::-;20726:74;;20809:93;20898:3;20809:93;:::i;:::-;20927:2;20922:3;20918:12;20911:19;;20570:366;;;:::o;20942:419::-;21108:4;21146:2;21135:9;21131:18;21123:26;;21195:9;21189:4;21185:20;21181:1;21170:9;21166:17;21159:47;21223:131;21349:4;21223:131;:::i;:::-;21215:139;;20942:419;;;:::o;21367:224::-;21507:34;21503:1;21495:6;21491:14;21484:58;21576:7;21571:2;21563:6;21559:15;21552:32;21367:224;:::o;21597:366::-;21739:3;21760:67;21824:2;21819:3;21760:67;:::i;:::-;21753:74;;21836:93;21925:3;21836:93;:::i;:::-;21954:2;21949:3;21945:12;21938:19;;21597:366;;;:::o;21969:419::-;22135:4;22173:2;22162:9;22158:18;22150:26;;22222:9;22216:4;22212:20;22208:1;22197:9;22193:17;22186:47;22250:131;22376:4;22250:131;:::i;:::-;22242:139;;21969:419;;;:::o;22394:222::-;22534:34;22530:1;22522:6;22518:14;22511:58;22603:5;22598:2;22590:6;22586:15;22579:30;22394:222;:::o;22622:366::-;22764:3;22785:67;22849:2;22844:3;22785:67;:::i;:::-;22778:74;;22861:93;22950:3;22861:93;:::i;:::-;22979:2;22974:3;22970:12;22963:19;;22622:366;;;:::o;22994:419::-;23160:4;23198:2;23187:9;23183:18;23175:26;;23247:9;23241:4;23237:20;23233:1;23222:9;23218:17;23211:47;23275:131;23401:4;23275:131;:::i;:::-;23267:139;;22994:419;;;:::o;23419:250::-;23559:34;23555:1;23547:6;23543:14;23536:58;23628:33;23623:2;23615:6;23611:15;23604:58;23419:250;:::o;23675:366::-;23817:3;23838:67;23902:2;23897:3;23838:67;:::i;:::-;23831:74;;23914:93;24003:3;23914:93;:::i;:::-;24032:2;24027:3;24023:12;24016:19;;23675:366;;;:::o;24047:419::-;24213:4;24251:2;24240:9;24236:18;24228:26;;24300:9;24294:4;24290:20;24286:1;24275:9;24271:17;24264:47;24328:131;24454:4;24328:131;:::i;:::-;24320:139;;24047:419;;;:::o;24472:194::-;24512:4;24532:20;24550:1;24532:20;:::i;:::-;24527:25;;24566:20;24584:1;24566:20;:::i;:::-;24561:25;;24610:1;24607;24603:9;24595:17;;24634:1;24628:4;24625:11;24622:37;;;24639:18;;:::i;:::-;24622:37;24472:194;;;;:::o;24672:177::-;24812:29;24808:1;24800:6;24796:14;24789:53;24672:177;:::o;24855:366::-;24997:3;25018:67;25082:2;25077:3;25018:67;:::i;:::-;25011:74;;25094:93;25183:3;25094:93;:::i;:::-;25212:2;25207:3;25203:12;25196:19;;24855:366;;;:::o;25227:419::-;25393:4;25431:2;25420:9;25416:18;25408:26;;25480:9;25474:4;25470:20;25466:1;25455:9;25451:17;25444:47;25508:131;25634:4;25508:131;:::i;:::-;25500:139;;25227:419;;;:::o;25652:167::-;25792:19;25788:1;25780:6;25776:14;25769:43;25652:167;:::o;25825:366::-;25967:3;25988:67;26052:2;26047:3;25988:67;:::i;:::-;25981:74;;26064:93;26153:3;26064:93;:::i;:::-;26182:2;26177:3;26173:12;26166:19;;25825:366;;;:::o;26197:419::-;26363:4;26401:2;26390:9;26386:18;26378:26;;26450:9;26444:4;26440:20;26436:1;26425:9;26421:17;26414:47;26478:131;26604:4;26478:131;:::i;:::-;26470:139;;26197:419;;;:::o;26622:442::-;26771:4;26809:2;26798:9;26794:18;26786:26;;26822:71;26890:1;26879:9;26875:17;26866:6;26822:71;:::i;:::-;26903:72;26971:2;26960:9;26956:18;26947:6;26903:72;:::i;:::-;26985;27053:2;27042:9;27038:18;27029:6;26985:72;:::i;:::-;26622:442;;;;;;:::o;27070:410::-;27110:7;27133:20;27151:1;27133:20;:::i;:::-;27128:25;;27167:20;27185:1;27167:20;:::i;:::-;27162:25;;27222:1;27219;27215:9;27244:30;27262:11;27244:30;:::i;:::-;27233:41;;27423:1;27414:7;27410:15;27407:1;27404:22;27384:1;27377:9;27357:83;27334:139;;27453:18;;:::i;:::-;27334:139;27118:362;27070:410;;;;:::o;27486:180::-;27534:77;27531:1;27524:88;27631:4;27628:1;27621:15;27655:4;27652:1;27645:15;27672:185;27712:1;27729:20;27747:1;27729:20;:::i;:::-;27724:25;;27763:20;27781:1;27763:20;:::i;:::-;27758:25;;27802:1;27792:35;;27807:18;;:::i;:::-;27792:35;27849:1;27846;27842:9;27837:14;;27672:185;;;;:::o;27863:220::-;28003:34;27999:1;27991:6;27987:14;27980:58;28072:3;28067:2;28059:6;28055:15;28048:28;27863:220;:::o;28089:366::-;28231:3;28252:67;28316:2;28311:3;28252:67;:::i;:::-;28245:74;;28328:93;28417:3;28328:93;:::i;:::-;28446:2;28441:3;28437:12;28430:19;;28089:366;;;:::o;28461:419::-;28627:4;28665:2;28654:9;28650:18;28642:26;;28714:9;28708:4;28704:20;28700:1;28689:9;28685:17;28678:47;28742:131;28868:4;28742:131;:::i;:::-;28734:139;;28461:419;;;:::o;28886:831::-;29149:4;29187:3;29176:9;29172:19;29164:27;;29201:71;29269:1;29258:9;29254:17;29245:6;29201:71;:::i;:::-;29282:80;29358:2;29347:9;29343:18;29334:6;29282:80;:::i;:::-;29409:9;29403:4;29399:20;29394:2;29383:9;29379:18;29372:48;29437:108;29540:4;29531:6;29437:108;:::i;:::-;29429:116;;29555:72;29623:2;29612:9;29608:18;29599:6;29555:72;:::i;:::-;29637:73;29705:3;29694:9;29690:19;29681:6;29637:73;:::i;:::-;28886:831;;;;;;;;:::o;29723:483::-;29894:4;29932:2;29921:9;29917:18;29909:26;;29945:71;30013:1;30002:9;29998:17;29989:6;29945:71;:::i;:::-;30063:9;30057:4;30053:20;30048:2;30037:9;30033:18;30026:48;30091:108;30194:4;30185:6;30091:108;:::i;:::-;30083:116;;29723:483;;;;;:::o;30212:807::-;30461:4;30499:3;30488:9;30484:19;30476:27;;30513:71;30581:1;30570:9;30566:17;30557:6;30513:71;:::i;:::-;30594:72;30662:2;30651:9;30647:18;30638:6;30594:72;:::i;:::-;30676:80;30752:2;30741:9;30737:18;30728:6;30676:80;:::i;:::-;30766;30842:2;30831:9;30827:18;30818:6;30766:80;:::i;:::-;30856:73;30924:3;30913:9;30909:19;30900:6;30856:73;:::i;:::-;30939;31007:3;30996:9;30992:19;30983:6;30939:73;:::i;:::-;30212:807;;;;;;;;;:::o;31025:143::-;31082:5;31113:6;31107:13;31098:22;;31129:33;31156:5;31129:33;:::i;:::-;31025:143;;;;:::o;31174:663::-;31262:6;31270;31278;31327:2;31315:9;31306:7;31302:23;31298:32;31295:119;;;31333:79;;:::i;:::-;31295:119;31453:1;31478:64;31534:7;31525:6;31514:9;31510:22;31478:64;:::i;:::-;31468:74;;31424:128;31591:2;31617:64;31673:7;31664:6;31653:9;31649:22;31617:64;:::i;:::-;31607:74;;31562:129;31730:2;31756:64;31812:7;31803:6;31792:9;31788:22;31756:64;:::i;:::-;31746:74;;31701:129;31174:663;;;;;:::o

Swarm Source

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