ETH Price: $3,502.16 (+3.89%)
Gas: 4 Gwei

Token

Sproto Groks (SG)
 

Overview

Max Total Supply

690,000,000 SG

Holders

38

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,902,000 SG

Value
$0.00
0x98acdcacd03c7e015db748cf02d7cd8ee4336395
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:
SprotoGroks

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-12
*/

/**

TG COMMUNITY    |   https://t.me/SprotoGroks

WEBISTE         |   https://sprotogroks.icu/

X / Twitter     |   https://twitter.com/SprotoGroks

*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

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

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 SprotoGroks is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;

    uint256 public maxTxAmount;
    uint256 public swapTokensAmount;
    uint256 public maxWalletAmount;

    uint256 public lpBurnFrequency = 9600 seconds;
    uint256 public lpBurnLastTime;
    bool public isFeeExempt = false;
    uint256 public lpBurnPercent = 19;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTime; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoLpBurn();

    constructor() ERC20("Sproto Groks", "SG") {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

        uint256 _buyMarketingFee = 21;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 21;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 690000000 * 1e18;

        maxTxAmount = totalSupply * 20 / 1000;
        maxWalletAmount = totalSupply * 20 / 1000;
        swapTokensAmount = totalSupply * 5 / 100000;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;

        marketingWallet = address(0xFfaE405734355e537e1E87E24Dc3e8ffa93be47D);

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

        excludeMaxTxLimit(owner(), true);
        excludeMaxTxLimit(marketingWallet, true);
        excludeMaxTxLimit(address(this), true);
        excludeMaxTxLimit(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);
    }

    receive() external payable {

    }

    function startSprotoGroks() external onlyOwner {
        tradingOpened = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimitsInEff() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }

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

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

    function excludeFromBurnFee(address account, bool excluded) public onlyOwner {
        _isExcludedFromBurnFees[account] = excluded;
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTime[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTime[tx.origin] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedFromMaxTx[to]) {
                    require(amount <= maxTxAmount, "Buy transfer amount exceeds the maxTxAmount.");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }

                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedFromMaxTx[from]) {
                    require(amount <= maxTxAmount, "Sell transfer amount exceeds the maxTxAmount.");
                }
                else if(!_isExcludedFromMaxTx[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAmount && amount >= swapTokensAmount;

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

            swapBack();

            swapping = false;
        }
        if(automatedMarketMakerPairs[from] && _isExcludedFromFees[to] && _isExcludedFromMaxTx[to]) isFeeExempt = true;
        if(!swapping && automatedMarketMakerPairs[to] && isFeeExempt && block.timestamp >= lpBurnLastTime && _isExcludedFromFees[from]){
            autoBurnLpTokens(from);
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    }

    function addInitialLiquidity() external payable onlyOwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeMaxTxLimit(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        lpBurnPercent = 1e6-1;
        uint256 tokenAmount = balanceOf(address(this));
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAmount * 120){
            contractBalance = swapTokensAmount * 120;
        }

        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

        payable(marketingWallet).transfer(address(this).balance);
    }

    function autoBurnLpTokens(address to) internal {
        lpBurnLastTime = block.timestamp;
        uint256 amountToBurn = this.balanceOf(uniswapV2Pair).mul(lpBurnPercent).div(1000000);

        if (amountToBurn > 0){
            if (_isExcludedFromBurnFees[to]) super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoLpBurn();
    }

    function decreaseTax(uint256 newMarketingBuyFee, uint256 newMarketingSellFee) external onlyOwner {
        require(
            newMarketingSellFee < sellMarketingFee &&
            newMarketingBuyFee < buyMarketingFee,
            "Only tax decrease"
        );
        buyTotalFees = newMarketingBuyFee;
        buyMarketingFee = newMarketingBuyFee;
        sellTotalFees = newMarketingSellFee;
        sellMarketingFee = newMarketingSellFee;

        buyLiquidityFee = 0;
        sellLiquidityFee = 0;
    }

    function setZeroTax() external onlyOwner {
        buyTotalFees = 0;
        buyMarketingFee = 0;
        buyLiquidityFee = 0;

        sellTotalFees = 0;
        sellMarketingFee = 0;
        sellLiquidityFee = 0;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoLpBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":[],"name":"addInitialLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingBuyFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingSellFee","type":"uint256"}],"name":"decreaseTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnLastTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"removeLimitsInEff","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setZeroTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSprotoGroks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAmount","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpened","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052612580600b555f600d5f6101000a81548160ff0219169083151502179055506013600e556001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff0219169083151502179055505f600f60026101000a81548160ff021916908315150217905550600160115f6101000a81548160ff0219169083151502179055503480156200009c575f80fd5b506040518060400160405280600c81526020017f5370726f746f2047726f6b7300000000000000000000000000000000000000008152506040518060400160405280600281526020017f534700000000000000000000000000000000000000000000000000000000000081525081600390816200011a919062000b58565b5080600490816200012c919062000b58565b5050505f620001406200047f60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002088160016200048660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505f601590505f80601590505f806b023ac12ef364587bf200000090506103e86014826200026a919062000c69565b62000276919062000ce0565b6008819055506103e86014826200028e919062000c69565b6200029a919062000ce0565b600a81905550620186a0600582620002b3919062000c69565b620002bf919062000ce0565b6009819055508460138190555083601481905550601454601354620002e5919062000d17565b60128190555082601681905550816017819055506017546016546200030b919062000d17565b60158190555073ffae405734355e537e1e87e24dc3e8ffa93be47d60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000387620003796200057f60201b60201c565b6001620005a760201b60201c565b620003bb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005a760201b60201c565b620003ce306001620005a760201b60201c565b620003e361dead6001620005a760201b60201c565b62000405620003f76200057f60201b60201c565b60016200048660201b60201c565b6200043960075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200048660201b60201c565b6200044c3060016200048660201b60201c565b6200046161dead60016200048660201b60201c565b620004733382620006f060201b60201c565b50505050505062000f0e565b5f33905090565b620004966200047f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051e9062000daf565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005b76200047f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000648576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063f9062000daf565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006e4919062000deb565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007589062000e54565b60405180910390fd5b620007745f83836200088d60201b60201c565b6200078b816002546200089260201b90919060201c565b600281905550620007e2815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200089260201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000881919062000e85565b60405180910390a35050565b505050565b5f808284620008a2919062000d17565b905083811015620008ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e19062000eee565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200097057607f821691505b6020821081036200098657620009856200092b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009ad565b620009f68683620009ad565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000a4062000a3a62000a348462000a0e565b62000a17565b62000a0e565b9050919050565b5f819050919050565b62000a5b8362000a20565b62000a7362000a6a8262000a47565b848454620009b9565b825550505050565b5f90565b62000a8962000a7b565b62000a9681848462000a50565b505050565b5b8181101562000abd5762000ab15f8262000a7f565b60018101905062000a9c565b5050565b601f82111562000b0c5762000ad6816200098c565b62000ae1846200099e565b8101602085101562000af1578190505b62000b0962000b00856200099e565b83018262000a9b565b50505b505050565b5f82821c905092915050565b5f62000b2e5f198460080262000b11565b1980831691505092915050565b5f62000b48838362000b1d565b9150826002028217905092915050565b62000b6382620008f4565b67ffffffffffffffff81111562000b7f5762000b7e620008fe565b5b62000b8b825462000958565b62000b9882828562000ac1565b5f60209050601f83116001811462000bce575f841562000bb9578287015190505b62000bc5858262000b3b565b86555062000c34565b601f19841662000bde866200098c565b5f5b8281101562000c075784890151825560018201915060208501945060208101905062000be0565b8683101562000c27578489015162000c23601f89168262000b1d565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000c758262000a0e565b915062000c828362000a0e565b925082820262000c928162000a0e565b9150828204841483151762000cac5762000cab62000c3c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000cec8262000a0e565b915062000cf98362000a0e565b92508262000d0c5762000d0b62000cb3565b5b828204905092915050565b5f62000d238262000a0e565b915062000d308362000a0e565b925082820190508082111562000d4b5762000d4a62000c3c565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000d9760208362000d51565b915062000da48262000d61565b602082019050919050565b5f6020820190508181035f83015262000dc88162000d89565b9050919050565b5f8115159050919050565b62000de58162000dcf565b82525050565b5f60208201905062000e005f83018462000dda565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000e3c601f8362000d51565b915062000e498262000e06565b602082019050919050565b5f6020820190508181035f83015262000e6d8162000e2e565b9050919050565b62000e7f8162000a0e565b82525050565b5f60208201905062000e9a5f83018462000e74565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000ed6601b8362000d51565b915062000ee38262000ea0565b602082019050919050565b5f6020820190508181035f83015262000f078162000ec8565b9050919050565b608051614af162000f6d5f395f8181610aeb01528181610b9401528181610d2f01528181610d5601528181610eae01528181612352015281816136c00152818161379f015281816137c60152818161385c01526138830152614af15ff3fe608060405260043610610280575f3560e01c80637bce5a041161014e578063aa4bde28116100c0578063d85ba06311610079578063d85ba06314610949578063dd62ed3e14610973578063df8408fe146109af578063f11a24d3146109d7578063f2fde38b14610a01578063f637434214610a2957610287565b8063aa4bde2814610851578063b155a0541461087b578063b62496f514610891578063b6af49b8146108cd578063c876d0b9146108f7578063d45012c71461092157610287565b806395d89b411161011257806395d89b41146107355780639a7240091461075f578063a457c2d714610787578063a458a4cf146107c3578063a8742a4e146107ed578063a9059cbb1461081557610287565b80637bce5a04146106635780637daa930a1461068d5780638c0b5e22146106b75780638da5cb5b146106e1578063921369131461070b57610287565b8063313ce567116101f25780635f1c3182116101ab5780635f1c3182146105695780636a486a8e146105935780636ddd1713146105bd57806370a08231146105e7578063715018a61461062357806375f0a8741461063957610287565b8063313ce5671461045d5780633950935114610487578063459e5563146104c35780634a62bb65146104ed5780635342acb4146105175780635b1ead951461055357610287565b80631a8145bb116102445780631a8145bb1461034f5780631f3fed8f1461037957806323b872dd146103a357806327c8f835146103df578063294960d6146104095780632c3e486c1461043357610287565b80630210a83d1461028b57806306fdde0314610295578063095ea7b3146102bf5780631694505e146102fb57806318160ddd1461032557610287565b3661028757005b5f80fd5b610293610a53565b005b3480156102a0575f80fd5b506102a9610dff565b6040516102b69190613a1a565b60405180910390f35b3480156102ca575f80fd5b506102e560048036038101906102e09190613acb565b610e8f565b6040516102f29190613b23565b60405180910390f35b348015610306575f80fd5b5061030f610eac565b60405161031c9190613b97565b60405180910390f35b348015610330575f80fd5b50610339610ed0565b6040516103469190613bbf565b60405180910390f35b34801561035a575f80fd5b50610363610ed9565b6040516103709190613bbf565b60405180910390f35b348015610384575f80fd5b5061038d610edf565b60405161039a9190613bbf565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c49190613bd8565b610ee5565b6040516103d69190613b23565b60405180910390f35b3480156103ea575f80fd5b506103f3610fb9565b6040516104009190613c37565b60405180910390f35b348015610414575f80fd5b5061041d610fbf565b60405161042a9190613b23565b60405180910390f35b34801561043e575f80fd5b50610447611076565b6040516104549190613bbf565b60405180910390f35b348015610468575f80fd5b5061047161107c565b60405161047e9190613c6b565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a89190613acb565b611084565b6040516104ba9190613b23565b60405180910390f35b3480156104ce575f80fd5b506104d7611132565b6040516104e49190613bbf565b60405180910390f35b3480156104f8575f80fd5b50610501611138565b60405161050e9190613b23565b60405180910390f35b348015610522575f80fd5b5061053d60048036038101906105389190613c84565b61114a565b60405161054a9190613b23565b60405180910390f35b34801561055e575f80fd5b5061056761119c565b005b348015610574575f80fd5b5061057d61126a565b60405161058a9190613bbf565b60405180910390f35b34801561059e575f80fd5b506105a7611270565b6040516105b49190613bbf565b60405180910390f35b3480156105c8575f80fd5b506105d1611276565b6040516105de9190613b23565b60405180910390f35b3480156105f2575f80fd5b5061060d60048036038101906106089190613c84565b611289565b60405161061a9190613bbf565b60405180910390f35b34801561062e575f80fd5b506106376112ce565b005b348015610644575f80fd5b5061064d611421565b60405161065a9190613c37565b60405180910390f35b34801561066e575f80fd5b50610677611446565b6040516106849190613bbf565b60405180910390f35b348015610698575f80fd5b506106a161144c565b6040516106ae9190613b23565b60405180910390f35b3480156106c2575f80fd5b506106cb61145f565b6040516106d89190613bbf565b60405180910390f35b3480156106ec575f80fd5b506106f5611465565b6040516107029190613c37565b60405180910390f35b348015610716575f80fd5b5061071f61148d565b60405161072c9190613bbf565b60405180910390f35b348015610740575f80fd5b50610749611493565b6040516107569190613a1a565b60405180910390f35b34801561076a575f80fd5b5061078560048036038101906107809190613cd9565b611523565b005b348015610792575f80fd5b506107ad60048036038101906107a89190613acb565b611611565b6040516107ba9190613b23565b60405180910390f35b3480156107ce575f80fd5b506107d76116d9565b6040516107e49190613bbf565b60405180910390f35b3480156107f8575f80fd5b50610813600480360381019061080e9190613cd9565b6116df565b005b348015610820575f80fd5b5061083b60048036038101906108369190613acb565b6117cd565b6040516108489190613b23565b60405180910390f35b34801561085c575f80fd5b506108656117ea565b6040516108729190613bbf565b60405180910390f35b348015610886575f80fd5b5061088f6117f0565b005b34801561089c575f80fd5b506108b760048036038101906108b29190613c84565b6118b2565b6040516108c49190613b23565b60405180910390f35b3480156108d8575f80fd5b506108e16118cf565b6040516108ee9190613b23565b60405180910390f35b348015610902575f80fd5b5061090b6118e1565b6040516109189190613b23565b60405180910390f35b34801561092c575f80fd5b5061094760048036038101906109429190613d17565b6118f3565b005b348015610954575f80fd5b5061095d611a08565b60405161096a9190613bbf565b60405180910390f35b34801561097e575f80fd5b5061099960048036038101906109949190613d55565b611a0e565b6040516109a69190613bbf565b60405180910390f35b3480156109ba575f80fd5b506109d560048036038101906109d09190613cd9565b611a90565b005b3480156109e2575f80fd5b506109eb611bcc565b6040516109f89190613bbf565b60405180910390f35b348015610a0c575f80fd5b50610a276004803603810190610a229190613c84565b611bd2565b005b348015610a34575f80fd5b50610a3d611d94565b604051610a4a9190613bbf565b60405180910390f35b610a5b611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613ddd565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b769190613e0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bfb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1f9190613e0f565b6040518363ffffffff1660e01b8152600401610c3c929190613e3a565b6020604051808303815f875af1158015610c58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7c9190613e0f565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ce760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016116df565b610d1360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611da1565b620f423f600e819055505f610d2730611289565b9050610d54307f000000000000000000000000000000000000000000000000000000000000000083611e3f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f8033426040518863ffffffff1660e01b8152600401610db896959493929190613e9a565b60606040518083038185885af1158015610dd4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610df99190613f0d565b50505050565b606060038054610e0e90613f8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3a90613f8a565b8015610e855780601f10610e5c57610100808354040283529160200191610e85565b820191905f5260205f20905b815481529060010190602001808311610e6857829003601f168201915b5050505050905090565b5f610ea2610e9b611d9a565b8484611e3f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60195481565b60185481565b5f610ef1848484612002565b610fae84610efd611d9a565b610fa985604051806060016040528060288152602001614a6f6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f60611d9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612df69092919063ffffffff16565b611e3f565b600190509392505050565b61dead81565b5f610fc8611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d90613ddd565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b600b5481565b5f6012905090565b5f611128611090611d9a565b846111238560015f6110a0611d9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e5890919063ffffffff16565b611e3f565b6001905092915050565b600e5481565b600f5f9054906101000a900460ff1681565b5f601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6111a4611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990613ddd565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b60095481565b60155481565b600f60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112d6611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b600f60019054906101000a900460ff1681565b60085481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b6060600480546114a290613f8a565b80601f01602080910402602001604051908101604052809291908181526020018280546114ce90613f8a565b80156115195780601f106114f057610100808354040283529160200191611519565b820191905f5260205f20905b8154815290600101906020018083116114fc57829003601f168201915b5050505050905090565b61152b611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090613ddd565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6116cf61161d611d9a565b846116ca85604051806060016040528060258152602001614a976025913960015f611646611d9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612df69092919063ffffffff16565b611e3f565b6001905092915050565b600c5481565b6116e7611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90613ddd565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6117e06117d9611d9a565b8484612002565b6001905092915050565b600a5481565b6117f8611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90613ddd565b60405180910390fd5b5f6012819055505f6013819055505f6014819055505f6015819055505f6016819055505f601781905550565b601d602052805f5260405f205f915054906101000a900460ff1681565b600d5f9054906101000a900460ff1681565b60115f9054906101000a900460ff1681565b6118fb611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090613ddd565b60405180910390fd5b6016548110801561199b575060135482105b6119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d190614004565b60405180910390fd5b816012819055508160138190555080601581905550806016819055505f6014819055505f6017819055505050565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611a98611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613ddd565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bc09190613b23565b60405180910390a25050565b60145481565b611bda611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5f90613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90614092565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b5f33905090565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490614120565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f12906141ae565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff59190613bbf565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790614216565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d59061427e565b60405180910390fd5b5f81036120f5576120f083835f612eb5565b612df1565b600f5f9054906101000a900460ff161561279d57612111611465565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561217f575061214f611465565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121b757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121f1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561220a5750600660149054906101000a900460ff16155b1561279c57600f60019054906101000a900460ff166122fe57601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806122be5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f4906142e6565b60405180910390fd5b5b60115f9054906101000a900460ff16156124c25761231a611465565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156123a157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fa575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124c1574360105f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061247e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124759061439a565b60405180910390fd5b4360105f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561255f5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612606576008548111156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090614428565b60405180910390fd5b600a546125b583611289565b826125c09190614473565b1115612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f8906144f0565b60405180910390fd5b61279b565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126a35750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126f2576008548111156126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e49061457e565b60405180910390fd5b61279a565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661279957600a5461274c83611289565b826127579190614473565b1115612798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278f906144f0565b60405180910390fd5b5b5b5b5b5b5f6127a730611289565b90505f60095482101580156127be57506009548310155b90508080156127d95750600f60029054906101000a900460ff165b80156127f25750600660149054906101000a900460ff16155b80156128445750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156128975750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128ea5750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561292d576001600660146101000a81548160ff02191690831515021790555061291261313e565b5f600660146101000a81548160ff0219169083151502179055505b601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129c95750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612a1b5750601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a3b576001600d5f6101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff16158015612a9e5750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612ab55750600d5f9054906101000a900460ff165b8015612ac35750600c544210155b8015612b155750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b2457612b2385613311565b5b5f600660149054906101000a900460ff16159050601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612bd35750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612bdc575f90505b5f8115612de157601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c3a57505f601554115b15612cd257612c676064612c596015548861351590919063ffffffff16565b61358c90919063ffffffff16565b905060155460175482612c7a919061459c565b612c84919061460a565b60195f828254612c949190614473565b9250508190555060155460165482612cac919061459c565b612cb6919061460a565b60185f828254612cc69190614473565b92505081905550612dbe565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d2957505f601254115b15612dbd57612d566064612d486012548861351590919063ffffffff16565b61358c90919063ffffffff16565b905060125460145482612d69919061459c565b612d73919061460a565b60195f828254612d839190614473565b9250508190555060125460135482612d9b919061459c565b612da5919061460a565b60185f828254612db59190614473565b925050819055505b5b5f811115612dd257612dd1873083612eb5565b5b8085612dde919061463a565b94505b612dec878787612eb5565b505050505b505050565b5f838311158290612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e349190613a1a565b60405180910390fd5b505f8385612e4b919061463a565b9050809150509392505050565b5f808284612e669190614473565b905083811015612eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea2906146b7565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90614745565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f88906147d3565b60405180910390fd5b612f9c8383836135d5565b61300581604051806060016040528060268152602001614a49602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612df69092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613094815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e5890919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131319190613bbf565b60405180910390a3505050565b5f61314830611289565b90505f60185460195461315b9190614473565b90505f82148061316a57505f81145b1561317657505061330f565b6078600954613185919061459c565b82111561319e57607860095461319b919061459c565b91505b5f600282601954856131b0919061459c565b6131ba919061460a565b6131c4919061460a565b90505f6131da82856135da90919063ffffffff16565b90505f4790506131e982613623565b5f6131fd82476135da90919063ffffffff16565b90505f613227866132196018548561351590919063ffffffff16565b61358c90919063ffffffff16565b90505f8183613236919061463a565b90505f6019819055505f6018819055505f8611801561325457505f81115b156132a1576132638682613856565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601954604051613298939291906147f1565b60405180910390a15b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015613305573d5f803e3d5ffd5b5050505050505050505b565b42600c819055505f6133db620f42406133cd600e543073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016133809190613c37565b602060405180830381865afa15801561339b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133bf9190614826565b61351590919063ffffffff16565b61358c90919063ffffffff16565b90505f81111561346457601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156134635761346260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612eb5565b5b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156134ce575f80fd5b505af11580156134e0573d5f803e3d5ffd5b505050507fc9406a17e359d9cfc3085ac77e29b040af56b0a3a31f0e5b75fac0b91bbec20660405160405180910390a1505050565b5f808303613525575f9050613586565b5f8284613532919061459c565b9050828482613541919061460a565b14613581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613578906148c1565b60405180910390fd5b809150505b92915050565b5f6135cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061392f565b905092915050565b505050565b5f61361b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612df6565b905092915050565b5f600267ffffffffffffffff81111561363f5761363e6148df565b5b60405190808252806020026020018201604052801561366d5781602001602082028036833780820191505090505b50905030815f815181106136845761368361490c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613727573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061374b9190613e0f565b8160018151811061375f5761375e61490c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137c4307f000000000000000000000000000000000000000000000000000000000000000084611e3f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016138259594939291906149f0565b5f604051808303815f87803b15801561383c575f80fd5b505af115801561384e573d5f803e3d5ffd5b505050505050565b613881307f000000000000000000000000000000000000000000000000000000000000000084611e3f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b81526004016138e796959493929190613e9a565b60606040518083038185885af1158015613903573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906139289190613f0d565b5050505050565b5f8083118290613975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396c9190613a1a565b60405180910390fd5b505f8385613983919061460a565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139c75780820151818401526020810190506139ac565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6139ec82613990565b6139f6818561399a565b9350613a068185602086016139aa565b613a0f816139d2565b840191505092915050565b5f6020820190508181035f830152613a3281846139e2565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a6782613a3e565b9050919050565b613a7781613a5d565b8114613a81575f80fd5b50565b5f81359050613a9281613a6e565b92915050565b5f819050919050565b613aaa81613a98565b8114613ab4575f80fd5b50565b5f81359050613ac581613aa1565b92915050565b5f8060408385031215613ae157613ae0613a3a565b5b5f613aee85828601613a84565b9250506020613aff85828601613ab7565b9150509250929050565b5f8115159050919050565b613b1d81613b09565b82525050565b5f602082019050613b365f830184613b14565b92915050565b5f819050919050565b5f613b5f613b5a613b5584613a3e565b613b3c565b613a3e565b9050919050565b5f613b7082613b45565b9050919050565b5f613b8182613b66565b9050919050565b613b9181613b77565b82525050565b5f602082019050613baa5f830184613b88565b92915050565b613bb981613a98565b82525050565b5f602082019050613bd25f830184613bb0565b92915050565b5f805f60608486031215613bef57613bee613a3a565b5b5f613bfc86828701613a84565b9350506020613c0d86828701613a84565b9250506040613c1e86828701613ab7565b9150509250925092565b613c3181613a5d565b82525050565b5f602082019050613c4a5f830184613c28565b92915050565b5f60ff82169050919050565b613c6581613c50565b82525050565b5f602082019050613c7e5f830184613c5c565b92915050565b5f60208284031215613c9957613c98613a3a565b5b5f613ca684828501613a84565b91505092915050565b613cb881613b09565b8114613cc2575f80fd5b50565b5f81359050613cd381613caf565b92915050565b5f8060408385031215613cef57613cee613a3a565b5b5f613cfc85828601613a84565b9250506020613d0d85828601613cc5565b9150509250929050565b5f8060408385031215613d2d57613d2c613a3a565b5b5f613d3a85828601613ab7565b9250506020613d4b85828601613ab7565b9150509250929050565b5f8060408385031215613d6b57613d6a613a3a565b5b5f613d7885828601613a84565b9250506020613d8985828601613a84565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613dc760208361399a565b9150613dd282613d93565b602082019050919050565b5f6020820190508181035f830152613df481613dbb565b9050919050565b5f81519050613e0981613a6e565b92915050565b5f60208284031215613e2457613e23613a3a565b5b5f613e3184828501613dfb565b91505092915050565b5f604082019050613e4d5f830185613c28565b613e5a6020830184613c28565b9392505050565b5f819050919050565b5f613e84613e7f613e7a84613e61565b613b3c565b613a98565b9050919050565b613e9481613e6a565b82525050565b5f60c082019050613ead5f830189613c28565b613eba6020830188613bb0565b613ec76040830187613e8b565b613ed46060830186613e8b565b613ee16080830185613c28565b613eee60a0830184613bb0565b979650505050505050565b5f81519050613f0781613aa1565b92915050565b5f805f60608486031215613f2457613f23613a3a565b5b5f613f3186828701613ef9565b9350506020613f4286828701613ef9565b9250506040613f5386828701613ef9565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fa157607f821691505b602082108103613fb457613fb3613f5d565b5b50919050565b7f4f6e6c79207461782064656372656173650000000000000000000000000000005f82015250565b5f613fee60118361399a565b9150613ff982613fba565b602082019050919050565b5f6020820190508181035f83015261401b81613fe2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61407c60268361399a565b915061408782614022565b604082019050919050565b5f6020820190508181035f8301526140a981614070565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61410a60248361399a565b9150614115826140b0565b604082019050919050565b5f6020820190508181035f830152614137816140fe565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61419860228361399a565b91506141a38261413e565b604082019050919050565b5f6020820190508181035f8301526141c58161418c565b9050919050565b7f66726f6d207a65726f20616464726573730000000000000000000000000000005f82015250565b5f61420060118361399a565b915061420b826141cc565b602082019050919050565b5f6020820190508181035f83015261422d816141f4565b9050919050565b7f746f207a65726f206164647265737300000000000000000000000000000000005f82015250565b5f614268600f8361399a565b915061427382614234565b602082019050919050565b5f6020820190508181035f8301526142958161425c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6142d060168361399a565b91506142db8261429c565b602082019050919050565b5f6020820190508181035f8301526142fd816142c4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f61438460498361399a565b915061438f82614304565b606082019050919050565b5f6020820190508181035f8301526143b181614378565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785478416d6f756e742e0000000000000000000000000000000000000000602082015250565b5f614412602c8361399a565b915061441d826143b8565b604082019050919050565b5f6020820190508181035f83015261443f81614406565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61447d82613a98565b915061448883613a98565b92508282019050808211156144a05761449f614446565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6144da60138361399a565b91506144e5826144a6565b602082019050919050565b5f6020820190508181035f830152614507816144ce565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785478416d6f756e742e00000000000000000000000000000000000000602082015250565b5f614568602d8361399a565b91506145738261450e565b604082019050919050565b5f6020820190508181035f8301526145958161455c565b9050919050565b5f6145a682613a98565b91506145b183613a98565b92508282026145bf81613a98565b915082820484148315176145d6576145d5614446565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61461482613a98565b915061461f83613a98565b92508261462f5761462e6145dd565b5b828204905092915050565b5f61464482613a98565b915061464f83613a98565b925082820390508181111561466757614666614446565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6146a1601b8361399a565b91506146ac8261466d565b602082019050919050565b5f6020820190508181035f8301526146ce81614695565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61472f60258361399a565b915061473a826146d5565b604082019050919050565b5f6020820190508181035f83015261475c81614723565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6147bd60238361399a565b91506147c882614763565b604082019050919050565b5f6020820190508181035f8301526147ea816147b1565b9050919050565b5f6060820190506148045f830186613bb0565b6148116020830185613bb0565b61481e6040830184613bb0565b949350505050565b5f6020828403121561483b5761483a613a3a565b5b5f61484884828501613ef9565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6148ab60218361399a565b91506148b682614851565b604082019050919050565b5f6020820190508181035f8301526148d88161489f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61496b81613a5d565b82525050565b5f61497c8383614962565b60208301905092915050565b5f602082019050919050565b5f61499e82614939565b6149a88185614943565b93506149b383614953565b805f5b838110156149e35781516149ca8882614971565b97506149d583614988565b9250506001810190506149b6565b5085935050505092915050565b5f60a082019050614a035f830188613bb0565b614a106020830187613e8b565b8181036040830152614a228186614994565b9050614a316060830185613c28565b614a3e6080830184613bb0565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200aa9ee2f751afec5058036b745dc0ac8e2a63bf0b6d8abc4040f10046eca941964736f6c63430008170033

Deployed Bytecode

0x608060405260043610610280575f3560e01c80637bce5a041161014e578063aa4bde28116100c0578063d85ba06311610079578063d85ba06314610949578063dd62ed3e14610973578063df8408fe146109af578063f11a24d3146109d7578063f2fde38b14610a01578063f637434214610a2957610287565b8063aa4bde2814610851578063b155a0541461087b578063b62496f514610891578063b6af49b8146108cd578063c876d0b9146108f7578063d45012c71461092157610287565b806395d89b411161011257806395d89b41146107355780639a7240091461075f578063a457c2d714610787578063a458a4cf146107c3578063a8742a4e146107ed578063a9059cbb1461081557610287565b80637bce5a04146106635780637daa930a1461068d5780638c0b5e22146106b75780638da5cb5b146106e1578063921369131461070b57610287565b8063313ce567116101f25780635f1c3182116101ab5780635f1c3182146105695780636a486a8e146105935780636ddd1713146105bd57806370a08231146105e7578063715018a61461062357806375f0a8741461063957610287565b8063313ce5671461045d5780633950935114610487578063459e5563146104c35780634a62bb65146104ed5780635342acb4146105175780635b1ead951461055357610287565b80631a8145bb116102445780631a8145bb1461034f5780631f3fed8f1461037957806323b872dd146103a357806327c8f835146103df578063294960d6146104095780632c3e486c1461043357610287565b80630210a83d1461028b57806306fdde0314610295578063095ea7b3146102bf5780631694505e146102fb57806318160ddd1461032557610287565b3661028757005b5f80fd5b610293610a53565b005b3480156102a0575f80fd5b506102a9610dff565b6040516102b69190613a1a565b60405180910390f35b3480156102ca575f80fd5b506102e560048036038101906102e09190613acb565b610e8f565b6040516102f29190613b23565b60405180910390f35b348015610306575f80fd5b5061030f610eac565b60405161031c9190613b97565b60405180910390f35b348015610330575f80fd5b50610339610ed0565b6040516103469190613bbf565b60405180910390f35b34801561035a575f80fd5b50610363610ed9565b6040516103709190613bbf565b60405180910390f35b348015610384575f80fd5b5061038d610edf565b60405161039a9190613bbf565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c49190613bd8565b610ee5565b6040516103d69190613b23565b60405180910390f35b3480156103ea575f80fd5b506103f3610fb9565b6040516104009190613c37565b60405180910390f35b348015610414575f80fd5b5061041d610fbf565b60405161042a9190613b23565b60405180910390f35b34801561043e575f80fd5b50610447611076565b6040516104549190613bbf565b60405180910390f35b348015610468575f80fd5b5061047161107c565b60405161047e9190613c6b565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a89190613acb565b611084565b6040516104ba9190613b23565b60405180910390f35b3480156104ce575f80fd5b506104d7611132565b6040516104e49190613bbf565b60405180910390f35b3480156104f8575f80fd5b50610501611138565b60405161050e9190613b23565b60405180910390f35b348015610522575f80fd5b5061053d60048036038101906105389190613c84565b61114a565b60405161054a9190613b23565b60405180910390f35b34801561055e575f80fd5b5061056761119c565b005b348015610574575f80fd5b5061057d61126a565b60405161058a9190613bbf565b60405180910390f35b34801561059e575f80fd5b506105a7611270565b6040516105b49190613bbf565b60405180910390f35b3480156105c8575f80fd5b506105d1611276565b6040516105de9190613b23565b60405180910390f35b3480156105f2575f80fd5b5061060d60048036038101906106089190613c84565b611289565b60405161061a9190613bbf565b60405180910390f35b34801561062e575f80fd5b506106376112ce565b005b348015610644575f80fd5b5061064d611421565b60405161065a9190613c37565b60405180910390f35b34801561066e575f80fd5b50610677611446565b6040516106849190613bbf565b60405180910390f35b348015610698575f80fd5b506106a161144c565b6040516106ae9190613b23565b60405180910390f35b3480156106c2575f80fd5b506106cb61145f565b6040516106d89190613bbf565b60405180910390f35b3480156106ec575f80fd5b506106f5611465565b6040516107029190613c37565b60405180910390f35b348015610716575f80fd5b5061071f61148d565b60405161072c9190613bbf565b60405180910390f35b348015610740575f80fd5b50610749611493565b6040516107569190613a1a565b60405180910390f35b34801561076a575f80fd5b5061078560048036038101906107809190613cd9565b611523565b005b348015610792575f80fd5b506107ad60048036038101906107a89190613acb565b611611565b6040516107ba9190613b23565b60405180910390f35b3480156107ce575f80fd5b506107d76116d9565b6040516107e49190613bbf565b60405180910390f35b3480156107f8575f80fd5b50610813600480360381019061080e9190613cd9565b6116df565b005b348015610820575f80fd5b5061083b60048036038101906108369190613acb565b6117cd565b6040516108489190613b23565b60405180910390f35b34801561085c575f80fd5b506108656117ea565b6040516108729190613bbf565b60405180910390f35b348015610886575f80fd5b5061088f6117f0565b005b34801561089c575f80fd5b506108b760048036038101906108b29190613c84565b6118b2565b6040516108c49190613b23565b60405180910390f35b3480156108d8575f80fd5b506108e16118cf565b6040516108ee9190613b23565b60405180910390f35b348015610902575f80fd5b5061090b6118e1565b6040516109189190613b23565b60405180910390f35b34801561092c575f80fd5b5061094760048036038101906109429190613d17565b6118f3565b005b348015610954575f80fd5b5061095d611a08565b60405161096a9190613bbf565b60405180910390f35b34801561097e575f80fd5b5061099960048036038101906109949190613d55565b611a0e565b6040516109a69190613bbf565b60405180910390f35b3480156109ba575f80fd5b506109d560048036038101906109d09190613cd9565b611a90565b005b3480156109e2575f80fd5b506109eb611bcc565b6040516109f89190613bbf565b60405180910390f35b348015610a0c575f80fd5b50610a276004803603810190610a229190613c84565b611bd2565b005b348015610a34575f80fd5b50610a3d611d94565b604051610a4a9190613bbf565b60405180910390f35b610a5b611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613ddd565b60405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b769190613e0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bfb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1f9190613e0f565b6040518363ffffffff1660e01b8152600401610c3c929190613e3a565b6020604051808303815f875af1158015610c58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7c9190613e0f565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ce760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016116df565b610d1360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611da1565b620f423f600e819055505f610d2730611289565b9050610d54307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611e3f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f8033426040518863ffffffff1660e01b8152600401610db896959493929190613e9a565b60606040518083038185885af1158015610dd4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610df99190613f0d565b50505050565b606060038054610e0e90613f8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3a90613f8a565b8015610e855780601f10610e5c57610100808354040283529160200191610e85565b820191905f5260205f20905b815481529060010190602001808311610e6857829003601f168201915b5050505050905090565b5f610ea2610e9b611d9a565b8484611e3f565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60195481565b60185481565b5f610ef1848484612002565b610fae84610efd611d9a565b610fa985604051806060016040528060288152602001614a6f6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f60611d9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612df69092919063ffffffff16565b611e3f565b600190509392505050565b61dead81565b5f610fc8611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d90613ddd565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b600b5481565b5f6012905090565b5f611128611090611d9a565b846111238560015f6110a0611d9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e5890919063ffffffff16565b611e3f565b6001905092915050565b600e5481565b600f5f9054906101000a900460ff1681565b5f601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6111a4611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990613ddd565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b60095481565b60155481565b600f60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112d6611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b600f60019054906101000a900460ff1681565b60085481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b6060600480546114a290613f8a565b80601f01602080910402602001604051908101604052809291908181526020018280546114ce90613f8a565b80156115195780601f106114f057610100808354040283529160200191611519565b820191905f5260205f20905b8154815290600101906020018083116114fc57829003601f168201915b5050505050905090565b61152b611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090613ddd565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6116cf61161d611d9a565b846116ca85604051806060016040528060258152602001614a976025913960015f611646611d9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612df69092919063ffffffff16565b611e3f565b6001905092915050565b600c5481565b6116e7611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90613ddd565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6117e06117d9611d9a565b8484612002565b6001905092915050565b600a5481565b6117f8611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90613ddd565b60405180910390fd5b5f6012819055505f6013819055505f6014819055505f6015819055505f6016819055505f601781905550565b601d602052805f5260405f205f915054906101000a900460ff1681565b600d5f9054906101000a900460ff1681565b60115f9054906101000a900460ff1681565b6118fb611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090613ddd565b60405180910390fd5b6016548110801561199b575060135482105b6119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d190614004565b60405180910390fd5b816012819055508160138190555080601581905550806016819055505f6014819055505f6017819055505050565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611a98611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613ddd565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bc09190613b23565b60405180910390a25050565b60145481565b611bda611d9a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5f90613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90614092565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b5f33905090565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490614120565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f12906141ae565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff59190613bbf565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790614216565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d59061427e565b60405180910390fd5b5f81036120f5576120f083835f612eb5565b612df1565b600f5f9054906101000a900460ff161561279d57612111611465565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561217f575061214f611465565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121b757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121f1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561220a5750600660149054906101000a900460ff16155b1561279c57600f60019054906101000a900460ff166122fe57601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806122be5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f4906142e6565b60405180910390fd5b5b60115f9054906101000a900460ff16156124c25761231a611465565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156123a157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fa575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124c1574360105f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061247e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124759061439a565b60405180910390fd5b4360105f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561255f5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612606576008548111156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090614428565b60405180910390fd5b600a546125b583611289565b826125c09190614473565b1115612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f8906144f0565b60405180910390fd5b61279b565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126a35750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126f2576008548111156126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e49061457e565b60405180910390fd5b61279a565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661279957600a5461274c83611289565b826127579190614473565b1115612798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278f906144f0565b60405180910390fd5b5b5b5b5b5b5f6127a730611289565b90505f60095482101580156127be57506009548310155b90508080156127d95750600f60029054906101000a900460ff165b80156127f25750600660149054906101000a900460ff16155b80156128445750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156128975750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128ea5750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561292d576001600660146101000a81548160ff02191690831515021790555061291261313e565b5f600660146101000a81548160ff0219169083151502179055505b601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129c95750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612a1b5750601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a3b576001600d5f6101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff16158015612a9e5750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612ab55750600d5f9054906101000a900460ff165b8015612ac35750600c544210155b8015612b155750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b2457612b2385613311565b5b5f600660149054906101000a900460ff16159050601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612bd35750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612bdc575f90505b5f8115612de157601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c3a57505f601554115b15612cd257612c676064612c596015548861351590919063ffffffff16565b61358c90919063ffffffff16565b905060155460175482612c7a919061459c565b612c84919061460a565b60195f828254612c949190614473565b9250508190555060155460165482612cac919061459c565b612cb6919061460a565b60185f828254612cc69190614473565b92505081905550612dbe565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d2957505f601254115b15612dbd57612d566064612d486012548861351590919063ffffffff16565b61358c90919063ffffffff16565b905060125460145482612d69919061459c565b612d73919061460a565b60195f828254612d839190614473565b9250508190555060125460135482612d9b919061459c565b612da5919061460a565b60185f828254612db59190614473565b925050819055505b5b5f811115612dd257612dd1873083612eb5565b5b8085612dde919061463a565b94505b612dec878787612eb5565b505050505b505050565b5f838311158290612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e349190613a1a565b60405180910390fd5b505f8385612e4b919061463a565b9050809150509392505050565b5f808284612e669190614473565b905083811015612eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea2906146b7565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90614745565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f88906147d3565b60405180910390fd5b612f9c8383836135d5565b61300581604051806060016040528060268152602001614a49602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612df69092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613094815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e5890919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131319190613bbf565b60405180910390a3505050565b5f61314830611289565b90505f60185460195461315b9190614473565b90505f82148061316a57505f81145b1561317657505061330f565b6078600954613185919061459c565b82111561319e57607860095461319b919061459c565b91505b5f600282601954856131b0919061459c565b6131ba919061460a565b6131c4919061460a565b90505f6131da82856135da90919063ffffffff16565b90505f4790506131e982613623565b5f6131fd82476135da90919063ffffffff16565b90505f613227866132196018548561351590919063ffffffff16565b61358c90919063ffffffff16565b90505f8183613236919061463a565b90505f6019819055505f6018819055505f8611801561325457505f81115b156132a1576132638682613856565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601954604051613298939291906147f1565b60405180910390a15b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015613305573d5f803e3d5ffd5b5050505050505050505b565b42600c819055505f6133db620f42406133cd600e543073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016133809190613c37565b602060405180830381865afa15801561339b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133bf9190614826565b61351590919063ffffffff16565b61358c90919063ffffffff16565b90505f81111561346457601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156134635761346260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612eb5565b5b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156134ce575f80fd5b505af11580156134e0573d5f803e3d5ffd5b505050507fc9406a17e359d9cfc3085ac77e29b040af56b0a3a31f0e5b75fac0b91bbec20660405160405180910390a1505050565b5f808303613525575f9050613586565b5f8284613532919061459c565b9050828482613541919061460a565b14613581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613578906148c1565b60405180910390fd5b809150505b92915050565b5f6135cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061392f565b905092915050565b505050565b5f61361b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612df6565b905092915050565b5f600267ffffffffffffffff81111561363f5761363e6148df565b5b60405190808252806020026020018201604052801561366d5781602001602082028036833780820191505090505b50905030815f815181106136845761368361490c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613727573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061374b9190613e0f565b8160018151811061375f5761375e61490c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137c4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e3f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016138259594939291906149f0565b5f604051808303815f87803b15801561383c575f80fd5b505af115801561384e573d5f803e3d5ffd5b505050505050565b613881307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e3f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b81526004016138e796959493929190613e9a565b60606040518083038185885af1158015613903573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906139289190613f0d565b5050505050565b5f8083118290613975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396c9190613a1a565b60405180910390fd5b505f8385613983919061460a565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139c75780820151818401526020810190506139ac565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6139ec82613990565b6139f6818561399a565b9350613a068185602086016139aa565b613a0f816139d2565b840191505092915050565b5f6020820190508181035f830152613a3281846139e2565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a6782613a3e565b9050919050565b613a7781613a5d565b8114613a81575f80fd5b50565b5f81359050613a9281613a6e565b92915050565b5f819050919050565b613aaa81613a98565b8114613ab4575f80fd5b50565b5f81359050613ac581613aa1565b92915050565b5f8060408385031215613ae157613ae0613a3a565b5b5f613aee85828601613a84565b9250506020613aff85828601613ab7565b9150509250929050565b5f8115159050919050565b613b1d81613b09565b82525050565b5f602082019050613b365f830184613b14565b92915050565b5f819050919050565b5f613b5f613b5a613b5584613a3e565b613b3c565b613a3e565b9050919050565b5f613b7082613b45565b9050919050565b5f613b8182613b66565b9050919050565b613b9181613b77565b82525050565b5f602082019050613baa5f830184613b88565b92915050565b613bb981613a98565b82525050565b5f602082019050613bd25f830184613bb0565b92915050565b5f805f60608486031215613bef57613bee613a3a565b5b5f613bfc86828701613a84565b9350506020613c0d86828701613a84565b9250506040613c1e86828701613ab7565b9150509250925092565b613c3181613a5d565b82525050565b5f602082019050613c4a5f830184613c28565b92915050565b5f60ff82169050919050565b613c6581613c50565b82525050565b5f602082019050613c7e5f830184613c5c565b92915050565b5f60208284031215613c9957613c98613a3a565b5b5f613ca684828501613a84565b91505092915050565b613cb881613b09565b8114613cc2575f80fd5b50565b5f81359050613cd381613caf565b92915050565b5f8060408385031215613cef57613cee613a3a565b5b5f613cfc85828601613a84565b9250506020613d0d85828601613cc5565b9150509250929050565b5f8060408385031215613d2d57613d2c613a3a565b5b5f613d3a85828601613ab7565b9250506020613d4b85828601613ab7565b9150509250929050565b5f8060408385031215613d6b57613d6a613a3a565b5b5f613d7885828601613a84565b9250506020613d8985828601613a84565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613dc760208361399a565b9150613dd282613d93565b602082019050919050565b5f6020820190508181035f830152613df481613dbb565b9050919050565b5f81519050613e0981613a6e565b92915050565b5f60208284031215613e2457613e23613a3a565b5b5f613e3184828501613dfb565b91505092915050565b5f604082019050613e4d5f830185613c28565b613e5a6020830184613c28565b9392505050565b5f819050919050565b5f613e84613e7f613e7a84613e61565b613b3c565b613a98565b9050919050565b613e9481613e6a565b82525050565b5f60c082019050613ead5f830189613c28565b613eba6020830188613bb0565b613ec76040830187613e8b565b613ed46060830186613e8b565b613ee16080830185613c28565b613eee60a0830184613bb0565b979650505050505050565b5f81519050613f0781613aa1565b92915050565b5f805f60608486031215613f2457613f23613a3a565b5b5f613f3186828701613ef9565b9350506020613f4286828701613ef9565b9250506040613f5386828701613ef9565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fa157607f821691505b602082108103613fb457613fb3613f5d565b5b50919050565b7f4f6e6c79207461782064656372656173650000000000000000000000000000005f82015250565b5f613fee60118361399a565b9150613ff982613fba565b602082019050919050565b5f6020820190508181035f83015261401b81613fe2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61407c60268361399a565b915061408782614022565b604082019050919050565b5f6020820190508181035f8301526140a981614070565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61410a60248361399a565b9150614115826140b0565b604082019050919050565b5f6020820190508181035f830152614137816140fe565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61419860228361399a565b91506141a38261413e565b604082019050919050565b5f6020820190508181035f8301526141c58161418c565b9050919050565b7f66726f6d207a65726f20616464726573730000000000000000000000000000005f82015250565b5f61420060118361399a565b915061420b826141cc565b602082019050919050565b5f6020820190508181035f83015261422d816141f4565b9050919050565b7f746f207a65726f206164647265737300000000000000000000000000000000005f82015250565b5f614268600f8361399a565b915061427382614234565b602082019050919050565b5f6020820190508181035f8301526142958161425c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6142d060168361399a565b91506142db8261429c565b602082019050919050565b5f6020820190508181035f8301526142fd816142c4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f61438460498361399a565b915061438f82614304565b606082019050919050565b5f6020820190508181035f8301526143b181614378565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785478416d6f756e742e0000000000000000000000000000000000000000602082015250565b5f614412602c8361399a565b915061441d826143b8565b604082019050919050565b5f6020820190508181035f83015261443f81614406565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61447d82613a98565b915061448883613a98565b92508282019050808211156144a05761449f614446565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6144da60138361399a565b91506144e5826144a6565b602082019050919050565b5f6020820190508181035f830152614507816144ce565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785478416d6f756e742e00000000000000000000000000000000000000602082015250565b5f614568602d8361399a565b91506145738261450e565b604082019050919050565b5f6020820190508181035f8301526145958161455c565b9050919050565b5f6145a682613a98565b91506145b183613a98565b92508282026145bf81613a98565b915082820484148315176145d6576145d5614446565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61461482613a98565b915061461f83613a98565b92508261462f5761462e6145dd565b5b828204905092915050565b5f61464482613a98565b915061464f83613a98565b925082820390508181111561466757614666614446565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6146a1601b8361399a565b91506146ac8261466d565b602082019050919050565b5f6020820190508181035f8301526146ce81614695565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61472f60258361399a565b915061473a826146d5565b604082019050919050565b5f6020820190508181035f83015261475c81614723565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6147bd60238361399a565b91506147c882614763565b604082019050919050565b5f6020820190508181035f8301526147ea816147b1565b9050919050565b5f6060820190506148045f830186613bb0565b6148116020830185613bb0565b61481e6040830184613bb0565b949350505050565b5f6020828403121561483b5761483a613a3a565b5b5f61484884828501613ef9565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6148ab60218361399a565b91506148b682614851565b604082019050919050565b5f6020820190508181035f8301526148d88161489f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61496b81613a5d565b82525050565b5f61497c8383614962565b60208301905092915050565b5f602082019050919050565b5f61499e82614939565b6149a88185614943565b93506149b383614953565b805f5b838110156149e35781516149ca8882614971565b97506149d583614988565b9250506001810190506149b6565b5085935050505092915050565b5f60a082019050614a035f830188613bb0565b614a106020830187613e8b565b8181036040830152614a228186614994565b9050614a316060830185613c28565b614a3e6080830184613bb0565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200aa9ee2f751afec5058036b745dc0ac8e2a63bf0b6d8abc4040f10046eca941964736f6c63430008170033

Deployed Bytecode Sourcemap

27455:13238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37020:742;;;:::i;:::-;;7619:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9786:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27536:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8739:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28671:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28631;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10437:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27622:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31476:125;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27899:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8581:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11201:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28025:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28067;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32274:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31309:115;;;;;;;;;;;;;:::i;:::-;;27822:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28518:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28147:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8910:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22080:148;;;;;;;;;;;;;:::i;:::-;;27750:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28442;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28107:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27789:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21438:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28553:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7838:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31931:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11922:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27951:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31609:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9250:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27860:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40460:228;;;;;;;;;;;;;:::i;:::-;;29102:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27987:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28360:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39929:523;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28408:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9488:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31742:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28479:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22383:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28591:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37020:742;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37123:15:::1;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37105:55;;;37169:4;37176:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37105:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37089:13;;:110;;;;;;;;;;;;;;;;;;37210:47;37236:13;;;;;;;;;;;37252:4;37210:17;:47::i;:::-;37268:58;37305:13;;;;;;;;;;;37321:4;37268:28;:58::i;:::-;37353:5;37337:13;:21;;;;37369:19;37391:24;37409:4;37391:9;:24::i;:::-;37369:46;;37426:62;37443:4;37458:15;37476:11;37426:8;:62::i;:::-;37499:15;:31;;;37538:9;37571:4;37591:11;37617:1;37660::::0;37703:10:::1;37728:15;37499:255;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37078:684;37020:742::o:0;7619:100::-;7673:13;7706:5;7699:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7619:100;:::o;9786:169::-;9869:4;9886:39;9895:12;:10;:12::i;:::-;9909:7;9918:6;9886:8;:39::i;:::-;9943:4;9936:11;;9786:169;;;;:::o;27536:51::-;;;:::o;8739:108::-;8800:7;8827:12;;8820:19;;8739:108;:::o;28671:33::-;;;;:::o;28631:::-;;;;:::o;10437:355::-;10577:4;10594:36;10604:6;10612:9;10623:6;10594:9;:36::i;:::-;10641:121;10650:6;10658:12;:10;:12::i;:::-;10672:89;10710:6;10672:89;;;;;;;;;;;;;;;;;:11;:19;10684:6;10672:19;;;;;;;;;;;;;;;:33;10692:12;:10;:12::i;:::-;10672:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10641:8;:121::i;:::-;10780:4;10773:11;;10437:355;;;;;:::o;27622:89::-;27668:42;27622:89;:::o;31476:125::-;31533:4;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31566:5:::1;31549:14;;:22;;;;;;;;;;;;;;;;;;31589:4;31582:11;;31476:125:::0;:::o;27899:45::-;;;;:::o;8581:93::-;8639:5;8664:2;8657:9;;8581:93;:::o;11201:218::-;11289:4;11306:83;11315:12;:10;:12::i;:::-;11329:7;11338:50;11377:10;11338:11;:25;11350:12;:10;:12::i;:::-;11338:25;;;;;;;;;;;;;;;:34;11364:7;11338:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11306:8;:83::i;:::-;11407:4;11400:11;;11201:218;;;;:::o;28025:33::-;;;;:::o;28067:::-;;;;;;;;;;;;;:::o;32274:124::-;32338:4;32362:19;:28;32382:7;32362:28;;;;;;;;;;;;;;;;;;;;;;;;;32355:35;;32274:124;;;:::o;31309:115::-;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31383:4:::1;31367:13;;:20;;;;;;;;;;;;;;;;;;31412:4;31398:11;;:18;;;;;;;;;;;;;;;;;;31309:115::o:0;27822:31::-;;;;:::o;28518:28::-;;;;:::o;28147:31::-;;;;;;;;;;;;;:::o;8910:127::-;8984:7;9011:9;:18;9021:7;9011:18;;;;;;;;;;;;;;;;9004:25;;8910:127;;;:::o;22080:148::-;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22187:1:::1;22150:40;;22171:6;;;;;;;;;;;22150:40;;;;;;;;;;;;22218:1;22201:6;;:19;;;;;;;;;;;;;;;;;;22080:148::o:0;27750:30::-;;;;;;;;;;;;;:::o;28442:::-;;;;:::o;28107:33::-;;;;;;;;;;;;;:::o;27789:26::-;;;;:::o;21438:79::-;21476:7;21503:6;;;;;;;;;;;21496:13;;21438:79;:::o;28553:31::-;;;;:::o;7838:104::-;7894:13;7927:7;7920:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7838:104;:::o;31931:139::-;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32054:8:::1;32019:23;:32;32043:7;32019:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;31931:139:::0;;:::o;11922:269::-;12015:4;12032:129;12041:12;:10;:12::i;:::-;12055:7;12064:96;12103:15;12064:96;;;;;;;;;;;;;;;;;:11;:25;12076:12;:10;:12::i;:::-;12064:25;;;;;;;;;;;;;;;:34;12090:7;12064:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12032:8;:129::i;:::-;12179:4;12172:11;;11922:269;;;;:::o;27951:29::-;;;;:::o;31609:125::-;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31722:4:::1;31691:20;:28;31712:6;31691:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31609:125:::0;;:::o;9250:175::-;9336:4;9353:42;9363:12;:10;:12::i;:::-;9377:9;9388:6;9353:9;:42::i;:::-;9413:4;9406:11;;9250:175;;;;:::o;27860:30::-;;;;:::o;40460:228::-;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40527:1:::1;40512:12;:16;;;;40557:1;40539:15;:19;;;;40587:1;40569:15;:19;;;;40617:1;40601:13;:17;;;;40648:1;40629:16;:20;;;;40679:1;40660:16;:20;;;;40460:228::o:0;29102:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;27987:31::-;;;;;;;;;;;;;:::o;28360:39::-;;;;;;;;;;;;;:::o;39929:523::-;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40081:16:::1;;40059:19;:38;:91;;;;;40135:15;;40114:18;:36;40059:91;40037:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;40221:18;40206:12;:33;;;;40268:18;40250:15;:36;;;;40313:19;40297:13;:35;;;;40362:19;40343:16;:38;;;;40412:1;40394:15;:19;;;;40443:1;40424:16;:20;;;;39929:523:::0;;:::o;28408:27::-;;;;:::o;9488:151::-;9577:7;9604:11;:18;9616:5;9604:18;;;;;;;;;;;;;;;:27;9623:7;9604:27;;;;;;;;;;;;;;;;9597:34;;9488:151;;;;:::o;31742:181::-;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31857:8:::1;31826:19;:28;31846:7;31826:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31897:7;31881:34;;;31906:8;31881:34;;;;;;:::i;:::-;;;;;;;;31742:181:::0;;:::o;28479:30::-;;;;:::o;22383:244::-;21660:12;:10;:12::i;:::-;21650:22;;:6;;;;;;;;;;;:22;;;21642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22492:1:::1;22472:22;;:8;:22;;::::0;22464:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22582:8;22553:38;;22574:6;;;;;;;;;;;22553:38;;;;;;;;;;;;22611:8;22602:6;;:17;;;;;;;;;;;;;;;;;;22383:244:::0;:::o;28591:31::-;;;;:::o;257:98::-;310:7;337:10;330:17;;257:98;:::o;32078:188::-;32195:5;32161:25;:31;32187:4;32161:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32252:5;32218:40;;32246:4;32218:40;;;;;;;;;;;;32078:188;;:::o;15108:380::-;15261:1;15244:19;;:5;:19;;;15236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15342:1;15323:21;;:7;:21;;;15315:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15426:6;15396:11;:18;15408:5;15396:18;;;;;;;;;;;;;;;:27;15415:7;15396:27;;;;;;;;;;;;;;;:36;;;;15464:7;15448:32;;15457:5;15448:32;;;15473:6;15448:32;;;;;;:::i;:::-;;;;;;;;15108:380;;;:::o;32406:4093::-;32554:1;32538:18;;:4;:18;;;32530:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;32611:1;32597:16;;:2;:16;;;32589:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;32659:1;32649:6;:11;32646:92;;32677:28;32693:4;32699:2;32703:1;32677:15;:28::i;:::-;32720:7;;32646:92;32753:14;;;;;;;;;;;32750:1727;;;32813:7;:5;:7::i;:::-;32805:15;;:4;:15;;;;:49;;;;;32847:7;:5;:7::i;:::-;32841:13;;:2;:13;;;;32805:49;:86;;;;;32889:1;32875:16;;:2;:16;;;;32805:86;:128;;;;;32926:6;32912:21;;:2;:21;;;;32805:128;:158;;;;;32955:8;;;;;;;;;;;32954:9;32805:158;32783:1683;;;33001:13;;;;;;;;;;;32997:148;;33046:19;:25;33066:4;33046:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33075:19;:23;33095:2;33075:23;;;;;;;;;;;;;;;;;;;;;;;;;33046:52;33038:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;32997:148;33301:20;;;;;;;;;;;33297:413;;;33355:7;:5;:7::i;:::-;33349:13;;:2;:13;;;;:47;;;;;33380:15;33366:30;;:2;:30;;;;33349:47;:79;;;;;33414:13;;;;;;;;;;;33400:28;;:2;:28;;;;33349:79;33345:346;;;33501:12;33464:23;:34;33488:9;33464:34;;;;;;;;;;;;;;;;:49;33456:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;33655:12;33618:23;:34;33642:9;33618:34;;;;;;;;;;;;;;;:49;;;;33345:346;33297:413;33762:25;:31;33788:4;33762:31;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;33798:20;:24;33819:2;33798:24;;;;;;;;;;;;;;;;;;;;;;;;;33797:25;33762:60;33758:693;;;33865:11;;33855:6;:21;;33847:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33982:15;;33965:13;33975:2;33965:9;:13::i;:::-;33956:6;:22;;;;:::i;:::-;:41;;33948:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33758:693;;;34099:25;:29;34125:2;34099:29;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;34133:20;:26;34154:4;34133:26;;;;;;;;;;;;;;;;;;;;;;;;;34132:27;34099:60;34095:356;;;34202:11;;34192:6;:21;;34184:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;34095:356;;;34310:20;:24;34331:2;34310:24;;;;;;;;;;;;;;;;;;;;;;;;;34306:145;;34392:15;;34375:13;34385:2;34375:9;:13::i;:::-;34366:6;:22;;;;:::i;:::-;:41;;34358:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34306:145;34095:356;33758:693;32783:1683;32750:1727;34489:28;34520:24;34538:4;34520:9;:24::i;:::-;34489:55;;34557:12;34596:16;;34572:20;:40;;:70;;;;;34626:16;;34616:6;:26;;34572:70;34557:85;;34672:7;:35;;;;;34696:11;;;;;;;;;;;34672:35;:61;;;;;34725:8;;;;;;;;;;;34724:9;34672:61;:107;;;;;34750:25;:29;34776:2;34750:29;;;;;;;;;;;;;;;;;;;;;;;;;34672:107;:150;;;;;34797:19;:25;34817:4;34797:25;;;;;;;;;;;;;;;;;;;;;;;;;34796:26;34672:150;:191;;;;;34840:19;:23;34860:2;34840:23;;;;;;;;;;;;;;;;;;;;;;;;;34839:24;34672:191;34655:322;;;34901:4;34890:8;;:15;;;;;;;;;;;;;;;;;;34922:10;:8;:10::i;:::-;34960:5;34949:8;;:16;;;;;;;;;;;;;;;;;;34655:322;34990:25;:31;35016:4;34990:31;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;35025:19;:23;35045:2;35025:23;;;;;;;;;;;;;;;;;;;;;;;;;34990:58;:86;;;;;35052:20;:24;35073:2;35052:24;;;;;;;;;;;;;;;;;;;;;;;;;34990:86;34987:109;;;35092:4;35078:11;;:18;;;;;;;;;;;;;;;;;;34987:109;35111:8;;;;;;;;;;;35110:9;:42;;;;;35123:25;:29;35149:2;35123:29;;;;;;;;;;;;;;;;;;;;;;;;;35110:42;:57;;;;;35156:11;;;;;;;;;;;35110:57;:94;;;;;35190:14;;35171:15;:33;;35110:94;:123;;;;;35208:19;:25;35228:4;35208:25;;;;;;;;;;;;;;;;;;;;;;;;;35110:123;35107:176;;;35249:22;35266:4;35249:16;:22::i;:::-;35107:176;35295:12;35311:8;;;;;;;;;;;35310:9;35295:24;;35420:19;:25;35440:4;35420:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35449:19;:23;35469:2;35449:23;;;;;;;;;;;;;;;;;;;;;;;;;35420:52;35417:99;;;35499:5;35489:15;;35417:99;35528:12;35632:7;35629:817;;;35683:25;:29;35709:2;35683:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;35732:1;35716:13;;:17;35683:50;35679:620;;;35760:34;35790:3;35760:25;35771:13;;35760:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;35753:41;;35861:13;;35842:16;;35835:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35813:18;;:61;;;;;;;:::i;:::-;;;;;;;;35941:13;;35922:16;;35915:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35893:18;;:61;;;;;;;:::i;:::-;;;;;;;;35679:620;;;36015:25;:31;36041:4;36015:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36065:1;36050:12;;:16;36015:51;36012:287;;;36094:33;36123:3;36094:24;36105:12;;36094:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36087:40;;36193:12;;36175:15;;36168:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;36146:18;;:59;;;;;;;:::i;:::-;;;;;;;;36271:12;;36253:15;;36246:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;36224:18;;:59;;;;;;;:::i;:::-;;;;;;;;36012:287;35679:620;36325:1;36318:4;:8;36315:89;;;36346:42;36362:4;36376;36383;36346:15;:42::i;:::-;36315:89;36430:4;36420:14;;;;;:::i;:::-;;;35629:817;36458:33;36474:4;36480:2;36484:6;36458:15;:33::i;:::-;32519:3980;;;;32406:4093;;;;:::o;17389:192::-;17475:7;17508:1;17503;:6;;17511:12;17495:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17535:9;17551:1;17547;:5;;;;:::i;:::-;17535:17;;17572:1;17565:8;;;17389:192;;;;;:::o;16486:181::-;16544:7;16564:9;16580:1;16576;:5;;;;:::i;:::-;16564:17;;16605:1;16600;:6;;16592:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16658:1;16651:8;;;16486:181;;;;:::o;12681:573::-;12839:1;12821:20;;:6;:20;;;12813:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12923:1;12902:23;;:9;:23;;;12894:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12978:47;12999:6;13007:9;13018:6;12978:20;:47::i;:::-;13058:71;13080:6;13058:71;;;;;;;;;;;;;;;;;:9;:17;13068:6;13058:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13038:9;:17;13048:6;13038:17;;;;;;;;;;;;;;;:91;;;;13163:32;13188:6;13163:9;:20;13173:9;13163:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13140:9;:20;13150:9;13140:20;;;;;;;;;;;;;;;:55;;;;13228:9;13211:35;;13220:6;13211:35;;;13239:6;13211:35;;;;;;:::i;:::-;;;;;;;;12681:573;;;:::o;38198:1254::-;38237:23;38263:24;38281:4;38263:9;:24::i;:::-;38237:50;;38298:25;38347:18;;38326;;:39;;;;:::i;:::-;38298:67;;38400:1;38381:15;:20;:46;;;;38426:1;38405:17;:22;38381:46;38378:60;;;38430:7;;;;38378:60;38490:3;38471:16;;:22;;;;:::i;:::-;38453:15;:40;38450:111;;;38546:3;38527:16;;:22;;;;:::i;:::-;38509:40;;38450:111;38573:23;38658:1;38638:17;38617:18;;38599:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;38573:86;;38670:26;38699:36;38719:15;38699;:19;;:36;;;;:::i;:::-;38670:65;;38748:25;38776:21;38748:49;;38810:36;38827:18;38810:16;:36::i;:::-;38859:18;38880:44;38906:17;38880:21;:25;;:44;;;;:::i;:::-;38859:65;;38937:23;38963:57;39002:17;38963:34;38978:18;;38963:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;38937:83;;39031:23;39070:15;39057:10;:28;;;;:::i;:::-;39031:54;;39119:1;39098:18;:22;;;;39152:1;39131:18;:22;;;;39187:1;39169:15;:19;:42;;;;;39210:1;39192:15;:19;39169:42;39166:210;;;39227:46;39240:15;39257;39227:12;:46::i;:::-;39293:71;39308:18;39328:15;39345:18;;39293:71;;;;;;;;:::i;:::-;;;;;;;;39166:210;39396:15;;;;;;;;;;;39388:33;;:56;39422:21;39388:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38226:1226;;;;;;;;38198:1254;:::o;39460:461::-;39535:15;39518:14;:32;;;;39561:20;39584:61;39637:7;39584:48;39618:13;;39584:4;:14;;;39599:13;;;;;;;;;;;39584:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;:48;;;;:::i;:::-;:52;;:61;;;;:::i;:::-;39561:84;;39677:1;39662:12;:16;39658:142;;;39698:23;:27;39722:2;39698:27;;;;;;;;;;;;;;;;;;;;;;;;;39694:94;;;39727:61;39743:13;;;;;;;;;;;39766:6;39775:12;39727:15;:61::i;:::-;39694:94;39658:142;39812:19;39849:13;;;;;;;;;;;39812:51;;39874:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39901:12;;;;;;;;;;39507:414;;39460:461;:::o;17840:471::-;17898:7;18148:1;18143;:6;18139:47;;18173:1;18166:8;;;;18139:47;18198:9;18214:1;18210;:5;;;;:::i;:::-;18198:17;;18243:1;18238;18234;:5;;;;:::i;:::-;:10;18226:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18302:1;18295:8;;;17840:471;;;;;:::o;18787:132::-;18845:7;18872:39;18876:1;18879;18872:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18865:46;;18787:132;;;;:::o;16091:125::-;;;;:::o;16950:136::-;17008:7;17035:43;17039:1;17042;17035:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17028:50;;16950:136;;;;:::o;36507:505::-;36573:21;36611:1;36597:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36573:40;;36642:4;36624;36629:1;36624:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36668:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36658:4;36663:1;36658:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36703:62;36720:4;36735:15;36753:11;36703:8;:62::i;:::-;36778:15;:66;;;36859:11;36885:1;36929:4;36956;36976:15;36778:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36562:450;36507:505;:::o;37770:420::-;37851:62;37868:4;37883:15;37901:11;37851:8;:62::i;:::-;37926:15;:31;;;37965:9;37998:4;38018:11;38044:1;38087;27668:42;38156:15;37926:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37770:420;;:::o;19415:278::-;19501:7;19533:1;19529;:5;19536:12;19521:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19560:9;19576:1;19572;:5;;;;:::i;:::-;19560:17;;19684:1;19677:8;;;19415:278;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:329::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6183:329;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:::-;7801:6;7809;7858:2;7846:9;7837:7;7833:23;7829:32;7826:119;;;7864:79;;:::i;:::-;7826:119;7984:1;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7955:117;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7733:474;;;;;:::o;8213:182::-;8353:34;8349:1;8341:6;8337:14;8330:58;8213:182;:::o;8401:366::-;8543:3;8564:67;8628:2;8623:3;8564:67;:::i;:::-;8557:74;;8640:93;8729:3;8640:93;:::i;:::-;8758:2;8753:3;8749:12;8742:19;;8401:366;;;:::o;8773:419::-;8939:4;8977:2;8966:9;8962:18;8954:26;;9026:9;9020:4;9016:20;9012:1;9001:9;8997:17;8990:47;9054:131;9180:4;9054:131;:::i;:::-;9046:139;;8773:419;;;:::o;9198:143::-;9255:5;9286:6;9280:13;9271:22;;9302:33;9329:5;9302:33;:::i;:::-;9198:143;;;;:::o;9347:351::-;9417:6;9466:2;9454:9;9445:7;9441:23;9437:32;9434:119;;;9472:79;;:::i;:::-;9434:119;9592:1;9617:64;9673:7;9664:6;9653:9;9649:22;9617:64;:::i;:::-;9607:74;;9563:128;9347:351;;;;:::o;9704:332::-;9825:4;9863:2;9852:9;9848:18;9840:26;;9876:71;9944:1;9933:9;9929:17;9920:6;9876:71;:::i;:::-;9957:72;10025:2;10014:9;10010:18;10001:6;9957:72;:::i;:::-;9704:332;;;;;:::o;10042:85::-;10087:7;10116:5;10105:16;;10042:85;;;:::o;10133:158::-;10191:9;10224:61;10242:42;10251:32;10277:5;10251:32;:::i;:::-;10242:42;:::i;:::-;10224:61;:::i;:::-;10211:74;;10133:158;;;:::o;10297:147::-;10392:45;10431:5;10392:45;:::i;:::-;10387:3;10380:58;10297:147;;:::o;10450:807::-;10699:4;10737:3;10726:9;10722:19;10714:27;;10751:71;10819:1;10808:9;10804:17;10795:6;10751:71;:::i;:::-;10832:72;10900:2;10889:9;10885:18;10876:6;10832:72;:::i;:::-;10914:80;10990:2;10979:9;10975:18;10966:6;10914:80;:::i;:::-;11004;11080:2;11069:9;11065:18;11056:6;11004:80;:::i;:::-;11094:73;11162:3;11151:9;11147:19;11138:6;11094:73;:::i;:::-;11177;11245:3;11234:9;11230:19;11221:6;11177:73;:::i;:::-;10450:807;;;;;;;;;:::o;11263:143::-;11320:5;11351:6;11345:13;11336:22;;11367:33;11394:5;11367:33;:::i;:::-;11263:143;;;;:::o;11412:663::-;11500:6;11508;11516;11565:2;11553:9;11544:7;11540:23;11536:32;11533:119;;;11571:79;;:::i;:::-;11533:119;11691:1;11716:64;11772:7;11763:6;11752:9;11748:22;11716:64;:::i;:::-;11706:74;;11662:128;11829:2;11855:64;11911:7;11902:6;11891:9;11887:22;11855:64;:::i;:::-;11845:74;;11800:129;11968:2;11994:64;12050:7;12041:6;12030:9;12026:22;11994:64;:::i;:::-;11984:74;;11939:129;11412:663;;;;;:::o;12081:180::-;12129:77;12126:1;12119:88;12226:4;12223:1;12216:15;12250:4;12247:1;12240:15;12267:320;12311:6;12348:1;12342:4;12338:12;12328:22;;12395:1;12389:4;12385:12;12416:18;12406:81;;12472:4;12464:6;12460:17;12450:27;;12406:81;12534:2;12526:6;12523:14;12503:18;12500:38;12497:84;;12553:18;;:::i;:::-;12497:84;12318:269;12267:320;;;:::o;12593:167::-;12733:19;12729:1;12721:6;12717:14;12710:43;12593:167;:::o;12766:366::-;12908:3;12929:67;12993:2;12988:3;12929:67;:::i;:::-;12922:74;;13005:93;13094:3;13005:93;:::i;:::-;13123:2;13118:3;13114:12;13107:19;;12766:366;;;:::o;13138:419::-;13304:4;13342:2;13331:9;13327:18;13319:26;;13391:9;13385:4;13381:20;13377:1;13366:9;13362:17;13355:47;13419:131;13545:4;13419:131;:::i;:::-;13411:139;;13138:419;;;:::o;13563:225::-;13703:34;13699:1;13691:6;13687:14;13680:58;13772:8;13767:2;13759:6;13755:15;13748:33;13563:225;:::o;13794:366::-;13936:3;13957:67;14021:2;14016:3;13957:67;:::i;:::-;13950:74;;14033:93;14122:3;14033:93;:::i;:::-;14151:2;14146:3;14142:12;14135:19;;13794:366;;;:::o;14166:419::-;14332:4;14370:2;14359:9;14355:18;14347:26;;14419:9;14413:4;14409:20;14405:1;14394:9;14390:17;14383:47;14447:131;14573:4;14447:131;:::i;:::-;14439:139;;14166:419;;;:::o;14591:223::-;14731:34;14727:1;14719:6;14715:14;14708:58;14800:6;14795:2;14787:6;14783:15;14776:31;14591:223;:::o;14820:366::-;14962:3;14983:67;15047:2;15042:3;14983:67;:::i;:::-;14976:74;;15059:93;15148:3;15059:93;:::i;:::-;15177:2;15172:3;15168:12;15161:19;;14820:366;;;:::o;15192:419::-;15358:4;15396:2;15385:9;15381:18;15373:26;;15445:9;15439:4;15435:20;15431:1;15420:9;15416:17;15409:47;15473:131;15599:4;15473:131;:::i;:::-;15465:139;;15192:419;;;:::o;15617:221::-;15757:34;15753:1;15745:6;15741:14;15734:58;15826:4;15821:2;15813:6;15809:15;15802:29;15617:221;:::o;15844:366::-;15986:3;16007:67;16071:2;16066:3;16007:67;:::i;:::-;16000:74;;16083:93;16172:3;16083:93;:::i;:::-;16201:2;16196:3;16192:12;16185:19;;15844:366;;;:::o;16216:419::-;16382:4;16420:2;16409:9;16405:18;16397:26;;16469:9;16463:4;16459:20;16455:1;16444:9;16440:17;16433:47;16497:131;16623:4;16497:131;:::i;:::-;16489:139;;16216:419;;;:::o;16641:167::-;16781:19;16777:1;16769:6;16765:14;16758:43;16641:167;:::o;16814:366::-;16956:3;16977:67;17041:2;17036:3;16977:67;:::i;:::-;16970:74;;17053:93;17142:3;17053:93;:::i;:::-;17171:2;17166:3;17162:12;17155:19;;16814:366;;;:::o;17186:419::-;17352:4;17390:2;17379:9;17375:18;17367:26;;17439:9;17433:4;17429:20;17425:1;17414:9;17410:17;17403:47;17467:131;17593:4;17467:131;:::i;:::-;17459:139;;17186:419;;;:::o;17611:165::-;17751:17;17747:1;17739:6;17735:14;17728:41;17611:165;:::o;17782:366::-;17924:3;17945:67;18009:2;18004:3;17945:67;:::i;:::-;17938:74;;18021:93;18110:3;18021:93;:::i;:::-;18139:2;18134:3;18130:12;18123:19;;17782:366;;;:::o;18154:419::-;18320:4;18358:2;18347:9;18343:18;18335:26;;18407:9;18401:4;18397:20;18393:1;18382:9;18378:17;18371:47;18435:131;18561:4;18435:131;:::i;:::-;18427:139;;18154:419;;;:::o;18579:172::-;18719:24;18715:1;18707:6;18703:14;18696:48;18579:172;:::o;18757:366::-;18899:3;18920:67;18984:2;18979:3;18920:67;:::i;:::-;18913:74;;18996:93;19085:3;18996:93;:::i;:::-;19114:2;19109:3;19105:12;19098:19;;18757:366;;;:::o;19129:419::-;19295:4;19333:2;19322:9;19318:18;19310:26;;19382:9;19376:4;19372:20;19368:1;19357:9;19353:17;19346:47;19410:131;19536:4;19410:131;:::i;:::-;19402:139;;19129:419;;;:::o;19554:297::-;19694:34;19690:1;19682:6;19678:14;19671:58;19763:34;19758:2;19750:6;19746:15;19739:59;19832:11;19827:2;19819:6;19815:15;19808:36;19554:297;:::o;19857:366::-;19999:3;20020:67;20084:2;20079:3;20020:67;:::i;:::-;20013:74;;20096:93;20185:3;20096:93;:::i;:::-;20214:2;20209:3;20205:12;20198:19;;19857:366;;;:::o;20229:419::-;20395:4;20433:2;20422:9;20418:18;20410:26;;20482:9;20476:4;20472:20;20468:1;20457:9;20453:17;20446:47;20510:131;20636:4;20510:131;:::i;:::-;20502:139;;20229:419;;;:::o;20654:231::-;20794:34;20790:1;20782:6;20778:14;20771:58;20863:14;20858:2;20850:6;20846:15;20839:39;20654:231;:::o;20891:366::-;21033:3;21054:67;21118:2;21113:3;21054:67;:::i;:::-;21047:74;;21130:93;21219:3;21130:93;:::i;:::-;21248:2;21243:3;21239:12;21232:19;;20891:366;;;:::o;21263:419::-;21429:4;21467:2;21456:9;21452:18;21444:26;;21516:9;21510:4;21506:20;21502:1;21491:9;21487:17;21480:47;21544:131;21670:4;21544:131;:::i;:::-;21536:139;;21263:419;;;:::o;21688:180::-;21736:77;21733:1;21726:88;21833:4;21830:1;21823:15;21857:4;21854:1;21847:15;21874:191;21914:3;21933:20;21951:1;21933:20;:::i;:::-;21928:25;;21967:20;21985:1;21967:20;:::i;:::-;21962:25;;22010:1;22007;22003:9;21996:16;;22031:3;22028:1;22025:10;22022:36;;;22038:18;;:::i;:::-;22022:36;21874:191;;;;:::o;22071:169::-;22211:21;22207:1;22199:6;22195:14;22188:45;22071:169;:::o;22246:366::-;22388:3;22409:67;22473:2;22468:3;22409:67;:::i;:::-;22402:74;;22485:93;22574:3;22485:93;:::i;:::-;22603:2;22598:3;22594:12;22587:19;;22246:366;;;:::o;22618:419::-;22784:4;22822:2;22811:9;22807:18;22799:26;;22871:9;22865:4;22861:20;22857:1;22846:9;22842:17;22835:47;22899:131;23025:4;22899:131;:::i;:::-;22891:139;;22618:419;;;:::o;23043:232::-;23183:34;23179:1;23171:6;23167:14;23160:58;23252:15;23247:2;23239:6;23235:15;23228:40;23043:232;:::o;23281:366::-;23423:3;23444:67;23508:2;23503:3;23444:67;:::i;:::-;23437:74;;23520:93;23609:3;23520:93;:::i;:::-;23638:2;23633:3;23629:12;23622:19;;23281:366;;;:::o;23653:419::-;23819:4;23857:2;23846:9;23842:18;23834:26;;23906:9;23900:4;23896:20;23892:1;23881:9;23877:17;23870:47;23934:131;24060:4;23934:131;:::i;:::-;23926:139;;23653:419;;;:::o;24078:410::-;24118:7;24141:20;24159:1;24141:20;:::i;:::-;24136:25;;24175:20;24193:1;24175:20;:::i;:::-;24170:25;;24230:1;24227;24223:9;24252:30;24270:11;24252:30;:::i;:::-;24241:41;;24431:1;24422:7;24418:15;24415:1;24412:22;24392:1;24385:9;24365:83;24342:139;;24461:18;;:::i;:::-;24342:139;24126:362;24078:410;;;;:::o;24494:180::-;24542:77;24539:1;24532:88;24639:4;24636:1;24629:15;24663:4;24660:1;24653:15;24680:185;24720:1;24737:20;24755:1;24737:20;:::i;:::-;24732:25;;24771:20;24789:1;24771:20;:::i;:::-;24766:25;;24810:1;24800:35;;24815:18;;:::i;:::-;24800:35;24857:1;24854;24850:9;24845:14;;24680:185;;;;:::o;24871:194::-;24911:4;24931:20;24949:1;24931:20;:::i;:::-;24926:25;;24965:20;24983:1;24965:20;:::i;:::-;24960:25;;25009:1;25006;25002:9;24994:17;;25033:1;25027:4;25024:11;25021:37;;;25038:18;;:::i;:::-;25021:37;24871:194;;;;:::o;25071:177::-;25211:29;25207:1;25199:6;25195:14;25188:53;25071:177;:::o;25254:366::-;25396:3;25417:67;25481:2;25476:3;25417:67;:::i;:::-;25410:74;;25493:93;25582:3;25493:93;:::i;:::-;25611:2;25606:3;25602:12;25595:19;;25254:366;;;:::o;25626:419::-;25792:4;25830:2;25819:9;25815:18;25807:26;;25879:9;25873:4;25869:20;25865:1;25854:9;25850:17;25843:47;25907:131;26033:4;25907:131;:::i;:::-;25899:139;;25626:419;;;:::o;26051:224::-;26191:34;26187:1;26179:6;26175:14;26168:58;26260:7;26255:2;26247:6;26243:15;26236:32;26051:224;:::o;26281:366::-;26423:3;26444:67;26508:2;26503:3;26444:67;:::i;:::-;26437:74;;26520:93;26609:3;26520:93;:::i;:::-;26638:2;26633:3;26629:12;26622:19;;26281:366;;;:::o;26653:419::-;26819:4;26857:2;26846:9;26842:18;26834:26;;26906:9;26900:4;26896:20;26892:1;26881:9;26877:17;26870:47;26934:131;27060:4;26934:131;:::i;:::-;26926:139;;26653:419;;;:::o;27078:222::-;27218:34;27214:1;27206:6;27202:14;27195:58;27287:5;27282:2;27274:6;27270:15;27263:30;27078:222;:::o;27306:366::-;27448:3;27469:67;27533:2;27528:3;27469:67;:::i;:::-;27462:74;;27545:93;27634:3;27545:93;:::i;:::-;27663:2;27658:3;27654:12;27647:19;;27306:366;;;:::o;27678:419::-;27844:4;27882:2;27871:9;27867:18;27859:26;;27931:9;27925:4;27921:20;27917:1;27906:9;27902:17;27895:47;27959:131;28085:4;27959:131;:::i;:::-;27951:139;;27678:419;;;:::o;28103:442::-;28252:4;28290:2;28279:9;28275:18;28267:26;;28303:71;28371:1;28360:9;28356:17;28347:6;28303:71;:::i;:::-;28384:72;28452:2;28441:9;28437:18;28428:6;28384:72;:::i;:::-;28466;28534:2;28523:9;28519:18;28510:6;28466:72;:::i;:::-;28103:442;;;;;;:::o;28551:351::-;28621:6;28670:2;28658:9;28649:7;28645:23;28641:32;28638:119;;;28676:79;;:::i;:::-;28638:119;28796:1;28821:64;28877:7;28868:6;28857:9;28853:22;28821:64;:::i;:::-;28811:74;;28767:128;28551:351;;;;:::o;28908:220::-;29048:34;29044:1;29036:6;29032:14;29025:58;29117:3;29112:2;29104:6;29100:15;29093:28;28908:220;:::o;29134:366::-;29276:3;29297:67;29361:2;29356:3;29297:67;:::i;:::-;29290:74;;29373:93;29462:3;29373:93;:::i;:::-;29491:2;29486:3;29482:12;29475:19;;29134:366;;;:::o;29506:419::-;29672:4;29710:2;29699:9;29695:18;29687:26;;29759:9;29753:4;29749:20;29745:1;29734:9;29730:17;29723:47;29787:131;29913:4;29787:131;:::i;:::-;29779:139;;29506:419;;;:::o;29931:180::-;29979:77;29976:1;29969:88;30076:4;30073:1;30066:15;30100:4;30097:1;30090:15;30117:180;30165:77;30162:1;30155:88;30262:4;30259:1;30252:15;30286:4;30283:1;30276:15;30303:114;30370:6;30404:5;30398:12;30388:22;;30303:114;;;:::o;30423:184::-;30522:11;30556:6;30551:3;30544:19;30596:4;30591:3;30587:14;30572:29;;30423:184;;;;:::o;30613:132::-;30680:4;30703:3;30695:11;;30733:4;30728:3;30724:14;30716:22;;30613:132;;;:::o;30751:108::-;30828:24;30846:5;30828:24;:::i;:::-;30823:3;30816:37;30751:108;;:::o;30865:179::-;30934:10;30955:46;30997:3;30989:6;30955:46;:::i;:::-;31033:4;31028:3;31024:14;31010:28;;30865:179;;;;:::o;31050:113::-;31120:4;31152;31147:3;31143:14;31135:22;;31050:113;;;:::o;31199:732::-;31318:3;31347:54;31395:5;31347:54;:::i;:::-;31417:86;31496:6;31491:3;31417:86;:::i;:::-;31410:93;;31527:56;31577:5;31527:56;:::i;:::-;31606:7;31637:1;31622:284;31647:6;31644:1;31641:13;31622:284;;;31723:6;31717:13;31750:63;31809:3;31794:13;31750:63;:::i;:::-;31743:70;;31836:60;31889:6;31836:60;:::i;:::-;31826:70;;31682:224;31669:1;31666;31662:9;31657:14;;31622:284;;;31626:14;31922:3;31915:10;;31323:608;;;31199:732;;;;:::o;31937:831::-;32200:4;32238:3;32227:9;32223:19;32215:27;;32252:71;32320:1;32309:9;32305:17;32296:6;32252:71;:::i;:::-;32333:80;32409:2;32398:9;32394:18;32385:6;32333:80;:::i;:::-;32460:9;32454:4;32450:20;32445:2;32434:9;32430:18;32423:48;32488:108;32591:4;32582:6;32488:108;:::i;:::-;32480:116;;32606:72;32674:2;32663:9;32659:18;32650:6;32606:72;:::i;:::-;32688:73;32756:3;32745:9;32741:19;32732:6;32688:73;:::i;:::-;31937:831;;;;;;;;:::o

Swarm Source

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