ETH Price: $2,230.79 (-1.94%)
 

Overview

Max Total Supply

100,000,000,000 SAFEPEPE

Holders

4

Transfers

-
0

Market

Onchain Market Cap

-

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

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-10-15
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

    struct FeeRatios {
        uint256 marketingPortion;
        uint256 developmentPortion;
    }

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    FeeRatios public feeRatios = FeeRatios(40, 60); // 40/60% wallet tax split
    mapping(address => bool) public bots;
    mapping(address => uint256) public _buyMap;
    address payable private _developmentAddress = payable(0x7402Df4906cd5429974bA19Cca848e1845a04a31);
    address payable private _marketingAddress = payable(0x1185f7638129De06B028B9F441e969Bd16E7D297);

    uint256 public swapTokensAtAmount;
    uint256 public buyTaxRate;
    uint256 public sellTaxRate;

    uint256 public buyTaxBlocks = 5; // Blocks with the higher buy tax rate
    uint256 public sellTaxBlocks = 30; // Blocks with the higher sell tax rate

    bool public tradingActive = false;
    bool public swapEnabled = false;

    // block number of opened trading
    uint256 launchedAt;
    uint256 launchedTime = 0;

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

    // store addresses that are automatic market maker pairs
    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event FeeRatiosChanged(uint256 indexed developmentPortion, uint256 indexed marketingPortion);
    event TaxDeducted(address indexed from, address indexed to, uint256 amount);

    constructor() ERC20("SAFEPEPE", "SAFEPEPE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 totalSupply = 100000000000 * 1e18;

        swapTokensAtAmount = totalSupply * 1 / 1000; // 1% swap wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
        buyTaxRate = 25; // Initial buy tax rate
        sellTaxRate = 30; // Initial sell tax rate
    }

    receive() external payable {}

    function maxWallet() public view returns (uint256) {
        uint256 _initialMaxWallet = 50000000 * 1e18;
        uint256 _timeRound = (block.timestamp - launchedTime) / 12 seconds;
        uint256 _maxWallet = _initialMaxWallet;

        if (_timeRound <= 100) {
            if (totalSupply() / (20**_timeRound) > 0) {
                _maxWallet = _initialMaxWallet * 20**_timeRound;

                if (_maxWallet >= totalSupply()) {
                    _maxWallet = totalSupply();
                }
            } else {
                _maxWallet = totalSupply();
            }
        } else {
            _maxWallet = totalSupply();
        }

        return _maxWallet;
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading is active");
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function setFeeRatios(uint256 _marketingPortion, uint256 _developmentPortion) external onlyOwner {
        require(_marketingPortion + _developmentPortion == 100, "Token: ratio must add to 100%");
        feeRatios.marketingPortion = _marketingPortion;
        feeRatios.developmentPortion = _developmentPortion;

        emit FeeRatiosChanged(_marketingPortion, _developmentPortion);
    }

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

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

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

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

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

    function updateTaxRates() internal {
        uint256 currentBlock = block.number;

        if (currentBlock <= buyTaxBlocks) {
            buyTaxRate = 25;
        } else if (currentBlock <= sellTaxBlocks) {
            buyTaxRate = 15;
            sellTaxRate = 20;
        } else {
            buyTaxRate = 10;
            sellTaxRate = 15;
        }

        if (currentBlock >= 30) {
            buyTaxRate = 4;
            sellTaxRate = 4;
        }
    }
    function sellMarketingFee() public returns (uint256) {
    // Implement the logic to calculate the sell marketing fee here
    // Ensure that the function may modify the state, e.g., update variables
    uint256 fee = 4;
    // Perform other state-changing operations as needed
    return fee;
}
    function buyMarketingFee() public returns (uint256) {
    // Implement the logic to calculate the buy marketing fee here
    // Ensure that the function may modify the state, e.g., update variables
    uint256 fee = 4;
    // Perform other state-changing operations as needed
    return fee;
}



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

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

        updateTaxRates();
        uint256 taxRate = msg.sender == owner() ? sellTaxRate : buyTaxRate;
        uint256 tax = (amount * taxRate) / 100;
        uint256 netValue = amount - tax;

        super._transfer(from, owner(), tax); // Send tax to the owner
        super._transfer(from, to, netValue); // Send the net amount to the recipient

        emit TaxDeducted(from, to, tax);

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        uint256 _sellMarketingFee = sellMarketingFee();
        uint256 _buyMarketingFee = buyMarketingFee();


        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && _sellMarketingFee > 0) {
                fees = amount.mul(_sellMarketingFee).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && _buyMarketingFee > 0) {
                fees = amount.mul(_buyMarketingFee).div(100);
            }

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

            amount -= fees;
        }

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

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

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

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

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

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

        if (contractBalance == 0) {
            return;
        }

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

        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"developmentPortion","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"marketingPortion","type":"uint256"}],"name":"FeeRatiosChanged","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TaxDeducted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRatios","outputs":[{"internalType":"uint256","name":"marketingPortion","type":"uint256"},{"internalType":"uint256","name":"developmentPortion","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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingPortion","type":"uint256"},{"internalType":"uint256","name":"_developmentPortion","type":"uint256"}],"name":"setFeeRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052604051806040016040528060288152602001603c815250600660008201518160000155602082015181600101555050737402df4906cd5429974ba19cca848e1845a04a31600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731185f7638129de06b028b9f441e969bd16e7d297600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005600f55601e6010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff02191690831515021790555060006013553480156200012f57600080fd5b506040518060400160405280600881526020017f53414645504550450000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f53414645504550450000000000000000000000000000000000000000000000008152508160039080519060200190620001b492919062000afb565b508060049080519060200190620001cd92919062000afb565b5050506000620001e2620005c760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002ad816001620005cf60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032857600080fd5b505afa1580156200033d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000363919062000c15565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c657600080fd5b505afa158015620003db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000401919062000c15565b6040518363ffffffff1660e01b81526004016200042092919062000c58565b602060405180830381600087803b1580156200043b57600080fd5b505af115801562000450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000476919062000c15565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004be60a0516001620005cf60201b60201c565b620004d360a0516001620006cc60201b60201c565b60006c01431e0fae6d7217caa000000090506103e8600182620004f7919062000cbe565b62000503919062000d4e565b600c819055506200052b6200051d6200076d60201b60201c565b60016200079760201b60201c565b6200053e3060016200079760201b60201c565b6200055361dead60016200079760201b60201c565b62000575620005676200076d60201b60201c565b6001620005cf60201b60201c565b62000588306001620005cf60201b60201c565b6200059d61dead6001620005cf60201b60201c565b620005af3382620008e460201b60201c565b6019600d81905550601e600e81905550505062001017565b600033905090565b620005df620005c760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006689062000de7565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007a7620005c760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000839576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008309062000de7565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008d8919062000e26565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200094e9062000e93565b60405180910390fd5b6200096b6000838362000a9360201b60201c565b620009878160025462000a9860201b620018f11790919060201c565b600281905550620009e5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a9860201b620018f11790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a87919062000ec6565b60405180910390a35050565b505050565b600080828462000aa9919062000ee3565b90508381101562000af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae89062000f90565b60405180910390fd5b8091505092915050565b82805462000b099062000fe1565b90600052602060002090601f01602090048101928262000b2d576000855562000b79565b82601f1062000b4857805160ff191683800117855562000b79565b8280016001018555821562000b79579182015b8281111562000b7857825182559160200191906001019062000b5b565b5b50905062000b88919062000b8c565b5090565b5b8082111562000ba757600081600090555060010162000b8d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bdd8262000bb0565b9050919050565b62000bef8162000bd0565b811462000bfb57600080fd5b50565b60008151905062000c0f8162000be4565b92915050565b60006020828403121562000c2e5762000c2d62000bab565b5b600062000c3e8482850162000bfe565b91505092915050565b62000c528162000bd0565b82525050565b600060408201905062000c6f600083018562000c47565b62000c7e602083018462000c47565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ccb8262000c85565b915062000cd88362000c85565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d145762000d1362000c8f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d5b8262000c85565b915062000d688362000c85565b92508262000d7b5762000d7a62000d1f565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dcf60208362000d86565b915062000ddc8262000d97565b602082019050919050565b6000602082019050818103600083015262000e028162000dc0565b9050919050565b60008115159050919050565b62000e208162000e09565b82525050565b600060208201905062000e3d600083018462000e15565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e7b601f8362000d86565b915062000e888262000e43565b602082019050919050565b6000602082019050818103600083015262000eae8162000e6c565b9050919050565b62000ec08162000c85565b82525050565b600060208201905062000edd600083018462000eb5565b92915050565b600062000ef08262000c85565b915062000efd8362000c85565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f355762000f3462000c8f565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f78601b8362000d86565b915062000f858262000f40565b602082019050919050565b6000602082019050818103600083015262000fab8162000f69565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ffa57607f821691505b6020821081141562001011576200101062000fb2565b5b50919050565b60805160a0516138ac6200105960003960008181610b8301526111cd0152600081816109ba015281816126ff015281816127ef015261281601526138ac6000f3fe60806040526004361061021e5760003560e01c80638da5cb5b11610123578063b62496f5116100ab578063dd62ed3e1161006f578063dd62ed3e14610821578063e2f456051461085e578063e983f73914610889578063f2fde38b146108b4578063f8b45b05146108dd57610225565b8063b62496f51461072a578063bbc0c74214610767578063bfd7928414610792578063c0246668146107cf578063d2fcc001146107f857610225565b806396880b17116100f257806396880b171461061f578063981a0c071461065c5780639a7a23d614610687578063a457c2d7146106b0578063a9059cbb146106ed57610225565b80638da5cb5b146105725780638ffee7851461059d57806392136913146105c957806395d89b41146105f457610225565b80634fa2cf8a116101a657806370a082311161017557806370a082311461049f578063715018a6146104dc5780637bce5a04146104f35780637f2feddc1461051e5780638a8c523c1461055b57610225565b80634fa2cf8a146103e35780634fbee1931461040c578063691f224f146104495780636ddd17131461047457610225565b806323b872dd116101ed57806323b872dd146102e857806324024efd14610325578063313ce56714610350578063395093511461037b57806349bd5a5e146103b857610225565b806306fdde031461022a578063095ea7b3146102555780631694505e1461029257806318160ddd146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610908565b60405161024c9190612945565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612a00565b61099a565b6040516102899190612a5b565b60405180910390f35b34801561029e57600080fd5b506102a76109b8565b6040516102b49190612ad5565b60405180910390f35b3480156102c957600080fd5b506102d26109dc565b6040516102df9190612aff565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a9190612b1a565b6109e6565b60405161031c9190612a5b565b60405180910390f35b34801561033157600080fd5b5061033a610abf565b6040516103479190612aff565b60405180910390f35b34801561035c57600080fd5b50610365610ac5565b6040516103729190612b89565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190612a00565b610ace565b6040516103af9190612a5b565b60405180910390f35b3480156103c457600080fd5b506103cd610b81565b6040516103da9190612bb3565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190612bce565b610ba5565b005b34801561041857600080fd5b50610433600480360381019061042e9190612c0e565b610cd0565b6040516104409190612a5b565b60405180910390f35b34801561045557600080fd5b5061045e610d26565b60405161046b9190612aff565b60405180910390f35b34801561048057600080fd5b50610489610d2c565b6040516104969190612a5b565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190612c0e565b610d3f565b6040516104d39190612aff565b60405180910390f35b3480156104e857600080fd5b506104f1610d87565b005b3480156104ff57600080fd5b50610508610edf565b6040516105159190612aff565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190612c0e565b610eed565b6040516105529190612aff565b60405180910390f35b34801561056757600080fd5b50610570610f05565b005b34801561057e57600080fd5b50610587611032565b6040516105949190612bb3565b60405180910390f35b3480156105a957600080fd5b506105b261105c565b6040516105c0929190612c3b565b60405180910390f35b3480156105d557600080fd5b506105de61106e565b6040516105eb9190612aff565b60405180910390f35b34801561060057600080fd5b5061060961107c565b6040516106169190612945565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190612c0e565b61110e565b6040516106539190612a5b565b60405180910390f35b34801561066857600080fd5b5061067161112e565b60405161067e9190612aff565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190612c90565b611134565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190612a00565b611268565b6040516106e49190612a5b565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190612a00565b611335565b6040516107219190612a5b565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190612c0e565b611353565b60405161075e9190612a5b565b60405180910390f35b34801561077357600080fd5b5061077c611373565b6040516107899190612a5b565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190612c0e565b611386565b6040516107c69190612a5b565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190612c90565b6113a6565b005b34801561080457600080fd5b5061081f600480360381019061081a9190612c90565b6114e6565b005b34801561082d57600080fd5b5061084860048036038101906108439190612cd0565b6115d8565b6040516108559190612aff565b60405180910390f35b34801561086a57600080fd5b5061087361165f565b6040516108809190612aff565b60405180910390f35b34801561089557600080fd5b5061089e611665565b6040516108ab9190612aff565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190612c0e565b61166b565b005b3480156108e957600080fd5b506108f2611832565b6040516108ff9190612aff565b60405180910390f35b60606003805461091790612d3f565b80601f016020809104026020016040519081016040528092919081815260200182805461094390612d3f565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b5050505050905090565b60006109ae6109a761194f565b8484611957565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60006109f3848484611b22565b610ab4846109ff61194f565b610aaf8560405180606001604052806028815260200161382a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a6561194f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120db9092919063ffffffff16565b611957565b600190509392505050565b600e5481565b60006012905090565b6000610b77610adb61194f565b84610b728560016000610aec61194f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118f190919063ffffffff16565b611957565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610bad61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3390612dbd565b60405180910390fd5b60648183610c4a9190612e0c565b14610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190612eae565b60405180910390fd5b816006600001819055508060066001018190555080827f1e01a4924a1710040404be0f848c65e242cad98e407ad44f993abe891bd61c5360405160405180910390a35050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b601160019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d8f61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590612dbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600490508091505090565b60096020528060005260406000206000915090505481565b610f0d61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390612dbd565b60405180910390fd5b601160009054906101000a900460ff1615610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612f1a565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055504360128190555042601381905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068060000154908060010154905082565b600080600490508091505090565b60606004805461108b90612d3f565b80601f01602080910402602001604051908101604052809291908181526020018280546110b790612d3f565b80156111045780601f106110d957610100808354040283529160200191611104565b820191906000526020600020905b8154815290600101906020018083116110e757829003601f168201915b5050505050905090565b60156020528060005260406000206000915054906101000a900460ff1681565b600f5481565b61113c61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290612dbd565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190612fac565b60405180910390fd5b611264828261213f565b5050565b600061132b61127561194f565b8461132685604051806060016040528060258152602001613852602591396001600061129f61194f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120db9092919063ffffffff16565b611957565b6001905092915050565b600061134961134261194f565b8484611b22565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b601160009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6113ae61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490612dbd565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114da9190612a5b565b60405180910390a25050565b6114ee61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490612dbd565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b60105481565b61167361194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990612dbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117699061303e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806a295be96e6406697200000090506000600c60135442611855919061305e565b61185f91906130c1565b90506000829050606482116118dd57600082601461187d9190613225565b6118856109dc565b61188f91906130c1565b11156118cd578160146118a29190613225565b836118ad9190613270565b90506118b76109dc565b81106118c8576118c56109dc565b90505b6118d8565b6118d56109dc565b90505b6118e8565b6118e56109dc565b90505b80935050505090565b60008082846119009190612e0c565b905083811015611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613316565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be906133a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e9061343a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b159190612aff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b89906134cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf99061355e565b60405180910390fd5b6000811415611c1c57611c17838360006121e0565b6120d6565b611c24612475565b6000611c2e611032565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c6857600d54611c6c565b600e545b9050600060648284611c7e9190613270565b611c8891906130c1565b905060008184611c98919061305e565b9050611cac86611ca6611032565b846121e0565b611cb78686836121e0565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f58994cb98a7201e47640d0df56a21442fed8e3f670169ac652749019b24dce7284604051611d149190612aff565b60405180910390a36000611d2730610d3f565b90506000600c5482101590506000600560149054906101000a900460ff16159050601460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611de95750601460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611df357600090505b600080611dfe61106e565b90506000611e0a610edf565b90508315611f4957601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e6b5750600082115b15611e9d57611e966064611e88848d6124dc90919063ffffffff16565b61255790919063ffffffff16565b9250611f25565b601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ef65750600081115b15611f2457611f216064611f13838d6124dc90919063ffffffff16565b61255790919063ffffffff16565b92505b5b6000831115611f3a57611f398c30856121e0565b5b828a611f46919061305e565b99505b848015611f625750601160019054906101000a900460ff165b8015611f7b5750600560149054906101000a900460ff16155b8015611fd15750601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120275750601460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561207d5750601460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120c1576001600560146101000a81548160ff0219169083151502179055506120a56125a1565b6000600560146101000a81548160ff0219169083151502179055505b6120cc8c8c8c6121e0565b5050505050505050505b505050565b6000838311158290612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a9190612945565b60405180910390fd5b5060008385612132919061305e565b9050809150509392505050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906134cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b79061355e565b60405180910390fd5b6122cb8383836125f8565b61233681604051806060016040528060268152602001613804602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120db9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123c9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118f190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124689190612aff565b60405180910390a3505050565b6000439050600f548111612490576019600d819055506124c0565b60105481116124ae57600f600d819055506014600e819055506124bf565b600a600d81905550600f600e819055505b5b601e81106124d9576004600d819055506004600e819055505b50565b6000808314156124ef5760009050612551565b600082846124fd9190613270565b905082848261250c91906130c1565b1461254c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612543906135f0565b60405180910390fd5b809150505b92915050565b600061259983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125fd565b905092915050565b60006125ac30610d3f565b905060008114156125bd57506125f6565b6014600c546125cc9190613270565b8111156125e5576014600c546125e29190613270565b90505b60008190506125f381612660565b50505b565b505050565b60008083118290612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b9190612945565b60405180910390fd5b506000838561265391906130c1565b9050809150509392505050565b6000600267ffffffffffffffff81111561267d5761267c613610565b5b6040519080825280602002602001820160405280156126ab5781602001602082028036833780820191505090505b50905030816000815181106126c3576126c261363f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561276357600080fd5b505afa158015612777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279b9190613683565b816001815181106127af576127ae61363f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612814307f000000000000000000000000000000000000000000000000000000000000000084611957565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016128769594939291906137a9565b600060405180830381600087803b15801561289057600080fd5b505af11580156128a4573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128e65780820151818401526020810190506128cb565b838111156128f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000612917826128ac565b61292181856128b7565b93506129318185602086016128c8565b61293a816128fb565b840191505092915050565b6000602082019050818103600083015261295f818461290c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129978261296c565b9050919050565b6129a78161298c565b81146129b257600080fd5b50565b6000813590506129c48161299e565b92915050565b6000819050919050565b6129dd816129ca565b81146129e857600080fd5b50565b6000813590506129fa816129d4565b92915050565b60008060408385031215612a1757612a16612967565b5b6000612a25858286016129b5565b9250506020612a36858286016129eb565b9150509250929050565b60008115159050919050565b612a5581612a40565b82525050565b6000602082019050612a706000830184612a4c565b92915050565b6000819050919050565b6000612a9b612a96612a918461296c565b612a76565b61296c565b9050919050565b6000612aad82612a80565b9050919050565b6000612abf82612aa2565b9050919050565b612acf81612ab4565b82525050565b6000602082019050612aea6000830184612ac6565b92915050565b612af9816129ca565b82525050565b6000602082019050612b146000830184612af0565b92915050565b600080600060608486031215612b3357612b32612967565b5b6000612b41868287016129b5565b9350506020612b52868287016129b5565b9250506040612b63868287016129eb565b9150509250925092565b600060ff82169050919050565b612b8381612b6d565b82525050565b6000602082019050612b9e6000830184612b7a565b92915050565b612bad8161298c565b82525050565b6000602082019050612bc86000830184612ba4565b92915050565b60008060408385031215612be557612be4612967565b5b6000612bf3858286016129eb565b9250506020612c04858286016129eb565b9150509250929050565b600060208284031215612c2457612c23612967565b5b6000612c32848285016129b5565b91505092915050565b6000604082019050612c506000830185612af0565b612c5d6020830184612af0565b9392505050565b612c6d81612a40565b8114612c7857600080fd5b50565b600081359050612c8a81612c64565b92915050565b60008060408385031215612ca757612ca6612967565b5b6000612cb5858286016129b5565b9250506020612cc685828601612c7b565b9150509250929050565b60008060408385031215612ce757612ce6612967565b5b6000612cf5858286016129b5565b9250506020612d06858286016129b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d5757607f821691505b60208210811415612d6b57612d6a612d10565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612da76020836128b7565b9150612db282612d71565b602082019050919050565b60006020820190508181036000830152612dd681612d9a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e17826129ca565b9150612e22836129ca565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e5757612e56612ddd565b5b828201905092915050565b7f546f6b656e3a20726174696f206d7573742061646420746f2031303025000000600082015250565b6000612e98601d836128b7565b9150612ea382612e62565b602082019050919050565b60006020820190508181036000830152612ec781612e8b565b9050919050565b7f54726164696e6720697320616374697665000000000000000000000000000000600082015250565b6000612f046011836128b7565b9150612f0f82612ece565b602082019050919050565b60006020820190508181036000830152612f3381612ef7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612f966039836128b7565b9150612fa182612f3a565b604082019050919050565b60006020820190508181036000830152612fc581612f89565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130286026836128b7565b915061303382612fcc565b604082019050919050565b600060208201905081810360008301526130578161301b565b9050919050565b6000613069826129ca565b9150613074836129ca565b92508282101561308757613086612ddd565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006130cc826129ca565b91506130d7836129ca565b9250826130e7576130e6613092565b5b828204905092915050565b60008160011c9050919050565b6000808291508390505b60018511156131495780860481111561312557613124612ddd565b5b60018516156131345780820291505b8081029050613142856130f2565b9450613109565b94509492505050565b600082613162576001905061321e565b81613170576000905061321e565b81600181146131865760028114613190576131bf565b600191505061321e565b60ff8411156131a2576131a1612ddd565b5b8360020a9150848211156131b9576131b8612ddd565b5b5061321e565b5060208310610133831016604e8410600b84101617156131f45782820a9050838111156131ef576131ee612ddd565b5b61321e565b61320184848460016130ff565b9250905081840481111561321857613217612ddd565b5b81810290505b9392505050565b6000613230826129ca565b915061323b836129ca565b92506132687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613152565b905092915050565b600061327b826129ca565b9150613286836129ca565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132bf576132be612ddd565b5b828202905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613300601b836128b7565b915061330b826132ca565b602082019050919050565b6000602082019050818103600083015261332f816132f3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133926024836128b7565b915061339d82613336565b604082019050919050565b600060208201905081810360008301526133c181613385565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006134246022836128b7565b915061342f826133c8565b604082019050919050565b6000602082019050818103600083015261345381613417565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134b66025836128b7565b91506134c18261345a565b604082019050919050565b600060208201905081810360008301526134e5816134a9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135486023836128b7565b9150613553826134ec565b604082019050919050565b600060208201905081810360008301526135778161353b565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006135da6021836128b7565b91506135e58261357e565b604082019050919050565b60006020820190508181036000830152613609816135cd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061367d8161299e565b92915050565b60006020828403121561369957613698612967565b5b60006136a78482850161366e565b91505092915050565b6000819050919050565b60006136d56136d06136cb846136b0565b612a76565b6129ca565b9050919050565b6136e5816136ba565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137208161298c565b82525050565b60006137328383613717565b60208301905092915050565b6000602082019050919050565b6000613756826136eb565b61376081856136f6565b935061376b83613707565b8060005b8381101561379c5781516137838882613726565b975061378e8361373e565b92505060018101905061376f565b5085935050505092915050565b600060a0820190506137be6000830188612af0565b6137cb60208301876136dc565b81810360408301526137dd818661374b565b90506137ec6060830185612ba4565b6137f96080830184612af0565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201dcdf2b409704e5c9dba168016ce65ce7bf76957eb7a0a1e4332fa8f6bb2a9a764736f6c63430008090033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80638da5cb5b11610123578063b62496f5116100ab578063dd62ed3e1161006f578063dd62ed3e14610821578063e2f456051461085e578063e983f73914610889578063f2fde38b146108b4578063f8b45b05146108dd57610225565b8063b62496f51461072a578063bbc0c74214610767578063bfd7928414610792578063c0246668146107cf578063d2fcc001146107f857610225565b806396880b17116100f257806396880b171461061f578063981a0c071461065c5780639a7a23d614610687578063a457c2d7146106b0578063a9059cbb146106ed57610225565b80638da5cb5b146105725780638ffee7851461059d57806392136913146105c957806395d89b41146105f457610225565b80634fa2cf8a116101a657806370a082311161017557806370a082311461049f578063715018a6146104dc5780637bce5a04146104f35780637f2feddc1461051e5780638a8c523c1461055b57610225565b80634fa2cf8a146103e35780634fbee1931461040c578063691f224f146104495780636ddd17131461047457610225565b806323b872dd116101ed57806323b872dd146102e857806324024efd14610325578063313ce56714610350578063395093511461037b57806349bd5a5e146103b857610225565b806306fdde031461022a578063095ea7b3146102555780631694505e1461029257806318160ddd146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610908565b60405161024c9190612945565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612a00565b61099a565b6040516102899190612a5b565b60405180910390f35b34801561029e57600080fd5b506102a76109b8565b6040516102b49190612ad5565b60405180910390f35b3480156102c957600080fd5b506102d26109dc565b6040516102df9190612aff565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a9190612b1a565b6109e6565b60405161031c9190612a5b565b60405180910390f35b34801561033157600080fd5b5061033a610abf565b6040516103479190612aff565b60405180910390f35b34801561035c57600080fd5b50610365610ac5565b6040516103729190612b89565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190612a00565b610ace565b6040516103af9190612a5b565b60405180910390f35b3480156103c457600080fd5b506103cd610b81565b6040516103da9190612bb3565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190612bce565b610ba5565b005b34801561041857600080fd5b50610433600480360381019061042e9190612c0e565b610cd0565b6040516104409190612a5b565b60405180910390f35b34801561045557600080fd5b5061045e610d26565b60405161046b9190612aff565b60405180910390f35b34801561048057600080fd5b50610489610d2c565b6040516104969190612a5b565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190612c0e565b610d3f565b6040516104d39190612aff565b60405180910390f35b3480156104e857600080fd5b506104f1610d87565b005b3480156104ff57600080fd5b50610508610edf565b6040516105159190612aff565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190612c0e565b610eed565b6040516105529190612aff565b60405180910390f35b34801561056757600080fd5b50610570610f05565b005b34801561057e57600080fd5b50610587611032565b6040516105949190612bb3565b60405180910390f35b3480156105a957600080fd5b506105b261105c565b6040516105c0929190612c3b565b60405180910390f35b3480156105d557600080fd5b506105de61106e565b6040516105eb9190612aff565b60405180910390f35b34801561060057600080fd5b5061060961107c565b6040516106169190612945565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190612c0e565b61110e565b6040516106539190612a5b565b60405180910390f35b34801561066857600080fd5b5061067161112e565b60405161067e9190612aff565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190612c90565b611134565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190612a00565b611268565b6040516106e49190612a5b565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190612a00565b611335565b6040516107219190612a5b565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190612c0e565b611353565b60405161075e9190612a5b565b60405180910390f35b34801561077357600080fd5b5061077c611373565b6040516107899190612a5b565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190612c0e565b611386565b6040516107c69190612a5b565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190612c90565b6113a6565b005b34801561080457600080fd5b5061081f600480360381019061081a9190612c90565b6114e6565b005b34801561082d57600080fd5b5061084860048036038101906108439190612cd0565b6115d8565b6040516108559190612aff565b60405180910390f35b34801561086a57600080fd5b5061087361165f565b6040516108809190612aff565b60405180910390f35b34801561089557600080fd5b5061089e611665565b6040516108ab9190612aff565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190612c0e565b61166b565b005b3480156108e957600080fd5b506108f2611832565b6040516108ff9190612aff565b60405180910390f35b60606003805461091790612d3f565b80601f016020809104026020016040519081016040528092919081815260200182805461094390612d3f565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b5050505050905090565b60006109ae6109a761194f565b8484611957565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60006109f3848484611b22565b610ab4846109ff61194f565b610aaf8560405180606001604052806028815260200161382a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a6561194f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120db9092919063ffffffff16565b611957565b600190509392505050565b600e5481565b60006012905090565b6000610b77610adb61194f565b84610b728560016000610aec61194f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118f190919063ffffffff16565b611957565b6001905092915050565b7f0000000000000000000000008a28c0c6d7d316e2c3d06c146cc4f2822b7d12a181565b610bad61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3390612dbd565b60405180910390fd5b60648183610c4a9190612e0c565b14610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190612eae565b60405180910390fd5b816006600001819055508060066001018190555080827f1e01a4924a1710040404be0f848c65e242cad98e407ad44f993abe891bd61c5360405160405180910390a35050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b601160019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d8f61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590612dbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600490508091505090565b60096020528060005260406000206000915090505481565b610f0d61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390612dbd565b60405180910390fd5b601160009054906101000a900460ff1615610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612f1a565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055504360128190555042601381905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068060000154908060010154905082565b600080600490508091505090565b60606004805461108b90612d3f565b80601f01602080910402602001604051908101604052809291908181526020018280546110b790612d3f565b80156111045780601f106110d957610100808354040283529160200191611104565b820191906000526020600020905b8154815290600101906020018083116110e757829003601f168201915b5050505050905090565b60156020528060005260406000206000915054906101000a900460ff1681565b600f5481565b61113c61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290612dbd565b60405180910390fd5b7f0000000000000000000000008a28c0c6d7d316e2c3d06c146cc4f2822b7d12a173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190612fac565b60405180910390fd5b611264828261213f565b5050565b600061132b61127561194f565b8461132685604051806060016040528060258152602001613852602591396001600061129f61194f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120db9092919063ffffffff16565b611957565b6001905092915050565b600061134961134261194f565b8484611b22565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b601160009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6113ae61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490612dbd565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114da9190612a5b565b60405180910390a25050565b6114ee61194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490612dbd565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b60105481565b61167361194f565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990612dbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117699061303e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806a295be96e6406697200000090506000600c60135442611855919061305e565b61185f91906130c1565b90506000829050606482116118dd57600082601461187d9190613225565b6118856109dc565b61188f91906130c1565b11156118cd578160146118a29190613225565b836118ad9190613270565b90506118b76109dc565b81106118c8576118c56109dc565b90505b6118d8565b6118d56109dc565b90505b6118e8565b6118e56109dc565b90505b80935050505090565b60008082846119009190612e0c565b905083811015611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613316565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be906133a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e9061343a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b159190612aff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b89906134cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf99061355e565b60405180910390fd5b6000811415611c1c57611c17838360006121e0565b6120d6565b611c24612475565b6000611c2e611032565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c6857600d54611c6c565b600e545b9050600060648284611c7e9190613270565b611c8891906130c1565b905060008184611c98919061305e565b9050611cac86611ca6611032565b846121e0565b611cb78686836121e0565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f58994cb98a7201e47640d0df56a21442fed8e3f670169ac652749019b24dce7284604051611d149190612aff565b60405180910390a36000611d2730610d3f565b90506000600c5482101590506000600560149054906101000a900460ff16159050601460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611de95750601460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611df357600090505b600080611dfe61106e565b90506000611e0a610edf565b90508315611f4957601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e6b5750600082115b15611e9d57611e966064611e88848d6124dc90919063ffffffff16565b61255790919063ffffffff16565b9250611f25565b601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ef65750600081115b15611f2457611f216064611f13838d6124dc90919063ffffffff16565b61255790919063ffffffff16565b92505b5b6000831115611f3a57611f398c30856121e0565b5b828a611f46919061305e565b99505b848015611f625750601160019054906101000a900460ff165b8015611f7b5750600560149054906101000a900460ff16155b8015611fd15750601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120275750601460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561207d5750601460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120c1576001600560146101000a81548160ff0219169083151502179055506120a56125a1565b6000600560146101000a81548160ff0219169083151502179055505b6120cc8c8c8c6121e0565b5050505050505050505b505050565b6000838311158290612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a9190612945565b60405180910390fd5b5060008385612132919061305e565b9050809150509392505050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906134cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b79061355e565b60405180910390fd5b6122cb8383836125f8565b61233681604051806060016040528060268152602001613804602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120db9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123c9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118f190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124689190612aff565b60405180910390a3505050565b6000439050600f548111612490576019600d819055506124c0565b60105481116124ae57600f600d819055506014600e819055506124bf565b600a600d81905550600f600e819055505b5b601e81106124d9576004600d819055506004600e819055505b50565b6000808314156124ef5760009050612551565b600082846124fd9190613270565b905082848261250c91906130c1565b1461254c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612543906135f0565b60405180910390fd5b809150505b92915050565b600061259983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125fd565b905092915050565b60006125ac30610d3f565b905060008114156125bd57506125f6565b6014600c546125cc9190613270565b8111156125e5576014600c546125e29190613270565b90505b60008190506125f381612660565b50505b565b505050565b60008083118290612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b9190612945565b60405180910390fd5b506000838561265391906130c1565b9050809150509392505050565b6000600267ffffffffffffffff81111561267d5761267c613610565b5b6040519080825280602002602001820160405280156126ab5781602001602082028036833780820191505090505b50905030816000815181106126c3576126c261363f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561276357600080fd5b505afa158015612777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279b9190613683565b816001815181106127af576127ae61363f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612814307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611957565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016128769594939291906137a9565b600060405180830381600087803b15801561289057600080fd5b505af11580156128a4573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128e65780820151818401526020810190506128cb565b838111156128f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000612917826128ac565b61292181856128b7565b93506129318185602086016128c8565b61293a816128fb565b840191505092915050565b6000602082019050818103600083015261295f818461290c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129978261296c565b9050919050565b6129a78161298c565b81146129b257600080fd5b50565b6000813590506129c48161299e565b92915050565b6000819050919050565b6129dd816129ca565b81146129e857600080fd5b50565b6000813590506129fa816129d4565b92915050565b60008060408385031215612a1757612a16612967565b5b6000612a25858286016129b5565b9250506020612a36858286016129eb565b9150509250929050565b60008115159050919050565b612a5581612a40565b82525050565b6000602082019050612a706000830184612a4c565b92915050565b6000819050919050565b6000612a9b612a96612a918461296c565b612a76565b61296c565b9050919050565b6000612aad82612a80565b9050919050565b6000612abf82612aa2565b9050919050565b612acf81612ab4565b82525050565b6000602082019050612aea6000830184612ac6565b92915050565b612af9816129ca565b82525050565b6000602082019050612b146000830184612af0565b92915050565b600080600060608486031215612b3357612b32612967565b5b6000612b41868287016129b5565b9350506020612b52868287016129b5565b9250506040612b63868287016129eb565b9150509250925092565b600060ff82169050919050565b612b8381612b6d565b82525050565b6000602082019050612b9e6000830184612b7a565b92915050565b612bad8161298c565b82525050565b6000602082019050612bc86000830184612ba4565b92915050565b60008060408385031215612be557612be4612967565b5b6000612bf3858286016129eb565b9250506020612c04858286016129eb565b9150509250929050565b600060208284031215612c2457612c23612967565b5b6000612c32848285016129b5565b91505092915050565b6000604082019050612c506000830185612af0565b612c5d6020830184612af0565b9392505050565b612c6d81612a40565b8114612c7857600080fd5b50565b600081359050612c8a81612c64565b92915050565b60008060408385031215612ca757612ca6612967565b5b6000612cb5858286016129b5565b9250506020612cc685828601612c7b565b9150509250929050565b60008060408385031215612ce757612ce6612967565b5b6000612cf5858286016129b5565b9250506020612d06858286016129b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d5757607f821691505b60208210811415612d6b57612d6a612d10565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612da76020836128b7565b9150612db282612d71565b602082019050919050565b60006020820190508181036000830152612dd681612d9a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e17826129ca565b9150612e22836129ca565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e5757612e56612ddd565b5b828201905092915050565b7f546f6b656e3a20726174696f206d7573742061646420746f2031303025000000600082015250565b6000612e98601d836128b7565b9150612ea382612e62565b602082019050919050565b60006020820190508181036000830152612ec781612e8b565b9050919050565b7f54726164696e6720697320616374697665000000000000000000000000000000600082015250565b6000612f046011836128b7565b9150612f0f82612ece565b602082019050919050565b60006020820190508181036000830152612f3381612ef7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612f966039836128b7565b9150612fa182612f3a565b604082019050919050565b60006020820190508181036000830152612fc581612f89565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130286026836128b7565b915061303382612fcc565b604082019050919050565b600060208201905081810360008301526130578161301b565b9050919050565b6000613069826129ca565b9150613074836129ca565b92508282101561308757613086612ddd565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006130cc826129ca565b91506130d7836129ca565b9250826130e7576130e6613092565b5b828204905092915050565b60008160011c9050919050565b6000808291508390505b60018511156131495780860481111561312557613124612ddd565b5b60018516156131345780820291505b8081029050613142856130f2565b9450613109565b94509492505050565b600082613162576001905061321e565b81613170576000905061321e565b81600181146131865760028114613190576131bf565b600191505061321e565b60ff8411156131a2576131a1612ddd565b5b8360020a9150848211156131b9576131b8612ddd565b5b5061321e565b5060208310610133831016604e8410600b84101617156131f45782820a9050838111156131ef576131ee612ddd565b5b61321e565b61320184848460016130ff565b9250905081840481111561321857613217612ddd565b5b81810290505b9392505050565b6000613230826129ca565b915061323b836129ca565b92506132687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613152565b905092915050565b600061327b826129ca565b9150613286836129ca565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132bf576132be612ddd565b5b828202905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613300601b836128b7565b915061330b826132ca565b602082019050919050565b6000602082019050818103600083015261332f816132f3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133926024836128b7565b915061339d82613336565b604082019050919050565b600060208201905081810360008301526133c181613385565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006134246022836128b7565b915061342f826133c8565b604082019050919050565b6000602082019050818103600083015261345381613417565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134b66025836128b7565b91506134c18261345a565b604082019050919050565b600060208201905081810360008301526134e5816134a9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135486023836128b7565b9150613553826134ec565b604082019050919050565b600060208201905081810360008301526135778161353b565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006135da6021836128b7565b91506135e58261357e565b604082019050919050565b60006020820190508181036000830152613609816135cd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061367d8161299e565b92915050565b60006020828403121561369957613698612967565b5b60006136a78482850161366e565b91505092915050565b6000819050919050565b60006136d56136d06136cb846136b0565b612a76565b6129ca565b9050919050565b6136e5816136ba565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137208161298c565b82525050565b60006137328383613717565b60208301905092915050565b6000602082019050919050565b6000613756826136eb565b61376081856136f6565b935061376b83613707565b8060005b8381101561379c5781516137838882613726565b975061378e8361373e565b92505060018101905061376f565b5085935050505092915050565b600060a0820190506137be6000830188612af0565b6137cb60208301876136dc565b81810360408301526137dd818661374b565b90506137ec6060830185612ba4565b6137f96080830184612af0565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201dcdf2b409704e5c9dba168016ce65ce7bf76957eb7a0a1e4332fa8f6bb2a9a764736f6c63430008090033

Deployed Bytecode Sourcemap

29393:9949:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7492:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9666:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29576:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8615:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10318:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30163:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8456:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11083:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29634:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33634:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34814:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30131:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30397:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8787:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21994:148;;;;;;;;;;;;;:::i;:::-;;35738:299;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29834:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33382:244;;;;;;;;;;;;;:::i;:::-;;21350:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29711:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35431:301;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7712:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30646:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30198:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34370:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11805:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9128:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30775:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30357:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29791:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34180:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34038:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9367:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30091:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30275;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22298:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32626:702;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7492:100;7546:13;7579:5;7572:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7492:100;:::o;9666:169::-;9749:4;9766:39;9775:12;:10;:12::i;:::-;9789:7;9798:6;9766:8;:39::i;:::-;9823:4;9816:11;;9666:169;;;;:::o;29576:51::-;;;:::o;8615:108::-;8676:7;8703:12;;8696:19;;8615:108;:::o;10318:355::-;10458:4;10475:36;10485:6;10493:9;10504:6;10475:9;:36::i;:::-;10522:121;10531:6;10539:12;:10;:12::i;:::-;10553:89;10591:6;10553:89;;;;;;;;;;;;;;;;;:11;:19;10565:6;10553:19;;;;;;;;;;;;;;;:33;10573:12;:10;:12::i;:::-;10553:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10522:8;:121::i;:::-;10661:4;10654:11;;10318:355;;;;;:::o;30163:26::-;;;;:::o;8456:93::-;8514:5;8539:2;8532:9;;8456:93;:::o;11083:218::-;11171:4;11188:83;11197:12;:10;:12::i;:::-;11211:7;11220:50;11259:10;11220:11;:25;11232:12;:10;:12::i;:::-;11220:25;;;;;;;;;;;;;;;:34;11246:7;11220:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11188:8;:83::i;:::-;11289:4;11282:11;;11083:218;;;;:::o;29634:38::-;;;:::o;33634:396::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33793:3:::1;33770:19;33750:17;:39;;;;:::i;:::-;:46;33742:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;33870:17;33841:9;:26;;:46;;;;33929:19;33898:9;:28;;:50;;;;34002:19;33983:17;33966:56;;;;;;;;;;33634:396:::0;;:::o;34814:126::-;34880:4;34904:19;:28;34924:7;34904:28;;;;;;;;;;;;;;;;;;;;;;;;;34897:35;;34814:126;;;:::o;30131:25::-;;;;:::o;30397:31::-;;;;;;;;;;;;;:::o;8787:127::-;8861:7;8888:9;:18;8898:7;8888:18;;;;;;;;;;;;;;;;8881:25;;8787:127;;;:::o;21994:148::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22101:1:::1;22064:40;;22085:6;;;;;;;;;;;22064:40;;;;;;;;;;;;22132:1;22115:6;;:19;;;;;;;;;;;;;;;;;;21994:148::o:0;35738:299::-;35781:7;35943:11;35957:1;35943:15;;36030:3;36023:10;;;35738:299;:::o;29834:42::-;;;;;;;;;;;;;;;;;:::o;33382:244::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33446:13:::1;;;;;;;;;;;33445:14;33437:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;33508:4;33492:13;;:20;;;;;;;;;;;;;;;;;;33537:4;33523:11;;:18;;;;;;;;;;;;;;;;;;33565:12;33552:10;:25;;;;33603:15;33588:12;:30;;;;33382:244::o:0;21350:79::-;21388:7;21415:6;;;;;;;;;;;21408:13;;21350:79;:::o;29711:46::-;;;;;;;;;;;;;;:::o;35431:301::-;35475:7;35638:11;35652:1;35638:15;;35725:3;35718:10;;;35431:301;:::o;7712:104::-;7768:13;7801:7;7794:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7712:104;:::o;30646:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30198:31::-;;;;:::o;34370:242::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34477:13:::1;34469:21;;:4;:21;;;;34461:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34563:41;34592:4;34598:5;34563:28;:41::i;:::-;34370:242:::0;;:::o;11805:269::-;11898:4;11915:129;11924:12;:10;:12::i;:::-;11938:7;11947:96;11986:15;11947:96;;;;;;;;;;;;;;;;;:11;:25;11959:12;:10;:12::i;:::-;11947:25;;;;;;;;;;;;;;;:34;11973:7;11947:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11915:8;:129::i;:::-;12062:4;12055:11;;11805:269;;;;:::o;9128:175::-;9214:4;9231:42;9241:12;:10;:12::i;:::-;9255:9;9266:6;9231:9;:42::i;:::-;9291:4;9284:11;;9128:175;;;;:::o;30775:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;30357:33::-;;;;;;;;;;;;;:::o;29791:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;34180:182::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34296:8:::1;34265:19;:28;34285:7;34265:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34336:7;34320:34;;;34345:8;34320:34;;;;;;:::i;:::-;;;;;;;;34180:182:::0;;:::o;34038:134::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34160:4:::1;34123:26;:34;34150:6;34123:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;34038:134:::0;;:::o;9367:151::-;9456:7;9483:11;:18;9495:5;9483:18;;;;;;;;;;;;;;;:27;9502:7;9483:27;;;;;;;;;;;;;;;;9476:34;;9367:151;;;;:::o;30091:33::-;;;;:::o;30275:::-;;;;:::o;22298:244::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22407:1:::1;22387:22;;:8;:22;;;;22379:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22497:8;22468:38;;22489:6;;;;;;;;;;;22468:38;;;;;;;;;;;;22526:8;22517:6;;:17;;;;;;;;;;;;;;;;;;22298:244:::0;:::o;32626:702::-;32668:7;32688:25;32716:15;32688:43;;32742:18;32798:10;32782:12;;32764:15;:30;;;;:::i;:::-;32763:45;;;;:::i;:::-;32742:66;;32819:18;32840:17;32819:38;;32888:3;32874:10;:17;32870:421;;32947:1;32933:10;32929:2;:14;;;;:::i;:::-;32912:13;:11;:13::i;:::-;:32;;;;:::i;:::-;:36;32908:313;;;33006:10;33002:2;:14;;;;:::i;:::-;32982:17;:34;;;;:::i;:::-;32969:47;;33055:13;:11;:13::i;:::-;33041:10;:27;33037:102;;33106:13;:11;:13::i;:::-;33093:26;;33037:102;32908:313;;;33192:13;:11;:13::i;:::-;33179:26;;32908:313;32870:421;;;33266:13;:11;:13::i;:::-;33253:26;;32870:421;33310:10;33303:17;;;;;32626:702;:::o;16382:182::-;16440:7;16460:9;16476:1;16472;:5;;;;:::i;:::-;16460:17;;16501:1;16496;:6;;16488:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16555:1;16548:8;;;16382:182;;;;:::o;94:98::-;147:7;174:10;167:17;;94:98;:::o;15001:381::-;15154:1;15137:19;;:5;:19;;;;15129:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15235:1;15216:21;;:7;:21;;;;15208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15320:6;15290:11;:18;15302:5;15290:18;;;;;;;;;;;;;;;:27;15309:7;15290:27;;;;;;;;;;;;;;;:36;;;;15358:7;15342:32;;15351:5;15342:32;;;15367:6;15342:32;;;;;;:::i;:::-;;;;;;;;15001:381;;;:::o;36049:2280::-;36197:1;36181:18;;:4;:18;;;;36173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36274:1;36260:16;;:2;:16;;;;36252:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36343:1;36333:6;:11;36329:93;;;36361:28;36377:4;36383:2;36387:1;36361:15;:28::i;:::-;36404:7;;36329:93;36434:16;:14;:16::i;:::-;36461:15;36493:7;:5;:7::i;:::-;36479:21;;:10;:21;;;:48;;36517:10;;36479:48;;;36503:11;;36479:48;36461:66;;36538:11;36573:3;36562:7;36553:6;:16;;;;:::i;:::-;36552:24;;;;:::i;:::-;36538:38;;36587:16;36615:3;36606:6;:12;;;;:::i;:::-;36587:31;;36631:35;36647:4;36653:7;:5;:7::i;:::-;36662:3;36631:15;:35::i;:::-;36702;36718:4;36724:2;36728:8;36702:15;:35::i;:::-;36813:2;36795:26;;36807:4;36795:26;;;36817:3;36795:26;;;;;;:::i;:::-;;;;;;;;36834:28;36865:24;36883:4;36865:9;:24::i;:::-;36834:55;;36900:12;36939:18;;36915:20;:42;;36900:57;;36968:12;36984:8;;;;;;;;;;;36983:9;36968:24;;37094:19;:25;37114:4;37094:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37123:19;:23;37143:2;37123:23;;;;;;;;;;;;;;;;;;;;;;;;;37094:52;37090:100;;;37173:5;37163:15;;37090:100;37202:12;37229:25;37257:18;:16;:18::i;:::-;37229:46;;37286:24;37313:17;:15;:17::i;:::-;37286:44;;37423:7;37419:523;;;37475:25;:29;37501:2;37475:29;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;37528:1;37508:17;:21;37475:54;37471:322;;;37557:38;37591:3;37557:29;37568:17;37557:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;37550:45;;37471:322;;;37657:25;:31;37683:4;37657:31;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;37711:1;37692:16;:20;37657:55;37653:140;;;37740:37;37773:3;37740:28;37751:16;37740:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;37733:44;;37653:140;37471:322;37820:1;37813:4;:8;37809:91;;;37842:42;37858:4;37872;37879;37842:15;:42::i;:::-;37809:91;37926:4;37916:14;;;;;:::i;:::-;;;37419:523;37972:7;:35;;;;;37996:11;;;;;;;;;;;37972:35;:61;;;;;38025:8;;;;;;;;;;;38024:9;37972:61;:110;;;;;38051:25;:31;38077:4;38051:31;;;;;;;;;;;;;;;;;;;;;;;;;38050:32;37972:110;:153;;;;;38100:19;:25;38120:4;38100:25;;;;;;;;;;;;;;;;;;;;;;;;;38099:26;37972:153;:194;;;;;38143:19;:23;38163:2;38143:23;;;;;;;;;;;;;;;;;;;;;;;;;38142:24;37972:194;37954:322;;;38204:4;38193:8;;:15;;;;;;;;;;;;;;;;;;38223:10;:8;:10::i;:::-;38259:5;38248:8;;:16;;;;;;;;;;;;;;;;;;37954:322;38288:33;38304:4;38310:2;38314:6;38288:15;:33::i;:::-;36162:2167;;;;;;;;;36049:2280;;;;:::o;17288:193::-;17374:7;17407:1;17402;:6;;17410:12;17394:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17434:9;17450:1;17446;:5;;;;:::i;:::-;17434:17;;17472:1;17465:8;;;17288:193;;;;;:::o;34620:186::-;34737:5;34703:25;:31;34729:4;34703:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34792:5;34758:40;;34786:4;34758:40;;;;;;;;;;;;34620:186;;:::o;12565:575::-;12723:1;12705:20;;:6;:20;;;;12697:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12807:1;12786:23;;:9;:23;;;;12778:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12863:47;12884:6;12892:9;12903:6;12863:20;:47::i;:::-;12944:71;12966:6;12944:71;;;;;;;;;;;;;;;;;:9;:17;12954:6;12944:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12924:9;:17;12934:6;12924:17;;;;;;;;;;;;;;;:91;;;;13049:32;13074:6;13049:9;:20;13059:9;13049:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13026:9;:20;13036:9;13026:20;;;;;;;;;;;;;;;:55;;;;13114:9;13097:35;;13106:6;13097:35;;;13125:6;13097:35;;;;;;:::i;:::-;;;;;;;;12565:575;;;:::o;34948:477::-;34994:20;35017:12;34994:35;;35062:12;;35046;:28;35042:269;;35104:2;35091:10;:15;;;;35042:269;;;35144:13;;35128:12;:29;35124:187;;35187:2;35174:10;:15;;;;35218:2;35204:11;:16;;;;35124:187;;;35266:2;35253:10;:15;;;;35297:2;35283:11;:16;;;;35124:187;35042:269;35343:2;35327:12;:18;35323:95;;35375:1;35362:10;:14;;;;35405:1;35391:11;:15;;;;35323:95;34983:442;34948:477::o;17741:473::-;17799:7;18049:1;18044;:6;18040:47;;;18074:1;18067:8;;;;18040:47;18100:9;18116:1;18112;:5;;;;:::i;:::-;18100:17;;18145:1;18140;18136;:5;;;;:::i;:::-;:10;18128:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18205:1;18198:8;;;17741:473;;;;;:::o;18691:132::-;18749:7;18776:39;18780:1;18783;18776:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18769:46;;18691:132;;;;:::o;38940:399::-;38979:23;39005:24;39023:4;39005:9;:24::i;:::-;38979:50;;39065:1;39046:15;:20;39042:59;;;39083:7;;;39042:59;39156:2;39135:18;;:23;;;;:::i;:::-;39117:15;:41;39113:115;;;39214:2;39193:18;;:23;;;;:::i;:::-;39175:41;;39113:115;39240:26;39269:15;39240:44;;39295:36;39312:18;39295:16;:36::i;:::-;38968:371;;38940:399;:::o;15986:125::-;;;;:::o;19320:279::-;19406:7;19438:1;19434;:5;19441:12;19426:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19465:9;19481:1;19477;:5;;;;:::i;:::-;19465:17;;19590:1;19583:8;;;19320:279;;;;;:::o;38337:589::-;38463:21;38501:1;38487:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38463:40;;38532:4;38514;38519:1;38514:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38558:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38548:4;38553:1;38548:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38593:62;38610:4;38625:15;38643:11;38593:8;:62::i;:::-;38694:15;:66;;;38775:11;38801:1;38845:4;38872;38892:15;38694:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38392:534;38337:589;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:118::-;5966:24;5984:5;5966:24;:::i;:::-;5961:3;5954:37;5879:118;;:::o;6003:222::-;6096:4;6134:2;6123:9;6119:18;6111:26;;6147:71;6215:1;6204:9;6200:17;6191:6;6147:71;:::i;:::-;6003:222;;;;:::o;6231:474::-;6299:6;6307;6356:2;6344:9;6335:7;6331:23;6327:32;6324:119;;;6362:79;;:::i;:::-;6324:119;6482:1;6507:53;6552:7;6543:6;6532:9;6528:22;6507:53;:::i;:::-;6497:63;;6453:117;6609:2;6635:53;6680:7;6671:6;6660:9;6656:22;6635:53;:::i;:::-;6625:63;;6580:118;6231:474;;;;;:::o;6711:329::-;6770:6;6819:2;6807:9;6798:7;6794:23;6790:32;6787:119;;;6825:79;;:::i;:::-;6787:119;6945:1;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6916:117;6711:329;;;;:::o;7046:332::-;7167:4;7205:2;7194:9;7190:18;7182:26;;7218:71;7286:1;7275:9;7271:17;7262:6;7218:71;:::i;:::-;7299:72;7367:2;7356:9;7352:18;7343:6;7299:72;:::i;:::-;7046:332;;;;;:::o;7384:116::-;7454:21;7469:5;7454:21;:::i;:::-;7447:5;7444:32;7434:60;;7490:1;7487;7480:12;7434:60;7384:116;:::o;7506:133::-;7549:5;7587:6;7574:20;7565:29;;7603:30;7627:5;7603:30;:::i;:::-;7506:133;;;;:::o;7645:468::-;7710:6;7718;7767:2;7755:9;7746:7;7742:23;7738:32;7735:119;;;7773:79;;:::i;:::-;7735:119;7893:1;7918:53;7963:7;7954:6;7943:9;7939:22;7918:53;:::i;:::-;7908:63;;7864:117;8020:2;8046:50;8088:7;8079:6;8068:9;8064:22;8046:50;:::i;:::-;8036:60;;7991:115;7645:468;;;;;:::o;8119:474::-;8187:6;8195;8244:2;8232:9;8223:7;8219:23;8215:32;8212:119;;;8250:79;;:::i;:::-;8212:119;8370:1;8395:53;8440:7;8431:6;8420:9;8416:22;8395:53;:::i;:::-;8385:63;;8341:117;8497:2;8523:53;8568:7;8559:6;8548:9;8544:22;8523:53;:::i;:::-;8513:63;;8468:118;8119:474;;;;;:::o;8599:180::-;8647:77;8644:1;8637:88;8744:4;8741:1;8734:15;8768:4;8765:1;8758:15;8785:320;8829:6;8866:1;8860:4;8856:12;8846:22;;8913:1;8907:4;8903:12;8934:18;8924:81;;8990:4;8982:6;8978:17;8968:27;;8924:81;9052:2;9044:6;9041:14;9021:18;9018:38;9015:84;;;9071:18;;:::i;:::-;9015:84;8836:269;8785:320;;;:::o;9111:182::-;9251:34;9247:1;9239:6;9235:14;9228:58;9111:182;:::o;9299:366::-;9441:3;9462:67;9526:2;9521:3;9462:67;:::i;:::-;9455:74;;9538:93;9627:3;9538:93;:::i;:::-;9656:2;9651:3;9647:12;9640:19;;9299:366;;;:::o;9671:419::-;9837:4;9875:2;9864:9;9860:18;9852:26;;9924:9;9918:4;9914:20;9910:1;9899:9;9895:17;9888:47;9952:131;10078:4;9952:131;:::i;:::-;9944:139;;9671:419;;;:::o;10096:180::-;10144:77;10141:1;10134:88;10241:4;10238:1;10231:15;10265:4;10262:1;10255:15;10282:305;10322:3;10341:20;10359:1;10341:20;:::i;:::-;10336:25;;10375:20;10393:1;10375:20;:::i;:::-;10370:25;;10529:1;10461:66;10457:74;10454:1;10451:81;10448:107;;;10535:18;;:::i;:::-;10448:107;10579:1;10576;10572:9;10565:16;;10282:305;;;;:::o;10593:179::-;10733:31;10729:1;10721:6;10717:14;10710:55;10593:179;:::o;10778:366::-;10920:3;10941:67;11005:2;11000:3;10941:67;:::i;:::-;10934:74;;11017:93;11106:3;11017:93;:::i;:::-;11135:2;11130:3;11126:12;11119:19;;10778:366;;;:::o;11150:419::-;11316:4;11354:2;11343:9;11339:18;11331:26;;11403:9;11397:4;11393:20;11389:1;11378:9;11374:17;11367:47;11431:131;11557:4;11431:131;:::i;:::-;11423:139;;11150:419;;;:::o;11575:167::-;11715:19;11711:1;11703:6;11699:14;11692:43;11575:167;:::o;11748:366::-;11890:3;11911:67;11975:2;11970:3;11911:67;:::i;:::-;11904:74;;11987:93;12076:3;11987:93;:::i;:::-;12105:2;12100:3;12096:12;12089:19;;11748:366;;;:::o;12120:419::-;12286:4;12324:2;12313:9;12309:18;12301:26;;12373:9;12367:4;12363:20;12359:1;12348:9;12344:17;12337:47;12401:131;12527:4;12401:131;:::i;:::-;12393:139;;12120:419;;;:::o;12545:244::-;12685:34;12681:1;12673:6;12669:14;12662:58;12754:27;12749:2;12741:6;12737:15;12730:52;12545:244;:::o;12795:366::-;12937:3;12958:67;13022:2;13017:3;12958:67;:::i;:::-;12951:74;;13034:93;13123:3;13034:93;:::i;:::-;13152:2;13147:3;13143:12;13136:19;;12795:366;;;:::o;13167:419::-;13333:4;13371:2;13360:9;13356:18;13348:26;;13420:9;13414:4;13410:20;13406:1;13395:9;13391:17;13384:47;13448:131;13574:4;13448:131;:::i;:::-;13440:139;;13167:419;;;:::o;13592:225::-;13732:34;13728:1;13720:6;13716:14;13709:58;13801:8;13796:2;13788:6;13784:15;13777:33;13592:225;:::o;13823:366::-;13965:3;13986:67;14050:2;14045:3;13986:67;:::i;:::-;13979:74;;14062:93;14151:3;14062:93;:::i;:::-;14180:2;14175:3;14171:12;14164:19;;13823:366;;;:::o;14195:419::-;14361:4;14399:2;14388:9;14384:18;14376:26;;14448:9;14442:4;14438:20;14434:1;14423:9;14419:17;14412:47;14476:131;14602:4;14476:131;:::i;:::-;14468:139;;14195:419;;;:::o;14620:191::-;14660:4;14680:20;14698:1;14680:20;:::i;:::-;14675:25;;14714:20;14732:1;14714:20;:::i;:::-;14709:25;;14753:1;14750;14747:8;14744:34;;;14758:18;;:::i;:::-;14744:34;14803:1;14800;14796:9;14788:17;;14620:191;;;;:::o;14817:180::-;14865:77;14862:1;14855:88;14962:4;14959:1;14952:15;14986:4;14983:1;14976:15;15003:185;15043:1;15060:20;15078:1;15060:20;:::i;:::-;15055:25;;15094:20;15112:1;15094:20;:::i;:::-;15089:25;;15133:1;15123:35;;15138:18;;:::i;:::-;15123:35;15180:1;15177;15173:9;15168:14;;15003:185;;;;:::o;15194:102::-;15236:8;15283:5;15280:1;15276:13;15255:34;;15194:102;;;:::o;15302:848::-;15363:5;15370:4;15394:6;15385:15;;15418:5;15409:14;;15432:712;15453:1;15443:8;15440:15;15432:712;;;15548:4;15543:3;15539:14;15533:4;15530:24;15527:50;;;15557:18;;:::i;:::-;15527:50;15607:1;15597:8;15593:16;15590:451;;;16022:4;16015:5;16011:16;16002:25;;15590:451;16072:4;16066;16062:15;16054:23;;16102:32;16125:8;16102:32;:::i;:::-;16090:44;;15432:712;;;15302:848;;;;;;;:::o;16156:1073::-;16210:5;16401:8;16391:40;;16422:1;16413:10;;16424:5;;16391:40;16450:4;16440:36;;16467:1;16458:10;;16469:5;;16440:36;16536:4;16584:1;16579:27;;;;16620:1;16615:191;;;;16529:277;;16579:27;16597:1;16588:10;;16599:5;;;16615:191;16660:3;16650:8;16647:17;16644:43;;;16667:18;;:::i;:::-;16644:43;16716:8;16713:1;16709:16;16700:25;;16751:3;16744:5;16741:14;16738:40;;;16758:18;;:::i;:::-;16738:40;16791:5;;;16529:277;;16915:2;16905:8;16902:16;16896:3;16890:4;16887:13;16883:36;16865:2;16855:8;16852:16;16847:2;16841:4;16838:12;16834:35;16818:111;16815:246;;;16971:8;16965:4;16961:19;16952:28;;17006:3;16999:5;16996:14;16993:40;;;17013:18;;:::i;:::-;16993:40;17046:5;;16815:246;17086:42;17124:3;17114:8;17108:4;17105:1;17086:42;:::i;:::-;17071:57;;;;17160:4;17155:3;17151:14;17144:5;17141:25;17138:51;;;17169:18;;:::i;:::-;17138:51;17218:4;17211:5;17207:16;17198:25;;16156:1073;;;;;;:::o;17235:285::-;17295:5;17319:23;17337:4;17319:23;:::i;:::-;17311:31;;17363:27;17381:8;17363:27;:::i;:::-;17351:39;;17409:104;17446:66;17436:8;17430:4;17409:104;:::i;:::-;17400:113;;17235:285;;;;:::o;17526:348::-;17566:7;17589:20;17607:1;17589:20;:::i;:::-;17584:25;;17623:20;17641:1;17623:20;:::i;:::-;17618:25;;17811:1;17743:66;17739:74;17736:1;17733:81;17728:1;17721:9;17714:17;17710:105;17707:131;;;17818:18;;:::i;:::-;17707:131;17866:1;17863;17859:9;17848:20;;17526:348;;;;:::o;17880:177::-;18020:29;18016:1;18008:6;18004:14;17997:53;17880:177;:::o;18063:366::-;18205:3;18226:67;18290:2;18285:3;18226:67;:::i;:::-;18219:74;;18302:93;18391:3;18302:93;:::i;:::-;18420:2;18415:3;18411:12;18404:19;;18063:366;;;:::o;18435:419::-;18601:4;18639:2;18628:9;18624:18;18616:26;;18688:9;18682:4;18678:20;18674:1;18663:9;18659:17;18652:47;18716:131;18842:4;18716:131;:::i;:::-;18708:139;;18435:419;;;:::o;18860:223::-;19000:34;18996:1;18988:6;18984:14;18977:58;19069:6;19064:2;19056:6;19052:15;19045:31;18860:223;:::o;19089:366::-;19231:3;19252:67;19316:2;19311:3;19252:67;:::i;:::-;19245:74;;19328:93;19417:3;19328:93;:::i;:::-;19446:2;19441:3;19437:12;19430:19;;19089:366;;;:::o;19461:419::-;19627:4;19665:2;19654:9;19650:18;19642:26;;19714:9;19708:4;19704:20;19700:1;19689:9;19685:17;19678:47;19742:131;19868:4;19742:131;:::i;:::-;19734:139;;19461:419;;;:::o;19886:221::-;20026:34;20022:1;20014:6;20010:14;20003:58;20095:4;20090:2;20082:6;20078:15;20071:29;19886:221;:::o;20113:366::-;20255:3;20276:67;20340:2;20335:3;20276:67;:::i;:::-;20269:74;;20352:93;20441:3;20352:93;:::i;:::-;20470:2;20465:3;20461:12;20454:19;;20113:366;;;:::o;20485:419::-;20651:4;20689:2;20678:9;20674:18;20666:26;;20738:9;20732:4;20728:20;20724:1;20713:9;20709:17;20702:47;20766:131;20892:4;20766:131;:::i;:::-;20758:139;;20485:419;;;:::o;20910:224::-;21050:34;21046:1;21038:6;21034:14;21027:58;21119:7;21114:2;21106:6;21102:15;21095:32;20910:224;:::o;21140:366::-;21282:3;21303:67;21367:2;21362:3;21303:67;:::i;:::-;21296:74;;21379:93;21468:3;21379:93;:::i;:::-;21497:2;21492:3;21488:12;21481:19;;21140:366;;;:::o;21512:419::-;21678:4;21716:2;21705:9;21701:18;21693:26;;21765:9;21759:4;21755:20;21751:1;21740:9;21736:17;21729:47;21793:131;21919:4;21793:131;:::i;:::-;21785:139;;21512:419;;;:::o;21937:222::-;22077:34;22073:1;22065:6;22061:14;22054:58;22146:5;22141:2;22133:6;22129:15;22122:30;21937:222;:::o;22165:366::-;22307:3;22328:67;22392:2;22387:3;22328:67;:::i;:::-;22321:74;;22404:93;22493:3;22404:93;:::i;:::-;22522:2;22517:3;22513:12;22506:19;;22165:366;;;:::o;22537:419::-;22703:4;22741:2;22730:9;22726:18;22718:26;;22790:9;22784:4;22780:20;22776:1;22765:9;22761:17;22754:47;22818:131;22944:4;22818:131;:::i;:::-;22810:139;;22537:419;;;:::o;22962:220::-;23102:34;23098:1;23090:6;23086:14;23079:58;23171:3;23166:2;23158:6;23154:15;23147:28;22962:220;:::o;23188:366::-;23330:3;23351:67;23415:2;23410:3;23351:67;:::i;:::-;23344:74;;23427:93;23516:3;23427:93;:::i;:::-;23545:2;23540:3;23536:12;23529:19;;23188:366;;;:::o;23560:419::-;23726:4;23764:2;23753:9;23749:18;23741:26;;23813:9;23807:4;23803:20;23799:1;23788:9;23784:17;23777:47;23841:131;23967:4;23841:131;:::i;:::-;23833:139;;23560:419;;;:::o;23985:180::-;24033:77;24030:1;24023:88;24130:4;24127:1;24120:15;24154:4;24151:1;24144:15;24171:180;24219:77;24216:1;24209:88;24316:4;24313:1;24306:15;24340:4;24337:1;24330:15;24357:143;24414:5;24445:6;24439:13;24430:22;;24461:33;24488:5;24461:33;:::i;:::-;24357:143;;;;:::o;24506:351::-;24576:6;24625:2;24613:9;24604:7;24600:23;24596:32;24593:119;;;24631:79;;:::i;:::-;24593:119;24751:1;24776:64;24832:7;24823:6;24812:9;24808:22;24776:64;:::i;:::-;24766:74;;24722:128;24506:351;;;;:::o;24863:85::-;24908:7;24937:5;24926:16;;24863:85;;;:::o;24954:158::-;25012:9;25045:61;25063:42;25072:32;25098:5;25072:32;:::i;:::-;25063:42;:::i;:::-;25045:61;:::i;:::-;25032:74;;24954:158;;;:::o;25118:147::-;25213:45;25252:5;25213:45;:::i;:::-;25208:3;25201:58;25118:147;;:::o;25271:114::-;25338:6;25372:5;25366:12;25356:22;;25271:114;;;:::o;25391:184::-;25490:11;25524:6;25519:3;25512:19;25564:4;25559:3;25555:14;25540:29;;25391:184;;;;:::o;25581:132::-;25648:4;25671:3;25663:11;;25701:4;25696:3;25692:14;25684:22;;25581:132;;;:::o;25719:108::-;25796:24;25814:5;25796:24;:::i;:::-;25791:3;25784:37;25719:108;;:::o;25833:179::-;25902:10;25923:46;25965:3;25957:6;25923:46;:::i;:::-;26001:4;25996:3;25992:14;25978:28;;25833:179;;;;:::o;26018:113::-;26088:4;26120;26115:3;26111:14;26103:22;;26018:113;;;:::o;26167:732::-;26286:3;26315:54;26363:5;26315:54;:::i;:::-;26385:86;26464:6;26459:3;26385:86;:::i;:::-;26378:93;;26495:56;26545:5;26495:56;:::i;:::-;26574:7;26605:1;26590:284;26615:6;26612:1;26609:13;26590:284;;;26691:6;26685:13;26718:63;26777:3;26762:13;26718:63;:::i;:::-;26711:70;;26804:60;26857:6;26804:60;:::i;:::-;26794:70;;26650:224;26637:1;26634;26630:9;26625:14;;26590:284;;;26594:14;26890:3;26883:10;;26291:608;;;26167:732;;;;:::o;26905:831::-;27168:4;27206:3;27195:9;27191:19;27183:27;;27220:71;27288:1;27277:9;27273:17;27264:6;27220:71;:::i;:::-;27301:80;27377:2;27366:9;27362:18;27353:6;27301:80;:::i;:::-;27428:9;27422:4;27418:20;27413:2;27402:9;27398:18;27391:48;27456:108;27559:4;27550:6;27456:108;:::i;:::-;27448:116;;27574:72;27642:2;27631:9;27627:18;27618:6;27574:72;:::i;:::-;27656:73;27724:3;27713:9;27709:19;27700:6;27656:73;:::i;:::-;26905:831;;;;;;;;:::o

Swarm Source

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