ETH Price: $3,443.39 (+1.53%)
Gas: 4 Gwei

Token

Betted (BETS)
 

Overview

Max Total Supply

987,390,792.186057951247430681 BETS

Holders

318

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
140,572.492230467188270949 BETS

Value
$0.00
0xcd080df823f1a9b5513cff7df93da55e49d4d3e2
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:
Betted

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + 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) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: BETS.sol



pragma solidity ^0.8.9;

error InvalidTransfer(address from, address to);
error InvalidConfiguration();

contract Betted is ERC20, Ownable {

    mapping (address => bool) public _isExcludedFromFees;
    mapping (address => bool) public _isBlacklisted;
    mapping (address => bool) public _isExcludedFromBlacklist;
    mapping (address => uint256) public _holderLastTxBlock;
    mapping (address => bool) public _isAMM;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    address public marketingWallet;
    address public treasuryWallet;

    bool public swapping;
    bool public swapEnabled = true;
    bool public feesEnabled = true;

    uint256 public burnBuyFee = 100;
    uint256 public treasuryBuyFee = 100;
    uint256 public marketingBuyFee = 300;
    uint256 public totalBuyFees = 500;

    uint256 public burnSellFee = 100;
    uint256 public treasurySellFee = 100;
    uint256 public marketingSellFee = 300;
    uint256 public totalSellFees = 500;

    uint256 public treasuryTokens;
    uint256 public marketingTokens;

    uint256 public swapTokensAtAmount = 500_000 * 10**18; //0.05% of total supply

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);
    event FeesEnabledUpdated(bool enabled);

    constructor(address _marketingWallet, address _treasuryWallet) ERC20("Betted", "BETS") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

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

        _isAMM[uniswapV2Pair] = true;

        marketingWallet = payable(_marketingWallet);
        treasuryWallet = payable(_treasuryWallet);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedFromBlacklist[owner()] = true;
        _isExcludedFromBlacklist[uniswapV2Pair] = true;
        _isExcludedFromBlacklist[marketingWallet] = true;
        _isExcludedFromBlacklist[treasuryWallet] = true;
        _isExcludedFromBlacklist[address(0)] = true;
        _isExcludedFromBlacklist[address(this)] = true;

        _mint(owner(), 10**9 * 10**18);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (_isAMM[from] && _isBlacklisted[tx.origin]) {
            revert InvalidTransfer(from, to); // Blacklisted addresses are prevented from buying; can always sell.
        }

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

        if (!swapping) {

            if (_isAMM[from] || _isAMM[to]) {
                if (!_isExcludedFromBlacklist[tx.origin] && _holderLastTxBlock[tx.origin] == block.number) {
                    _isBlacklisted[tx.origin] = true;
                }
                _holderLastTxBlock[tx.origin] = block.number;
            }

            if (!_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {

                bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;

                if (
                    canSwap &&
                    swapEnabled &&
                    !_isAMM[from]
                    
                ) {
                    swapping = true;
                    _swapAndSend(swapTokensAtAmount);
                    swapping = false;
                }

                if (feesEnabled) {
                    uint256 fees;
                    uint256 burnTokens;
                    if (_isAMM[to] && totalSellFees != 0) { //sell
                        fees = amount * totalSellFees / 10000;
                        burnTokens += fees * burnSellFee / totalSellFees;
                        treasuryTokens += fees * treasurySellFee / totalSellFees;
                        marketingTokens += fees * marketingSellFee / totalSellFees;
                    } else if (_isAMM[from] && totalBuyFees != 0) { //buy
                        fees = amount * totalBuyFees / 10000;
                        burnTokens += fees * burnBuyFee / totalBuyFees;
                        treasuryTokens += fees * treasuryBuyFee / totalBuyFees;
                        marketingTokens += fees * marketingBuyFee / totalBuyFees;
                    }
                    if (fees > 0) {
                        amount -= fees;
                        super._transfer(from, address(this), fees);
                        super._burn(address(this), burnTokens);
                    }

                }

            }

        }

        super._transfer(from, to, amount);

    }

    function _swapAndSend(uint256 amountToSwap) internal {
        uint256 total = treasuryTokens + marketingTokens;
        uint256 treasuryToSwap = amountToSwap * treasuryTokens / total;
        uint256 marToSwap = amountToSwap * marketingTokens / total;

        uint256 tokenAmount = treasuryToSwap + marToSwap;

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

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uint256 ethBalance = address(this).balance;
        uint256 marketing = ethBalance * marToSwap / tokenAmount;
        uint256 treasury = ethBalance - marketing;

        bool success;
        (success, ) = address(marketingWallet).call{value: marketing}("");
        (success, ) = address(treasuryWallet).call{value: treasury}("");

        marketingTokens -= marToSwap;
        treasuryTokens -= treasuryToSwap;
    }

    function removeFromBlacklist(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }

    function setExcludedFromFees(address account, bool value) public onlyOwner {
        _isExcludedFromFees[account] = value;
    }

    function setExcludedFromBlacklist(address account) public onlyOwner {
        _isExcludedFromBlacklist[account] = true;
    }

    function excludeManyFromFees(address[] memory accounts) public onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isExcludedFromFees[accounts[i]] = true;
        }
    }

    function setSellFees(uint256 burn, uint256 treasury, uint256 marketing) external onlyOwner {
        if (burn > burnSellFee || treasury > treasurySellFee || marketing > marketingSellFee) {
            revert InvalidConfiguration();
        }
        burnSellFee = burn;
        treasurySellFee = treasury;
        marketingSellFee = marketing;
        totalSellFees = burn + treasury + marketing;
    }

    function setBuyFees(uint256 burn, uint256 treasury, uint256 marketing) external onlyOwner {
        if (burn > burnBuyFee || treasury > treasuryBuyFee || marketing > marketingBuyFee) {
            revert InvalidConfiguration();
        }
        burnBuyFee = burn;
        treasuryBuyFee = treasury;
        marketingBuyFee = marketing;
        totalBuyFees = burn + treasury + marketing;
    }

    function airdrop(address[] memory _user, uint256[] memory _amount) external onlyOwner {
        uint256 len = _user.length;
        if (len != _amount.length) {
            revert InvalidConfiguration();
        }
        for (uint256 i = 0; i < len; i++) {
            super._transfer(_msgSender(), _user[i], _amount[i]);
        }
    }

    function setSwapAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount;
        emit MinTokensBeforeSwapUpdated(amount);
    }

    function setSwapEnabled(bool _enabled) public onlyOwner {
        swapEnabled = _enabled;
        emit SwapEnabledUpdated(_enabled);
    }

    function setFeesEnabled(bool _enabled) public onlyOwner {
        feesEnabled = _enabled;
        emit FeesEnabledUpdated(_enabled);
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateTreasuryWallet(address newWallet) external onlyOwner {
        treasuryWallet = newWallet;
    }

    function manualSwap() external onlyOwner {
        uint256 amountToSwap = balanceOf(address(this)) >= swapTokensAtAmount ? swapTokensAtAmount : balanceOf(address(this));
        swapping = true;
        _swapAndSend(amountToSwap);
        swapping = false;
    }

    function burn(uint256 amount) external {
        super._burn(msg.sender, amount);
    }

    function transferOwnership(address newOwner) public override onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _isExcludedFromBlacklist[owner()] = false;
        _isExcludedFromFees[owner()] = false;
        _isExcludedFromBlacklist[newOwner] = true;
        _isExcludedFromFees[newOwner] = true;
        _transferOwnership(newOwner);
    }

    function setAMM(address pair, bool value) public onlyOwner {
        if (pair == uniswapV2Pair) {
            revert InvalidConfiguration();
        }
        _isAMM[pair] = value;
    }

    receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_treasuryWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"InvalidTransfer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"FeesEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holderLastTxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeManyFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setExcludedFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"treasuryBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasurySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60156101000a81548160ff0219169083151502179055506001600c60166101000a81548160ff0219169083151502179055506064600d556064600e5561012c600f556101f46010556064601155606460125561012c6013556101f46014556969e10de76676d080000060175534801562000080575f80fd5b5060405162005445380380620054458339818101604052810190620000a6919062000a74565b6040518060400160405280600681526020017f42657474656400000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4245545300000000000000000000000000000000000000000000000000000000815250816003908162000123919062000d1d565b50806004908162000135919062000d1d565b505050620001586200014c620007a360201b60201c565b620007aa60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000214919062000e01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a0919062000e01565b6040518363ffffffff1660e01b8152600401620002bf92919062000e42565b6020604051808303815f875af1158015620002dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000302919062000e01565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600a5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f620004216200086d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f620005316200086d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200079a620007816200086d60201b60201c565b6b033b2e3c9fd0803ce80000006200089560201b60201c565b50505062000f7e565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000906576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008fd9062000ecb565b60405180910390fd5b620009195f838362000a0560201b60201c565b8060025f8282546200092c919062000f18565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000980919062000f18565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009e6919062000f63565b60405180910390a362000a015f838362000a0a60201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000a3e8262000a13565b9050919050565b62000a508162000a32565b811462000a5b575f80fd5b50565b5f8151905062000a6e8162000a45565b92915050565b5f806040838503121562000a8d5762000a8c62000a0f565b5b5f62000a9c8582860162000a5e565b925050602062000aaf8582860162000a5e565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b3557607f821691505b60208210810362000b4b5762000b4a62000af0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000baf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b72565b62000bbb868362000b72565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c0562000bff62000bf98462000bd3565b62000bdc565b62000bd3565b9050919050565b5f819050919050565b62000c208362000be5565b62000c3862000c2f8262000c0c565b84845462000b7e565b825550505050565b5f90565b62000c4e62000c40565b62000c5b81848462000c15565b505050565b5b8181101562000c825762000c765f8262000c44565b60018101905062000c61565b5050565b601f82111562000cd15762000c9b8162000b51565b62000ca68462000b63565b8101602085101562000cb6578190505b62000cce62000cc58562000b63565b83018262000c60565b50505b505050565b5f82821c905092915050565b5f62000cf35f198460080262000cd6565b1980831691505092915050565b5f62000d0d838362000ce2565b9150826002028217905092915050565b62000d288262000ab9565b67ffffffffffffffff81111562000d445762000d4362000ac3565b5b62000d50825462000b1d565b62000d5d82828562000c86565b5f60209050601f83116001811462000d93575f841562000d7e578287015190505b62000d8a858262000d00565b86555062000df9565b601f19841662000da38662000b51565b5f5b8281101562000dcc5784890151825560018201915060208501945060208101905062000da5565b8683101562000dec578489015162000de8601f89168262000ce2565b8355505b6001600288020188555050505b505050505050565b5f6020828403121562000e195762000e1862000a0f565b5b5f62000e288482850162000a5e565b91505092915050565b62000e3c8162000a32565b82525050565b5f60408201905062000e575f83018562000e31565b62000e66602083018462000e31565b9392505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000eb3601f8362000e6d565b915062000ec08262000e7d565b602082019050919050565b5f6020820190508181035f83015262000ee48162000ea5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f248262000bd3565b915062000f318362000bd3565b925082820190508082111562000f4c5762000f4b62000eeb565b5b92915050565b62000f5d8162000bd3565b82525050565b5f60208201905062000f785f83018462000f52565b92915050565b60805160a05161448962000fbc5f395f81816111650152611bfb01525f8181610ee901528181612cbd01528181612d7f0152612e5a01526144895ff3fe608060405260043610610302575f3560e01c8063715018a61161018f578063a9059cbb116100db578063dd62ed3e11610094578063e2f456051161006e578063e2f4560514610b81578063e7f444b314610bab578063ed0d213714610bd5578063f2fde38b14610bff57610309565b8063dd62ed3e14610ae1578063e01af92c14610b1d578063e0bf7fd114610b4557610309565b8063a9059cbb146109c5578063a9d3cd8a14610a01578063aacebbe314610a29578063b9e9370014610a51578063bd967b7614610a7b578063d0a3981414610ab757610309565b80638b27306d1161014857806395d89b411161012257806395d89b411461090d578063a457c2d714610937578063a64e4f8a14610973578063a901dd921461099d57610309565b80638b27306d146108915780638da5cb5b146108bb57806392f36939146108e557610309565b8063715018a61461079957806375f0a874146107af578063792df503146107d95780637ae3ff47146108155780637e7613771461083f578063809d458d1461086957610309565b806342966c681161024e578063590ffdce1161020757806367243482116101e157806367243482146106e157806368078952146107095780636ddd17131461073357806370a082311461075d57610309565b8063590ffdce146106675780635eebef6b1461068f5780636402511e146106b957610309565b806342966c68146105715780634626402b1461059957806349bd5a5e146105c357806351bc3c85146105ed578063537df3b614610603578063576f9a541461062b57610309565b806318160ddd116102bb5780632c10508c116102955780632c10508c146104b9578063313ce567146104e3578063373bf3b11461050d578063395093511461053557610309565b806318160ddd146104175780631cdd3be31461044157806323b872dd1461047d57610309565b806306fdde031461030d578063095ea7b3146103375780630d075d9c146103735780630f683e901461039b5780631694505e146103c35780631732cded146103ed57610309565b3661030957005b5f80fd5b348015610318575f80fd5b50610321610c27565b60405161032e9190613430565b60405180910390f35b348015610342575f80fd5b5061035d600480360381019061035891906134ee565b610cb7565b60405161036a9190613546565b60405180910390f35b34801561037e575f80fd5b506103996004803603810190610394919061355f565b610cd9565b005b3480156103a6575f80fd5b506103c160048036038101906103bc919061355f565b610de0565b005b3480156103ce575f80fd5b506103d7610ee7565b6040516103e4919061360a565b60405180910390f35b3480156103f8575f80fd5b50610401610f0b565b60405161040e9190613546565b60405180910390f35b348015610422575f80fd5b5061042b610f1e565b6040516104389190613632565b60405180910390f35b34801561044c575f80fd5b506104676004803603810190610462919061364b565b610f27565b6040516104749190613546565b60405180910390f35b348015610488575f80fd5b506104a3600480360381019061049e9190613676565b610f44565b6040516104b09190613546565b60405180910390f35b3480156104c4575f80fd5b506104cd610f72565b6040516104da9190613632565b60405180910390f35b3480156104ee575f80fd5b506104f7610f78565b60405161050491906136e1565b60405180910390f35b348015610518575f80fd5b50610533600480360381019061052e919061383a565b610f80565b005b348015610540575f80fd5b5061055b600480360381019061055691906134ee565b61108c565b6040516105689190613546565b60405180910390f35b34801561057c575f80fd5b5061059760048036038101906105929190613881565b611131565b005b3480156105a4575f80fd5b506105ad61113e565b6040516105ba91906138bb565b60405180910390f35b3480156105ce575f80fd5b506105d7611163565b6040516105e491906138bb565b60405180910390f35b3480156105f8575f80fd5b50610601611187565b005b34801561060e575f80fd5b506106296004803603810190610624919061364b565b61126b565b005b348015610636575f80fd5b50610651600480360381019061064c919061364b565b61133e565b60405161065e9190613546565b60405180910390f35b348015610672575f80fd5b5061068d600480360381019061068891906138fe565b61135b565b005b34801561069a575f80fd5b506106a361142f565b6040516106b09190613632565b60405180910390f35b3480156106c4575f80fd5b506106df60048036038101906106da9190613881565b611435565b005b3480156106ec575f80fd5b50610707600480360381019061070291906139fc565b6114f2565b005b348015610714575f80fd5b5061071d611610565b60405161072a9190613632565b60405180910390f35b34801561073e575f80fd5b50610747611616565b6040516107549190613546565b60405180910390f35b348015610768575f80fd5b50610783600480360381019061077e919061364b565b611629565b6040516107909190613632565b60405180910390f35b3480156107a4575f80fd5b506107ad61166e565b005b3480156107ba575f80fd5b506107c36116f5565b6040516107d091906138bb565b60405180910390f35b3480156107e4575f80fd5b506107ff60048036038101906107fa919061364b565b61171a565b60405161080c9190613546565b60405180910390f35b348015610820575f80fd5b50610829611737565b6040516108369190613632565b60405180910390f35b34801561084a575f80fd5b5061085361173d565b6040516108609190613632565b60405180910390f35b348015610874575f80fd5b5061088f600480360381019061088a919061364b565b611743565b005b34801561089c575f80fd5b506108a5611802565b6040516108b29190613632565b60405180910390f35b3480156108c6575f80fd5b506108cf611808565b6040516108dc91906138bb565b60405180910390f35b3480156108f0575f80fd5b5061090b6004803603810190610906919061364b565b611830565b005b348015610918575f80fd5b50610921611904565b60405161092e9190613430565b60405180910390f35b348015610942575f80fd5b5061095d600480360381019061095891906134ee565b611994565b60405161096a9190613546565b60405180910390f35b34801561097e575f80fd5b50610987611a78565b6040516109949190613546565b60405180910390f35b3480156109a8575f80fd5b506109c360048036038101906109be9190613a72565b611a8b565b005b3480156109d0575f80fd5b506109eb60048036038101906109e691906134ee565b611b5b565b6040516109f89190613546565b60405180910390f35b348015610a0c575f80fd5b50610a276004803603810190610a2291906138fe565b611b7d565b005b348015610a34575f80fd5b50610a4f6004803603810190610a4a919061364b565b611cd6565b005b348015610a5c575f80fd5b50610a65611d95565b604051610a729190613632565b60405180910390f35b348015610a86575f80fd5b50610aa16004803603810190610a9c919061364b565b611d9b565b604051610aae9190613632565b60405180910390f35b348015610ac2575f80fd5b50610acb611db0565b604051610ad89190613632565b60405180910390f35b348015610aec575f80fd5b50610b076004803603810190610b029190613a9d565b611db6565b604051610b149190613632565b60405180910390f35b348015610b28575f80fd5b50610b436004803603810190610b3e9190613a72565b611e38565b005b348015610b50575f80fd5b50610b6b6004803603810190610b66919061364b565b611f08565b604051610b789190613546565b60405180910390f35b348015610b8c575f80fd5b50610b95611f25565b604051610ba29190613632565b60405180910390f35b348015610bb6575f80fd5b50610bbf611f2b565b604051610bcc9190613632565b60405180910390f35b348015610be0575f80fd5b50610be9611f31565b604051610bf69190613632565b60405180910390f35b348015610c0a575f80fd5b50610c256004803603810190610c20919061364b565b611f37565b005b606060038054610c3690613b08565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6290613b08565b8015610cad5780601f10610c8457610100808354040283529160200191610cad565b820191905f5260205f20905b815481529060010190602001808311610c9057829003601f168201915b5050505050905090565b5f80610cc161218d565b9050610cce818585612194565b600191505092915050565b610ce161218d565b73ffffffffffffffffffffffffffffffffffffffff16610cff611808565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613b82565b60405180910390fd5b600d54831180610d665750600e5482115b80610d725750600f5481115b15610da9576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600d8190555081600e8190555080600f81905550808284610dcb9190613bcd565b610dd59190613bcd565b601081905550505050565b610de861218d565b73ffffffffffffffffffffffffffffffffffffffff16610e06611808565b73ffffffffffffffffffffffffffffffffffffffff1614610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613b82565b60405180910390fd5b601154831180610e6d575060125482115b80610e79575060135481115b15610eb0576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826011819055508160128190555080601381905550808284610ed29190613bcd565b610edc9190613bcd565b601481905550505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60149054906101000a900460ff1681565b5f600254905090565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f80610f4e61218d565b9050610f5b858285612357565b610f668585856123e2565b60019150509392505050565b600e5481565b5f6012905090565b610f8861218d565b73ffffffffffffffffffffffffffffffffffffffff16610fa6611808565b73ffffffffffffffffffffffffffffffffffffffff1614610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390613b82565b60405180910390fd5b5f815190505f5b8181101561108757600160065f85848151811061102357611022613c00565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611003565b505050565b5f8061109661218d565b905061112681858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111219190613bcd565b612194565b600191505092915050565b61113b3382612a91565b50565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61118f61218d565b73ffffffffffffffffffffffffffffffffffffffff166111ad611808565b73ffffffffffffffffffffffffffffffffffffffff1614611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613b82565b60405180910390fd5b5f60175461121030611629565b10156112245761121f30611629565b611228565b6017545b90506001600c60146101000a81548160ff02191690831515021790555061124e81612c5d565b5f600c60146101000a81548160ff02191690831515021790555050565b61127361218d565b73ffffffffffffffffffffffffffffffffffffffff16611291611808565b73ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90613b82565b60405180910390fd5b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b61136361218d565b73ffffffffffffffffffffffffffffffffffffffff16611381611808565b73ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90613b82565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60155481565b61143d61218d565b73ffffffffffffffffffffffffffffffffffffffff1661145b611808565b73ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613b82565b60405180910390fd5b806017819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00816040516114e79190613632565b60405180910390a150565b6114fa61218d565b73ffffffffffffffffffffffffffffffffffffffff16611518611808565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613b82565b60405180910390fd5b5f82519050815181146115ad576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8181101561160a576115fd6115c261218d565b8583815181106115d5576115d4613c00565b5b60200260200101518584815181106115f0576115ef613c00565b5b6020026020010151613064565b80806001019150506115af565b50505050565b600f5481565b600c60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61167661218d565b73ffffffffffffffffffffffffffffffffffffffff16611694611808565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613b82565b60405180910390fd5b6116f35f6132d9565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008602052805f5260405f205f915054906101000a900460ff1681565b600d5481565b60115481565b61174b61218d565b73ffffffffffffffffffffffffffffffffffffffff16611769611808565b73ffffffffffffffffffffffffffffffffffffffff16146117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690613b82565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61183861218d565b73ffffffffffffffffffffffffffffffffffffffff16611856611808565b73ffffffffffffffffffffffffffffffffffffffff16146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613b82565b60405180910390fd5b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60606004805461191390613b08565b80601f016020809104026020016040519081016040528092919081815260200182805461193f90613b08565b801561198a5780601f106119615761010080835404028352916020019161198a565b820191905f5260205f20905b81548152906001019060200180831161196d57829003601f168201915b5050505050905090565b5f8061199e61218d565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690613c9d565b60405180910390fd5b611a6c8286868403612194565b60019250505092915050565b600c60169054906101000a900460ff1681565b611a9361218d565b73ffffffffffffffffffffffffffffffffffffffff16611ab1611808565b73ffffffffffffffffffffffffffffffffffffffff1614611b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afe90613b82565b60405180910390fd5b80600c60166101000a81548160ff0219169083151502179055507fba500994dffbabeeb9e430f03a978d7b975359a20c5bde3a6ccb5a0c454680c881604051611b509190613546565b60405180910390a150565b5f80611b6561218d565b9050611b728185856123e2565b600191505092915050565b611b8561218d565b73ffffffffffffffffffffffffffffffffffffffff16611ba3611808565b73ffffffffffffffffffffffffffffffffffffffff1614611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf090613b82565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c7e576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611cde61218d565b73ffffffffffffffffffffffffffffffffffffffff16611cfc611808565b73ffffffffffffffffffffffffffffffffffffffff1614611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4990613b82565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6009602052805f5260405f205f915090505481565b60145481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611e4061218d565b73ffffffffffffffffffffffffffffffffffffffff16611e5e611808565b73ffffffffffffffffffffffffffffffffffffffff1614611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90613b82565b60405180910390fd5b80600c60156101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1281604051611efd9190613546565b60405180910390a150565b6006602052805f5260405f205f915054906101000a900460ff1681565b60175481565b60135481565b60125481565b611f3f61218d565b73ffffffffffffffffffffffffffffffffffffffff16611f5d611808565b73ffffffffffffffffffffffffffffffffffffffff1614611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90613b82565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890613d2b565b60405180910390fd5b5f60085f61202d611808565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60065f612088611808565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061218a816132d9565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990613db9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790613e47565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161234a9190613632565b60405180910390a3505050565b5f6123628484611db6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123dc57818110156123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c590613eaf565b60405180910390fd5b6123db8484848403612194565b5b50505050565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561247e575060075f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156124c25782826040517f709ac0170000000000000000000000000000000000000000000000000000000081526004016124b9929190613ecd565b60405180910390fd5b5f81036124d9576124d483835f613064565b612a8c565b600c60149054906101000a900460ff16612a8057600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125885750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156126be5760085f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561262057504360095f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054145b1561267b57600160075f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b4360095f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561275c575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a7f575f60175461276e30611629565b1015905080801561278b5750600c60159054906101000a900460ff165b80156127de5750600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612824576001600c60146101000a81548160ff021916908315150217905550612809601754612c5d565b5f600c60146101000a81548160ff0219169083151502179055505b600c60169054906101000a900460ff1615612a7d575f80600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289357505f60145414155b1561294657612710601454856128a99190613ef4565b6128b39190613f62565b9150601454601154836128c69190613ef4565b6128d09190613f62565b816128db9190613bcd565b9050601454601254836128ee9190613ef4565b6128f89190613f62565b60155f8282546129089190613bcd565b92505081905550601454601354836129209190613ef4565b61292a9190613f62565b60165f82825461293a9190613bcd565b92505081905550612a4e565b600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561299e57505f60105414155b15612a4d57612710601054856129b49190613ef4565b6129be9190613f62565b9150601054600d54836129d19190613ef4565b6129db9190613f62565b816129e69190613bcd565b9050601054600e54836129f99190613ef4565b612a039190613f62565b60155f828254612a139190613bcd565b92505081905550601054600f5483612a2b9190613ef4565b612a359190613f62565b60165f828254612a459190613bcd565b925050819055505b5b5f821115612a7a578184612a629190613f92565b9350612a6f863084613064565b612a793082612a91565b5b50505b505b5b612a8b838383613064565b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af690614035565b60405180910390fd5b612b0a825f8361339c565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b84906140c3565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f828254612be19190613f92565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c459190613632565b60405180910390a3612c58835f846133a1565b505050565b5f601654601554612c6e9190613bcd565b90505f8160155484612c809190613ef4565b612c8a9190613f62565b90505f8260165485612c9c9190613ef4565b612ca69190613f62565b90505f8183612cb59190613bcd565b9050612ce2307f000000000000000000000000000000000000000000000000000000000000000083612194565b5f600267ffffffffffffffff811115612cfe57612cfd6136fe565b5b604051908082528060200260200182016040528015612d2c5781602001602082028036833780820191505090505b50905030815f81518110612d4357612d42613c00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612de6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0a91906140f5565b81600181518110612e1e57612e1d613c00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612eb9959493929190614210565b5f604051808303815f87803b158015612ed0575f80fd5b505af1158015612ee2573d5f803e3d5ffd5b505050505f4790505f838583612ef89190613ef4565b612f029190613f62565b90505f8183612f119190613f92565b90505f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612f5990614295565b5f6040518083038185875af1925050503d805f8114612f93576040519150601f19603f3d011682016040523d82523d5f602084013e612f98565b606091505b505080915050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612fe390614295565b5f6040518083038185875af1925050503d805f811461301d576040519150601f19603f3d011682016040523d82523d5f602084013e613022565b606091505b5050809150508660165f8282546130399190613f92565b925050819055508760155f8282546130519190613f92565b9250508190555050505050505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c990614319565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906143a7565b60405180910390fd5b61314b83838361339c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c590614435565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461325c9190613bcd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132c09190613632565b60405180910390a36132d38484846133a1565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133dd5780820151818401526020810190506133c2565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613402826133a6565b61340c81856133b0565b935061341c8185602086016133c0565b613425816133e8565b840191505092915050565b5f6020820190508181035f83015261344881846133f8565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61348a82613461565b9050919050565b61349a81613480565b81146134a4575f80fd5b50565b5f813590506134b581613491565b92915050565b5f819050919050565b6134cd816134bb565b81146134d7575f80fd5b50565b5f813590506134e8816134c4565b92915050565b5f806040838503121561350457613503613459565b5b5f613511858286016134a7565b9250506020613522858286016134da565b9150509250929050565b5f8115159050919050565b6135408161352c565b82525050565b5f6020820190506135595f830184613537565b92915050565b5f805f6060848603121561357657613575613459565b5b5f613583868287016134da565b9350506020613594868287016134da565b92505060406135a5868287016134da565b9150509250925092565b5f819050919050565b5f6135d26135cd6135c884613461565b6135af565b613461565b9050919050565b5f6135e3826135b8565b9050919050565b5f6135f4826135d9565b9050919050565b613604816135ea565b82525050565b5f60208201905061361d5f8301846135fb565b92915050565b61362c816134bb565b82525050565b5f6020820190506136455f830184613623565b92915050565b5f602082840312156136605761365f613459565b5b5f61366d848285016134a7565b91505092915050565b5f805f6060848603121561368d5761368c613459565b5b5f61369a868287016134a7565b93505060206136ab868287016134a7565b92505060406136bc868287016134da565b9150509250925092565b5f60ff82169050919050565b6136db816136c6565b82525050565b5f6020820190506136f45f8301846136d2565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613734826133e8565b810181811067ffffffffffffffff82111715613753576137526136fe565b5b80604052505050565b5f613765613450565b9050613771828261372b565b919050565b5f67ffffffffffffffff8211156137905761378f6136fe565b5b602082029050602081019050919050565b5f80fd5b5f6137b76137b284613776565b61375c565b905080838252602082019050602084028301858111156137da576137d96137a1565b5b835b8181101561380357806137ef88826134a7565b8452602084019350506020810190506137dc565b5050509392505050565b5f82601f830112613821576138206136fa565b5b81356138318482602086016137a5565b91505092915050565b5f6020828403121561384f5761384e613459565b5b5f82013567ffffffffffffffff81111561386c5761386b61345d565b5b6138788482850161380d565b91505092915050565b5f6020828403121561389657613895613459565b5b5f6138a3848285016134da565b91505092915050565b6138b581613480565b82525050565b5f6020820190506138ce5f8301846138ac565b92915050565b6138dd8161352c565b81146138e7575f80fd5b50565b5f813590506138f8816138d4565b92915050565b5f806040838503121561391457613913613459565b5b5f613921858286016134a7565b9250506020613932858286016138ea565b9150509250929050565b5f67ffffffffffffffff821115613956576139556136fe565b5b602082029050602081019050919050565b5f6139796139748461393c565b61375c565b9050808382526020820190506020840283018581111561399c5761399b6137a1565b5b835b818110156139c557806139b188826134da565b84526020840193505060208101905061399e565b5050509392505050565b5f82601f8301126139e3576139e26136fa565b5b81356139f3848260208601613967565b91505092915050565b5f8060408385031215613a1257613a11613459565b5b5f83013567ffffffffffffffff811115613a2f57613a2e61345d565b5b613a3b8582860161380d565b925050602083013567ffffffffffffffff811115613a5c57613a5b61345d565b5b613a68858286016139cf565b9150509250929050565b5f60208284031215613a8757613a86613459565b5b5f613a94848285016138ea565b91505092915050565b5f8060408385031215613ab357613ab2613459565b5b5f613ac0858286016134a7565b9250506020613ad1858286016134a7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613b1f57607f821691505b602082108103613b3257613b31613adb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613b6c6020836133b0565b9150613b7782613b38565b602082019050919050565b5f6020820190508181035f830152613b9981613b60565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613bd7826134bb565b9150613be2836134bb565b9250828201905080821115613bfa57613bf9613ba0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613c876025836133b0565b9150613c9282613c2d565b604082019050919050565b5f6020820190508181035f830152613cb481613c7b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613d156026836133b0565b9150613d2082613cbb565b604082019050919050565b5f6020820190508181035f830152613d4281613d09565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613da36024836133b0565b9150613dae82613d49565b604082019050919050565b5f6020820190508181035f830152613dd081613d97565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e316022836133b0565b9150613e3c82613dd7565b604082019050919050565b5f6020820190508181035f830152613e5e81613e25565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613e99601d836133b0565b9150613ea482613e65565b602082019050919050565b5f6020820190508181035f830152613ec681613e8d565b9050919050565b5f604082019050613ee05f8301856138ac565b613eed60208301846138ac565b9392505050565b5f613efe826134bb565b9150613f09836134bb565b9250828202613f17816134bb565b91508282048414831517613f2e57613f2d613ba0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f6c826134bb565b9150613f77836134bb565b925082613f8757613f86613f35565b5b828204905092915050565b5f613f9c826134bb565b9150613fa7836134bb565b9250828203905081811115613fbf57613fbe613ba0565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61401f6021836133b0565b915061402a82613fc5565b604082019050919050565b5f6020820190508181035f83015261404c81614013565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140ad6022836133b0565b91506140b882614053565b604082019050919050565b5f6020820190508181035f8301526140da816140a1565b9050919050565b5f815190506140ef81613491565b92915050565b5f6020828403121561410a57614109613459565b5b5f614117848285016140e1565b91505092915050565b5f819050919050565b5f61414361413e61413984614120565b6135af565b6134bb565b9050919050565b61415381614129565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61418b81613480565b82525050565b5f61419c8383614182565b60208301905092915050565b5f602082019050919050565b5f6141be82614159565b6141c88185614163565b93506141d383614173565b805f5b838110156142035781516141ea8882614191565b97506141f5836141a8565b9250506001810190506141d6565b5085935050505092915050565b5f60a0820190506142235f830188613623565b614230602083018761414a565b818103604083015261424281866141b4565b905061425160608301856138ac565b61425e6080830184613623565b9695505050505050565b5f81905092915050565b50565b5f6142805f83614268565b915061428b82614272565b5f82019050919050565b5f61429f82614275565b9150819050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6143036025836133b0565b915061430e826142a9565b604082019050919050565b5f6020820190508181035f830152614330816142f7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143916023836133b0565b915061439c82614337565b604082019050919050565b5f6020820190508181035f8301526143be81614385565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61441f6026836133b0565b915061442a826143c5565b604082019050919050565b5f6020820190508181035f83015261444c81614413565b905091905056fea26469706673582212201af7989a6f54bf335533228dcf1c9985c224ac62dbad7045b6a29b35ce30a93b64736f6c6343000816003300000000000000000000000061e87d52d5a358ee83043a6d918a2e867e44bd2f000000000000000000000000ff354c92ea06a7ae091ac801d54d11148c992d75

Deployed Bytecode

0x608060405260043610610302575f3560e01c8063715018a61161018f578063a9059cbb116100db578063dd62ed3e11610094578063e2f456051161006e578063e2f4560514610b81578063e7f444b314610bab578063ed0d213714610bd5578063f2fde38b14610bff57610309565b8063dd62ed3e14610ae1578063e01af92c14610b1d578063e0bf7fd114610b4557610309565b8063a9059cbb146109c5578063a9d3cd8a14610a01578063aacebbe314610a29578063b9e9370014610a51578063bd967b7614610a7b578063d0a3981414610ab757610309565b80638b27306d1161014857806395d89b411161012257806395d89b411461090d578063a457c2d714610937578063a64e4f8a14610973578063a901dd921461099d57610309565b80638b27306d146108915780638da5cb5b146108bb57806392f36939146108e557610309565b8063715018a61461079957806375f0a874146107af578063792df503146107d95780637ae3ff47146108155780637e7613771461083f578063809d458d1461086957610309565b806342966c681161024e578063590ffdce1161020757806367243482116101e157806367243482146106e157806368078952146107095780636ddd17131461073357806370a082311461075d57610309565b8063590ffdce146106675780635eebef6b1461068f5780636402511e146106b957610309565b806342966c68146105715780634626402b1461059957806349bd5a5e146105c357806351bc3c85146105ed578063537df3b614610603578063576f9a541461062b57610309565b806318160ddd116102bb5780632c10508c116102955780632c10508c146104b9578063313ce567146104e3578063373bf3b11461050d578063395093511461053557610309565b806318160ddd146104175780631cdd3be31461044157806323b872dd1461047d57610309565b806306fdde031461030d578063095ea7b3146103375780630d075d9c146103735780630f683e901461039b5780631694505e146103c35780631732cded146103ed57610309565b3661030957005b5f80fd5b348015610318575f80fd5b50610321610c27565b60405161032e9190613430565b60405180910390f35b348015610342575f80fd5b5061035d600480360381019061035891906134ee565b610cb7565b60405161036a9190613546565b60405180910390f35b34801561037e575f80fd5b506103996004803603810190610394919061355f565b610cd9565b005b3480156103a6575f80fd5b506103c160048036038101906103bc919061355f565b610de0565b005b3480156103ce575f80fd5b506103d7610ee7565b6040516103e4919061360a565b60405180910390f35b3480156103f8575f80fd5b50610401610f0b565b60405161040e9190613546565b60405180910390f35b348015610422575f80fd5b5061042b610f1e565b6040516104389190613632565b60405180910390f35b34801561044c575f80fd5b506104676004803603810190610462919061364b565b610f27565b6040516104749190613546565b60405180910390f35b348015610488575f80fd5b506104a3600480360381019061049e9190613676565b610f44565b6040516104b09190613546565b60405180910390f35b3480156104c4575f80fd5b506104cd610f72565b6040516104da9190613632565b60405180910390f35b3480156104ee575f80fd5b506104f7610f78565b60405161050491906136e1565b60405180910390f35b348015610518575f80fd5b50610533600480360381019061052e919061383a565b610f80565b005b348015610540575f80fd5b5061055b600480360381019061055691906134ee565b61108c565b6040516105689190613546565b60405180910390f35b34801561057c575f80fd5b5061059760048036038101906105929190613881565b611131565b005b3480156105a4575f80fd5b506105ad61113e565b6040516105ba91906138bb565b60405180910390f35b3480156105ce575f80fd5b506105d7611163565b6040516105e491906138bb565b60405180910390f35b3480156105f8575f80fd5b50610601611187565b005b34801561060e575f80fd5b506106296004803603810190610624919061364b565b61126b565b005b348015610636575f80fd5b50610651600480360381019061064c919061364b565b61133e565b60405161065e9190613546565b60405180910390f35b348015610672575f80fd5b5061068d600480360381019061068891906138fe565b61135b565b005b34801561069a575f80fd5b506106a361142f565b6040516106b09190613632565b60405180910390f35b3480156106c4575f80fd5b506106df60048036038101906106da9190613881565b611435565b005b3480156106ec575f80fd5b50610707600480360381019061070291906139fc565b6114f2565b005b348015610714575f80fd5b5061071d611610565b60405161072a9190613632565b60405180910390f35b34801561073e575f80fd5b50610747611616565b6040516107549190613546565b60405180910390f35b348015610768575f80fd5b50610783600480360381019061077e919061364b565b611629565b6040516107909190613632565b60405180910390f35b3480156107a4575f80fd5b506107ad61166e565b005b3480156107ba575f80fd5b506107c36116f5565b6040516107d091906138bb565b60405180910390f35b3480156107e4575f80fd5b506107ff60048036038101906107fa919061364b565b61171a565b60405161080c9190613546565b60405180910390f35b348015610820575f80fd5b50610829611737565b6040516108369190613632565b60405180910390f35b34801561084a575f80fd5b5061085361173d565b6040516108609190613632565b60405180910390f35b348015610874575f80fd5b5061088f600480360381019061088a919061364b565b611743565b005b34801561089c575f80fd5b506108a5611802565b6040516108b29190613632565b60405180910390f35b3480156108c6575f80fd5b506108cf611808565b6040516108dc91906138bb565b60405180910390f35b3480156108f0575f80fd5b5061090b6004803603810190610906919061364b565b611830565b005b348015610918575f80fd5b50610921611904565b60405161092e9190613430565b60405180910390f35b348015610942575f80fd5b5061095d600480360381019061095891906134ee565b611994565b60405161096a9190613546565b60405180910390f35b34801561097e575f80fd5b50610987611a78565b6040516109949190613546565b60405180910390f35b3480156109a8575f80fd5b506109c360048036038101906109be9190613a72565b611a8b565b005b3480156109d0575f80fd5b506109eb60048036038101906109e691906134ee565b611b5b565b6040516109f89190613546565b60405180910390f35b348015610a0c575f80fd5b50610a276004803603810190610a2291906138fe565b611b7d565b005b348015610a34575f80fd5b50610a4f6004803603810190610a4a919061364b565b611cd6565b005b348015610a5c575f80fd5b50610a65611d95565b604051610a729190613632565b60405180910390f35b348015610a86575f80fd5b50610aa16004803603810190610a9c919061364b565b611d9b565b604051610aae9190613632565b60405180910390f35b348015610ac2575f80fd5b50610acb611db0565b604051610ad89190613632565b60405180910390f35b348015610aec575f80fd5b50610b076004803603810190610b029190613a9d565b611db6565b604051610b149190613632565b60405180910390f35b348015610b28575f80fd5b50610b436004803603810190610b3e9190613a72565b611e38565b005b348015610b50575f80fd5b50610b6b6004803603810190610b66919061364b565b611f08565b604051610b789190613546565b60405180910390f35b348015610b8c575f80fd5b50610b95611f25565b604051610ba29190613632565b60405180910390f35b348015610bb6575f80fd5b50610bbf611f2b565b604051610bcc9190613632565b60405180910390f35b348015610be0575f80fd5b50610be9611f31565b604051610bf69190613632565b60405180910390f35b348015610c0a575f80fd5b50610c256004803603810190610c20919061364b565b611f37565b005b606060038054610c3690613b08565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6290613b08565b8015610cad5780601f10610c8457610100808354040283529160200191610cad565b820191905f5260205f20905b815481529060010190602001808311610c9057829003601f168201915b5050505050905090565b5f80610cc161218d565b9050610cce818585612194565b600191505092915050565b610ce161218d565b73ffffffffffffffffffffffffffffffffffffffff16610cff611808565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613b82565b60405180910390fd5b600d54831180610d665750600e5482115b80610d725750600f5481115b15610da9576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600d8190555081600e8190555080600f81905550808284610dcb9190613bcd565b610dd59190613bcd565b601081905550505050565b610de861218d565b73ffffffffffffffffffffffffffffffffffffffff16610e06611808565b73ffffffffffffffffffffffffffffffffffffffff1614610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613b82565b60405180910390fd5b601154831180610e6d575060125482115b80610e79575060135481115b15610eb0576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826011819055508160128190555080601381905550808284610ed29190613bcd565b610edc9190613bcd565b601481905550505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600c60149054906101000a900460ff1681565b5f600254905090565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f80610f4e61218d565b9050610f5b858285612357565b610f668585856123e2565b60019150509392505050565b600e5481565b5f6012905090565b610f8861218d565b73ffffffffffffffffffffffffffffffffffffffff16610fa6611808565b73ffffffffffffffffffffffffffffffffffffffff1614610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390613b82565b60405180910390fd5b5f815190505f5b8181101561108757600160065f85848151811061102357611022613c00565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611003565b505050565b5f8061109661218d565b905061112681858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111219190613bcd565b612194565b600191505092915050565b61113b3382612a91565b50565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000006f43d1453775ff18e93710fe530cf7731128135c81565b61118f61218d565b73ffffffffffffffffffffffffffffffffffffffff166111ad611808565b73ffffffffffffffffffffffffffffffffffffffff1614611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613b82565b60405180910390fd5b5f60175461121030611629565b10156112245761121f30611629565b611228565b6017545b90506001600c60146101000a81548160ff02191690831515021790555061124e81612c5d565b5f600c60146101000a81548160ff02191690831515021790555050565b61127361218d565b73ffffffffffffffffffffffffffffffffffffffff16611291611808565b73ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90613b82565b60405180910390fd5b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b61136361218d565b73ffffffffffffffffffffffffffffffffffffffff16611381611808565b73ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90613b82565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60155481565b61143d61218d565b73ffffffffffffffffffffffffffffffffffffffff1661145b611808565b73ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613b82565b60405180910390fd5b806017819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00816040516114e79190613632565b60405180910390a150565b6114fa61218d565b73ffffffffffffffffffffffffffffffffffffffff16611518611808565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613b82565b60405180910390fd5b5f82519050815181146115ad576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8181101561160a576115fd6115c261218d565b8583815181106115d5576115d4613c00565b5b60200260200101518584815181106115f0576115ef613c00565b5b6020026020010151613064565b80806001019150506115af565b50505050565b600f5481565b600c60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61167661218d565b73ffffffffffffffffffffffffffffffffffffffff16611694611808565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613b82565b60405180910390fd5b6116f35f6132d9565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008602052805f5260405f205f915054906101000a900460ff1681565b600d5481565b60115481565b61174b61218d565b73ffffffffffffffffffffffffffffffffffffffff16611769611808565b73ffffffffffffffffffffffffffffffffffffffff16146117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690613b82565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61183861218d565b73ffffffffffffffffffffffffffffffffffffffff16611856611808565b73ffffffffffffffffffffffffffffffffffffffff16146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613b82565b60405180910390fd5b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60606004805461191390613b08565b80601f016020809104026020016040519081016040528092919081815260200182805461193f90613b08565b801561198a5780601f106119615761010080835404028352916020019161198a565b820191905f5260205f20905b81548152906001019060200180831161196d57829003601f168201915b5050505050905090565b5f8061199e61218d565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690613c9d565b60405180910390fd5b611a6c8286868403612194565b60019250505092915050565b600c60169054906101000a900460ff1681565b611a9361218d565b73ffffffffffffffffffffffffffffffffffffffff16611ab1611808565b73ffffffffffffffffffffffffffffffffffffffff1614611b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afe90613b82565b60405180910390fd5b80600c60166101000a81548160ff0219169083151502179055507fba500994dffbabeeb9e430f03a978d7b975359a20c5bde3a6ccb5a0c454680c881604051611b509190613546565b60405180910390a150565b5f80611b6561218d565b9050611b728185856123e2565b600191505092915050565b611b8561218d565b73ffffffffffffffffffffffffffffffffffffffff16611ba3611808565b73ffffffffffffffffffffffffffffffffffffffff1614611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf090613b82565b60405180910390fd5b7f0000000000000000000000006f43d1453775ff18e93710fe530cf7731128135c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c7e576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611cde61218d565b73ffffffffffffffffffffffffffffffffffffffff16611cfc611808565b73ffffffffffffffffffffffffffffffffffffffff1614611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4990613b82565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6009602052805f5260405f205f915090505481565b60145481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611e4061218d565b73ffffffffffffffffffffffffffffffffffffffff16611e5e611808565b73ffffffffffffffffffffffffffffffffffffffff1614611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90613b82565b60405180910390fd5b80600c60156101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1281604051611efd9190613546565b60405180910390a150565b6006602052805f5260405f205f915054906101000a900460ff1681565b60175481565b60135481565b60125481565b611f3f61218d565b73ffffffffffffffffffffffffffffffffffffffff16611f5d611808565b73ffffffffffffffffffffffffffffffffffffffff1614611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90613b82565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890613d2b565b60405180910390fd5b5f60085f61202d611808565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60065f612088611808565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061218a816132d9565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990613db9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790613e47565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161234a9190613632565b60405180910390a3505050565b5f6123628484611db6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123dc57818110156123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c590613eaf565b60405180910390fd5b6123db8484848403612194565b5b50505050565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561247e575060075f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156124c25782826040517f709ac0170000000000000000000000000000000000000000000000000000000081526004016124b9929190613ecd565b60405180910390fd5b5f81036124d9576124d483835f613064565b612a8c565b600c60149054906101000a900460ff16612a8057600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125885750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156126be5760085f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561262057504360095f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054145b1561267b57600160075f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b4360095f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561275c575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a7f575f60175461276e30611629565b1015905080801561278b5750600c60159054906101000a900460ff165b80156127de5750600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612824576001600c60146101000a81548160ff021916908315150217905550612809601754612c5d565b5f600c60146101000a81548160ff0219169083151502179055505b600c60169054906101000a900460ff1615612a7d575f80600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289357505f60145414155b1561294657612710601454856128a99190613ef4565b6128b39190613f62565b9150601454601154836128c69190613ef4565b6128d09190613f62565b816128db9190613bcd565b9050601454601254836128ee9190613ef4565b6128f89190613f62565b60155f8282546129089190613bcd565b92505081905550601454601354836129209190613ef4565b61292a9190613f62565b60165f82825461293a9190613bcd565b92505081905550612a4e565b600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561299e57505f60105414155b15612a4d57612710601054856129b49190613ef4565b6129be9190613f62565b9150601054600d54836129d19190613ef4565b6129db9190613f62565b816129e69190613bcd565b9050601054600e54836129f99190613ef4565b612a039190613f62565b60155f828254612a139190613bcd565b92505081905550601054600f5483612a2b9190613ef4565b612a359190613f62565b60165f828254612a459190613bcd565b925050819055505b5b5f821115612a7a578184612a629190613f92565b9350612a6f863084613064565b612a793082612a91565b5b50505b505b5b612a8b838383613064565b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af690614035565b60405180910390fd5b612b0a825f8361339c565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b84906140c3565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f828254612be19190613f92565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c459190613632565b60405180910390a3612c58835f846133a1565b505050565b5f601654601554612c6e9190613bcd565b90505f8160155484612c809190613ef4565b612c8a9190613f62565b90505f8260165485612c9c9190613ef4565b612ca69190613f62565b90505f8183612cb59190613bcd565b9050612ce2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83612194565b5f600267ffffffffffffffff811115612cfe57612cfd6136fe565b5b604051908082528060200260200182016040528015612d2c5781602001602082028036833780820191505090505b50905030815f81518110612d4357612d42613c00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612de6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0a91906140f5565b81600181518110612e1e57612e1d613c00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612eb9959493929190614210565b5f604051808303815f87803b158015612ed0575f80fd5b505af1158015612ee2573d5f803e3d5ffd5b505050505f4790505f838583612ef89190613ef4565b612f029190613f62565b90505f8183612f119190613f92565b90505f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612f5990614295565b5f6040518083038185875af1925050503d805f8114612f93576040519150601f19603f3d011682016040523d82523d5f602084013e612f98565b606091505b505080915050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612fe390614295565b5f6040518083038185875af1925050503d805f811461301d576040519150601f19603f3d011682016040523d82523d5f602084013e613022565b606091505b5050809150508660165f8282546130399190613f92565b925050819055508760155f8282546130519190613f92565b9250508190555050505050505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c990614319565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906143a7565b60405180910390fd5b61314b83838361339c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c590614435565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461325c9190613bcd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132c09190613632565b60405180910390a36132d38484846133a1565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133dd5780820151818401526020810190506133c2565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613402826133a6565b61340c81856133b0565b935061341c8185602086016133c0565b613425816133e8565b840191505092915050565b5f6020820190508181035f83015261344881846133f8565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61348a82613461565b9050919050565b61349a81613480565b81146134a4575f80fd5b50565b5f813590506134b581613491565b92915050565b5f819050919050565b6134cd816134bb565b81146134d7575f80fd5b50565b5f813590506134e8816134c4565b92915050565b5f806040838503121561350457613503613459565b5b5f613511858286016134a7565b9250506020613522858286016134da565b9150509250929050565b5f8115159050919050565b6135408161352c565b82525050565b5f6020820190506135595f830184613537565b92915050565b5f805f6060848603121561357657613575613459565b5b5f613583868287016134da565b9350506020613594868287016134da565b92505060406135a5868287016134da565b9150509250925092565b5f819050919050565b5f6135d26135cd6135c884613461565b6135af565b613461565b9050919050565b5f6135e3826135b8565b9050919050565b5f6135f4826135d9565b9050919050565b613604816135ea565b82525050565b5f60208201905061361d5f8301846135fb565b92915050565b61362c816134bb565b82525050565b5f6020820190506136455f830184613623565b92915050565b5f602082840312156136605761365f613459565b5b5f61366d848285016134a7565b91505092915050565b5f805f6060848603121561368d5761368c613459565b5b5f61369a868287016134a7565b93505060206136ab868287016134a7565b92505060406136bc868287016134da565b9150509250925092565b5f60ff82169050919050565b6136db816136c6565b82525050565b5f6020820190506136f45f8301846136d2565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613734826133e8565b810181811067ffffffffffffffff82111715613753576137526136fe565b5b80604052505050565b5f613765613450565b9050613771828261372b565b919050565b5f67ffffffffffffffff8211156137905761378f6136fe565b5b602082029050602081019050919050565b5f80fd5b5f6137b76137b284613776565b61375c565b905080838252602082019050602084028301858111156137da576137d96137a1565b5b835b8181101561380357806137ef88826134a7565b8452602084019350506020810190506137dc565b5050509392505050565b5f82601f830112613821576138206136fa565b5b81356138318482602086016137a5565b91505092915050565b5f6020828403121561384f5761384e613459565b5b5f82013567ffffffffffffffff81111561386c5761386b61345d565b5b6138788482850161380d565b91505092915050565b5f6020828403121561389657613895613459565b5b5f6138a3848285016134da565b91505092915050565b6138b581613480565b82525050565b5f6020820190506138ce5f8301846138ac565b92915050565b6138dd8161352c565b81146138e7575f80fd5b50565b5f813590506138f8816138d4565b92915050565b5f806040838503121561391457613913613459565b5b5f613921858286016134a7565b9250506020613932858286016138ea565b9150509250929050565b5f67ffffffffffffffff821115613956576139556136fe565b5b602082029050602081019050919050565b5f6139796139748461393c565b61375c565b9050808382526020820190506020840283018581111561399c5761399b6137a1565b5b835b818110156139c557806139b188826134da565b84526020840193505060208101905061399e565b5050509392505050565b5f82601f8301126139e3576139e26136fa565b5b81356139f3848260208601613967565b91505092915050565b5f8060408385031215613a1257613a11613459565b5b5f83013567ffffffffffffffff811115613a2f57613a2e61345d565b5b613a3b8582860161380d565b925050602083013567ffffffffffffffff811115613a5c57613a5b61345d565b5b613a68858286016139cf565b9150509250929050565b5f60208284031215613a8757613a86613459565b5b5f613a94848285016138ea565b91505092915050565b5f8060408385031215613ab357613ab2613459565b5b5f613ac0858286016134a7565b9250506020613ad1858286016134a7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613b1f57607f821691505b602082108103613b3257613b31613adb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613b6c6020836133b0565b9150613b7782613b38565b602082019050919050565b5f6020820190508181035f830152613b9981613b60565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613bd7826134bb565b9150613be2836134bb565b9250828201905080821115613bfa57613bf9613ba0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613c876025836133b0565b9150613c9282613c2d565b604082019050919050565b5f6020820190508181035f830152613cb481613c7b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613d156026836133b0565b9150613d2082613cbb565b604082019050919050565b5f6020820190508181035f830152613d4281613d09565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613da36024836133b0565b9150613dae82613d49565b604082019050919050565b5f6020820190508181035f830152613dd081613d97565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e316022836133b0565b9150613e3c82613dd7565b604082019050919050565b5f6020820190508181035f830152613e5e81613e25565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613e99601d836133b0565b9150613ea482613e65565b602082019050919050565b5f6020820190508181035f830152613ec681613e8d565b9050919050565b5f604082019050613ee05f8301856138ac565b613eed60208301846138ac565b9392505050565b5f613efe826134bb565b9150613f09836134bb565b9250828202613f17816134bb565b91508282048414831517613f2e57613f2d613ba0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f6c826134bb565b9150613f77836134bb565b925082613f8757613f86613f35565b5b828204905092915050565b5f613f9c826134bb565b9150613fa7836134bb565b9250828203905081811115613fbf57613fbe613ba0565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61401f6021836133b0565b915061402a82613fc5565b604082019050919050565b5f6020820190508181035f83015261404c81614013565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140ad6022836133b0565b91506140b882614053565b604082019050919050565b5f6020820190508181035f8301526140da816140a1565b9050919050565b5f815190506140ef81613491565b92915050565b5f6020828403121561410a57614109613459565b5b5f614117848285016140e1565b91505092915050565b5f819050919050565b5f61414361413e61413984614120565b6135af565b6134bb565b9050919050565b61415381614129565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61418b81613480565b82525050565b5f61419c8383614182565b60208301905092915050565b5f602082019050919050565b5f6141be82614159565b6141c88185614163565b93506141d383614173565b805f5b838110156142035781516141ea8882614191565b97506141f5836141a8565b9250506001810190506141d6565b5085935050505092915050565b5f60a0820190506142235f830188613623565b614230602083018761414a565b818103604083015261424281866141b4565b905061425160608301856138ac565b61425e6080830184613623565b9695505050505050565b5f81905092915050565b50565b5f6142805f83614268565b915061428b82614272565b5f82019050919050565b5f61429f82614275565b9150819050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6143036025836133b0565b915061430e826142a9565b604082019050919050565b5f6020820190508181035f830152614330816142f7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143916023836133b0565b915061439c82614337565b604082019050919050565b5f6020820190508181035f8301526143be81614385565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61441f6026836133b0565b915061442a826143c5565b604082019050919050565b5f6020820190508181035f83015261444c81614413565b905091905056fea26469706673582212201af7989a6f54bf335533228dcf1c9985c224ac62dbad7045b6a29b35ce30a93b64736f6c63430008160033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000061e87d52d5a358ee83043a6d918a2e867e44bd2f000000000000000000000000ff354c92ea06a7ae091ac801d54d11148c992d75

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0x61E87D52d5a358eE83043a6d918A2E867e44bD2f
Arg [1] : _treasuryWallet (address): 0xff354c92Ea06a7ae091ac801D54D11148C992d75

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000061e87d52d5a358ee83043a6d918a2e867e44bd2f
Arg [1] : 000000000000000000000000ff354c92ea06a7ae091ac801d54d11148c992d75


Deployed Bytecode Sourcemap

25999:9607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15069:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17420:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33123:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32705:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26328:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26508:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16189:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26101:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18201:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26649:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16031:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32466:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18905:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34868:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26470:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26386:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34593:267;;;;;;;;;;;;;:::i;:::-;;32070:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26280:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32193:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26945:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33887:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33533:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26691:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26535:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16360:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8475:103;;;;;;;;;;;;;:::i;:::-;;26433:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26155:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26611:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26776:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34472:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26981:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7824:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32331:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15288:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19648:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26572:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34200:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16693:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35373:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34349:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26734:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26219:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26902:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16949:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34051:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26042:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27020;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26858:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26815:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34965:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15069:100;15123:13;15156:5;15149:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15069:100;:::o;17420:201::-;17503:4;17520:13;17536:12;:10;:12::i;:::-;17520:28;;17559:32;17568:5;17575:7;17584:6;17559:8;:32::i;:::-;17609:4;17602:11;;;17420:201;;;;:::o;33123:402::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33235:10:::1;;33228:4;:17;:46;;;;33260:14;;33249:8;:25;33228:46;:77;;;;33290:15;;33278:9;:27;33228:77;33224:139;;;33329:22;;;;;;;;;;;;;;33224:139;33386:4;33373:10;:17;;;;33418:8;33401:14;:25;;;;33455:9;33437:15;:27;;;;33508:9;33497:8;33490:4;:15;;;;:::i;:::-;:27;;;;:::i;:::-;33475:12;:42;;;;33123:402:::0;;;:::o;32705:410::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32818:11:::1;;32811:4;:18;:48;;;;32844:15;;32833:8;:26;32811:48;:80;;;;32875:16;;32863:9;:28;32811:80;32807:142;;;32915:22;;;;;;;;;;;;;;32807:142;32973:4;32959:11;:18;;;;33006:8;32988:15;:26;;;;33044:9;33025:16;:28;;;;33098:9;33087:8;33080:4;:15;;;;:::i;:::-;:27;;;;:::i;:::-;33064:13;:43;;;;32705:410:::0;;;:::o;26328:51::-;;;:::o;26508:20::-;;;;;;;;;;;;;:::o;16189:108::-;16250:7;16277:12;;16270:19;;16189:108;:::o;26101:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;18201:295::-;18332:4;18349:15;18367:12;:10;:12::i;:::-;18349:30;;18390:38;18406:4;18412:7;18421:6;18390:15;:38::i;:::-;18439:27;18449:4;18455:2;18459:6;18439:9;:27::i;:::-;18484:4;18477:11;;;18201:295;;;;;:::o;26649:35::-;;;;:::o;16031:93::-;16089:5;16114:2;16107:9;;16031:93;:::o;32466:231::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32550:11:::1;32564:8;:15;32550:29;;32595:9;32590:100;32614:3;32610:1;:7;32590:100;;;32674:4;32639:19;:32;32659:8;32668:1;32659:11;;;;;;;;:::i;:::-;;;;;;;;32639:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32619:3;;;;;;;32590:100;;;;32539:158;32466:231:::0;:::o;18905:240::-;18993:4;19010:13;19026:12;:10;:12::i;:::-;19010:28;;19049:66;19058:5;19065:7;19104:10;19074:11;:18;19086:5;19074:18;;;;;;;;;;;;;;;:27;19093:7;19074:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;19049:8;:66::i;:::-;19133:4;19126:11;;;18905:240;;;;:::o;34868:89::-;34918:31;34930:10;34942:6;34918:11;:31::i;:::-;34868:89;:::o;26470:29::-;;;;;;;;;;;;;:::o;26386:38::-;;;:::o;34593:267::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34645:20:::1;34696:18;;34668:24;34686:4;34668:9;:24::i;:::-;:46;;:94;;34738:24;34756:4;34738:9;:24::i;:::-;34668:94;;;34717:18;;34668:94;34645:117;;34784:4;34773:8;;:15;;;;;;;;;;;;;;;;;;34799:26;34812:12;34799;:26::i;:::-;34847:5;34836:8;;:16;;;;;;;;;;;;;;;;;;34634:226;34593:267::o:0;32070:115::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32172:5:::1;32146:14;:23;32161:7;32146:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32070:115:::0;:::o;26280:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;32193:130::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32310:5:::1;32279:19;:28;32299:7;32279:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32193:130:::0;;:::o;26945:29::-;;;;:::o;33887:156::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33979:6:::1;33958:18;:27;;;;34001:34;34028:6;34001:34;;;;;;:::i;:::-;;;;;;;;33887:156:::0;:::o;33533:346::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33630:11:::1;33644:5;:12;33630:26;;33678:7;:14;33671:3;:21;33667:83;;33716:22;;;;;;;;;;;;;;33667:83;33765:9;33760:112;33784:3;33780:1;:7;33760:112;;;33809:51;33825:12;:10;:12::i;:::-;33839:5;33845:1;33839:8;;;;;;;;:::i;:::-;;;;;;;;33849:7;33857:1;33849:10;;;;;;;;:::i;:::-;;;;;;;;33809:15;:51::i;:::-;33789:3;;;;;;;33760:112;;;;33619:260;33533:346:::0;;:::o;26691:36::-;;;;:::o;26535:30::-;;;;;;;;;;;;;:::o;16360:127::-;16434:7;16461:9;:18;16471:7;16461:18;;;;;;;;;;;;;;;;16454:25;;16360:127;;;:::o;8475:103::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8540:30:::1;8567:1;8540:18;:30::i;:::-;8475:103::o:0;26433:30::-;;;;;;;;;;;;;:::o;26155:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26611:31::-;;;;:::o;26776:32::-;;;;:::o;34472:113::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34568:9:::1;34551:14;;:26;;;;;;;;;;;;;;;;;;34472:113:::0;:::o;26981:30::-;;;;:::o;7824:87::-;7870:7;7897:6;;;;;;;;;;;7890:13;;7824:87;:::o;32331:127::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32446:4:::1;32410:24;:33;32435:7;32410:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;32331:127:::0;:::o;15288:104::-;15344:13;15377:7;15370:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15288:104;:::o;19648:438::-;19741:4;19758:13;19774:12;:10;:12::i;:::-;19758:28;;19797:24;19824:11;:18;19836:5;19824:18;;;;;;;;;;;;;;;:27;19843:7;19824:27;;;;;;;;;;;;;;;;19797:54;;19890:15;19870:16;:35;;19862:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19983:60;19992:5;19999:7;20027:15;20008:16;:34;19983:8;:60::i;:::-;20074:4;20067:11;;;;19648:438;;;;:::o;26572:30::-;;;;;;;;;;;;;:::o;34200:141::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34281:8:::1;34267:11;;:22;;;;;;;;;;;;;;;;;;34305:28;34324:8;34305:28;;;;;;:::i;:::-;;;;;;;;34200:141:::0;:::o;16693:193::-;16772:4;16789:13;16805:12;:10;:12::i;:::-;16789:28;;16828;16838:5;16845:2;16849:6;16828:9;:28::i;:::-;16874:4;16867:11;;;16693:193;;;;:::o;35373:191::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35455:13:::1;35447:21;;:4;:21;;::::0;35443:83:::1;;35492:22;;;;;;;;;;;;;;35443:83;35551:5;35536:6;:12;35543:4;35536:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;35373:191:::0;;:::o;34349:115::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34447:9:::1;34429:15;;:27;;;;;;;;;;;;;;;;;;34349:115:::0;:::o;26734:33::-;;;;:::o;26219:54::-;;;;;;;;;;;;;;;;;:::o;26902:34::-;;;;:::o;16949:151::-;17038:7;17065:11;:18;17077:5;17065:18;;;;;;;;;;;;;;;:27;17084:7;17065:27;;;;;;;;;;;;;;;;17058:34;;16949:151;;;;:::o;34051:141::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34132:8:::1;34118:11;;:22;;;;;;;;;;;;;;;;;;34156:28;34175:8;34156:28;;;;;;:::i;:::-;;;;;;;;34051:141:::0;:::o;26042:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;27020:::-;;;;:::o;26858:37::-;;;;:::o;26815:36::-;;;;:::o;34965:400::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35075:1:::1;35055:22;;:8;:22;;::::0;35047:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35167:5;35131:24;:33;35156:7;:5;:7::i;:::-;35131:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;35214:5;35183:19;:28;35203:7;:5;:7::i;:::-;35183:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35267:4;35230:24;:34;35255:8;35230:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;35314:4;35282:19;:29;35302:8;35282:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35329:28;35348:8;35329:18;:28::i;:::-;34965:400:::0;:::o;6548:98::-;6601:7;6628:10;6621:17;;6548:98;:::o;23284:380::-;23437:1;23420:19;;:5;:19;;;23412:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23518:1;23499:21;;:7;:21;;;23491:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23602:6;23572:11;:18;23584:5;23572:18;;;;;;;;;;;;;;;:27;23591:7;23572:27;;;;;;;;;;;;;;;:36;;;;23640:7;23624:32;;23633:5;23624:32;;;23649:6;23624:32;;;;;;:::i;:::-;;;;;;;;23284:380;;;:::o;23951:453::-;24086:24;24113:25;24123:5;24130:7;24113:9;:25::i;:::-;24086:52;;24173:17;24153:16;:37;24149:248;;24235:6;24215:16;:26;;24207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24319:51;24328:5;24335:7;24363:6;24344:16;:25;24319:8;:51::i;:::-;24149:248;24075:329;23951:453;;;:::o;28349:2481::-;28477:6;:12;28484:4;28477:12;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;;28493:14;:25;28508:9;28493:25;;;;;;;;;;;;;;;;;;;;;;;;;28477:41;28473:175;;;28558:4;28564:2;28542:25;;;;;;;;;;;;:::i;:::-;;;;;;;;28473:175;28673:1;28663:6;:11;28660:92;;28691:28;28707:4;28713:2;28717:1;28691:15;:28::i;:::-;28734:7;;28660:92;28769:8;;;;;;;;;;;28764:2011;;28800:6;:12;28807:4;28800:12;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;28816:6;:10;28823:2;28816:10;;;;;;;;;;;;;;;;;;;;;;;;;28800:26;28796:295;;;28852:24;:35;28877:9;28852:35;;;;;;;;;;;;;;;;;;;;;;;;;28851:36;:85;;;;;28924:12;28891:18;:29;28910:9;28891:29;;;;;;;;;;;;;;;;:45;28851:85;28847:166;;;28989:4;28961:14;:25;28976:9;28961:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;28847:166;29063:12;29031:18;:29;29050:9;29031:29;;;;;;;;;;;;;;;:44;;;;28796:295;29112:19;:25;29132:4;29112:25;;;;;;;;;;;;;;;;;;;;;;;;;29111:26;:71;;;;;29159:19;:23;29179:2;29159:23;;;;;;;;;;;;;;;;;;;;;;;;;29158:24;29111:71;29107:1655;;;29219:12;29262:18;;29234:24;29252:4;29234:9;:24::i;:::-;:46;;29219:61;;29327:7;:43;;;;;29359:11;;;;;;;;;;;29327:43;:81;;;;;29396:6;:12;29403:4;29396:12;;;;;;;;;;;;;;;;;;;;;;;;;29395:13;29327:81;29301:301;;;29484:4;29473:8;;:15;;;;;;;;;;;;;;;;;;29511:32;29524:18;;29511:12;:32::i;:::-;29577:5;29566:8;;:16;;;;;;;;;;;;;;;;;;29301:301;29626:11;;;;;;;;;;;29622:1123;;;29662:12;29697:18;29742:6;:10;29749:2;29742:10;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;;29773:1;29756:13;;:18;;29742:32;29738:751;;;29842:5;29826:13;;29817:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;29810:37;;29909:13;;29895:11;;29888:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;29874:48;;;;;:::i;:::-;;;29992:13;;29974:15;;29967:4;:22;;;;:::i;:::-;:38;;;;:::i;:::-;29949:14;;:56;;;;;;;:::i;:::-;;;;;;;;30077:13;;30058:16;;30051:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;30032:15;;:58;;;;;;;:::i;:::-;;;;;;;;29738:751;;;30124:6;:12;30131:4;30124:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;30156:1;30140:12;;:17;;30124:33;30120:369;;;30223:5;30208:12;;30199:6;:21;;;;:::i;:::-;:29;;;;:::i;:::-;30192:36;;30289:12;;30276:10;;30269:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;30255:46;;;;;:::i;:::-;;;30370:12;;30353:14;;30346:4;:21;;;;:::i;:::-;:36;;;;:::i;:::-;30328:14;;:54;;;;;;;:::i;:::-;;;;;;;;30453:12;;30435:15;;30428:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;30409:15;;:56;;;;;;;:::i;:::-;;;;;;;;30120:369;29738:751;30522:1;30515:4;:8;30511:213;;;30562:4;30552:14;;;;;:::i;:::-;;;30593:42;30609:4;30623;30630;30593:15;:42::i;:::-;30662:38;30682:4;30689:10;30662:11;:38::i;:::-;30511:213;29639:1106;;29622:1123;29198:1564;29107:1655;28764:2011;30787:33;30803:4;30809:2;30813:6;30787:15;:33::i;:::-;28349:2481;;;;:::o;22255:591::-;22358:1;22339:21;;:7;:21;;;22331:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22411:49;22432:7;22449:1;22453:6;22411:20;:49::i;:::-;22473:22;22498:9;:18;22508:7;22498:18;;;;;;;;;;;;;;;;22473:43;;22553:6;22535:14;:24;;22527:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22672:6;22655:14;:23;22634:9;:18;22644:7;22634:18;;;;;;;;;;;;;;;:44;;;;22716:6;22700:12;;:22;;;;;;;:::i;:::-;;;;;;;;22766:1;22740:37;;22749:7;22740:37;;;22770:6;22740:37;;;;;;:::i;:::-;;;;;;;;22790:48;22810:7;22827:1;22831:6;22790:19;:48::i;:::-;22320:526;22255:591;;:::o;30838:1224::-;30902:13;30935:15;;30918:14;;:32;;;;:::i;:::-;30902:48;;30961:22;31018:5;31001:14;;30986:12;:29;;;;:::i;:::-;:37;;;;:::i;:::-;30961:62;;31034:17;31087:5;31069:15;;31054:12;:30;;;;:::i;:::-;:38;;;;:::i;:::-;31034:58;;31105:19;31144:9;31127:14;:26;;;;:::i;:::-;31105:48;;31166:62;31183:4;31198:15;31216:11;31166:8;:62::i;:::-;31241:21;31279:1;31265:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31241:40;;31310:4;31292;31297:1;31292:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31336:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31326:4;31331:1;31326:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31397:15;:66;;;31478:11;31504:1;31548:4;31575;31595:15;31397:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31634:18;31655:21;31634:42;;31687:17;31732:11;31720:9;31707:10;:22;;;;:::i;:::-;:36;;;;:::i;:::-;31687:56;;31754:16;31786:9;31773:10;:22;;;;:::i;:::-;31754:41;;31808:12;31853:15;;;;;;;;;;;31845:29;;31882:9;31845:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31831:65;;;;;31929:14;;;;;;;;;;;31921:28;;31957:8;31921:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31907:63;;;;;32002:9;31983:15;;:28;;;;;;;:::i;:::-;;;;;;;;32040:14;32022;;:32;;;;;;;:::i;:::-;;;;;;;;30891:1171;;;;;;;;;30838:1224;:::o;20565:671::-;20712:1;20696:18;;:4;:18;;;20688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20789:1;20775:16;;:2;:16;;;20767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20844:38;20865:4;20871:2;20875:6;20844:20;:38::i;:::-;20895:19;20917:9;:15;20927:4;20917:15;;;;;;;;;;;;;;;;20895:37;;20966:6;20951:11;:21;;20943:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21083:6;21069:11;:20;21051:9;:15;21061:4;21051:15;;;;;;;;;;;;;;;:38;;;;21128:6;21111:9;:13;21121:2;21111:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21167:2;21152:26;;21161:4;21152:26;;;21171:6;21152:26;;;;;;:::i;:::-;;;;;;;;21191:37;21211:4;21217:2;21221:6;21191:19;:37::i;:::-;20677:559;20565:671;;;:::o;9094:191::-;9168:16;9187:6;;;;;;;;;;;9168:25;;9213:8;9204:6;;:17;;;;;;;;;;;;;;;;;;9268:8;9237:40;;9258:8;9237:40;;;;;;;;;;;;9157:128;9094:191;:::o;25004:125::-;;;;:::o;25733:124::-;;;;:::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;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652: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:619::-;3523:6;3531;3539;3588:2;3576:9;3567:7;3563:23;3559:32;3556:119;;;3594:79;;:::i;:::-;3556:119;3714:1;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3685:117;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3969:2;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3940:118;3446:619;;;;;:::o;4071:60::-;4099:3;4120:5;4113:12;;4071:60;;;:::o;4137:142::-;4187:9;4220:53;4238:34;4247:24;4265:5;4247:24;:::i;:::-;4238:34;:::i;:::-;4220:53;:::i;:::-;4207:66;;4137:142;;;:::o;4285:126::-;4335:9;4368:37;4399:5;4368:37;:::i;:::-;4355:50;;4285:126;;;:::o;4417:152::-;4493:9;4526:37;4557:5;4526:37;:::i;:::-;4513:50;;4417:152;;;:::o;4575:183::-;4688:63;4745:5;4688:63;:::i;:::-;4683:3;4676:76;4575:183;;:::o;4764:274::-;4883:4;4921:2;4910:9;4906:18;4898:26;;4934:97;5028:1;5017:9;5013:17;5004:6;4934:97;:::i;:::-;4764:274;;;;:::o;5044:118::-;5131:24;5149:5;5131:24;:::i;:::-;5126:3;5119:37;5044:118;;:::o;5168:222::-;5261:4;5299:2;5288:9;5284:18;5276:26;;5312:71;5380:1;5369:9;5365:17;5356:6;5312:71;:::i;:::-;5168:222;;;;:::o;5396:329::-;5455:6;5504:2;5492:9;5483:7;5479:23;5475:32;5472:119;;;5510:79;;:::i;:::-;5472:119;5630:1;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5601:117;5396:329;;;;:::o;5731:619::-;5808:6;5816;5824;5873:2;5861:9;5852:7;5848:23;5844:32;5841:119;;;5879:79;;:::i;:::-;5841:119;5999:1;6024:53;6069:7;6060:6;6049:9;6045:22;6024:53;:::i;:::-;6014:63;;5970:117;6126:2;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6097:118;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5731:619;;;;;:::o;6356:86::-;6391:7;6431:4;6424:5;6420:16;6409:27;;6356:86;;;:::o;6448:112::-;6531:22;6547:5;6531:22;:::i;:::-;6526:3;6519:35;6448:112;;:::o;6566:214::-;6655:4;6693:2;6682:9;6678:18;6670:26;;6706:67;6770:1;6759:9;6755:17;6746:6;6706:67;:::i;:::-;6566:214;;;;:::o;6786:117::-;6895:1;6892;6885:12;6909:180;6957:77;6954:1;6947:88;7054:4;7051:1;7044:15;7078:4;7075:1;7068:15;7095:281;7178:27;7200:4;7178:27;:::i;:::-;7170:6;7166:40;7308:6;7296:10;7293:22;7272:18;7260:10;7257:34;7254:62;7251:88;;;7319:18;;:::i;:::-;7251:88;7359:10;7355:2;7348:22;7138:238;7095:281;;:::o;7382:129::-;7416:6;7443:20;;:::i;:::-;7433:30;;7472:33;7500:4;7492:6;7472:33;:::i;:::-;7382:129;;;:::o;7517:311::-;7594:4;7684:18;7676:6;7673:30;7670:56;;;7706:18;;:::i;:::-;7670:56;7756:4;7748:6;7744:17;7736:25;;7816:4;7810;7806:15;7798:23;;7517:311;;;:::o;7834:117::-;7943:1;7940;7933:12;7974:710;8070:5;8095:81;8111:64;8168:6;8111:64;:::i;:::-;8095:81;:::i;:::-;8086:90;;8196:5;8225:6;8218:5;8211:21;8259:4;8252:5;8248:16;8241:23;;8312:4;8304:6;8300:17;8292:6;8288:30;8341:3;8333:6;8330:15;8327:122;;;8360:79;;:::i;:::-;8327:122;8475:6;8458:220;8492:6;8487:3;8484:15;8458:220;;;8567:3;8596:37;8629:3;8617:10;8596:37;:::i;:::-;8591:3;8584:50;8663:4;8658:3;8654:14;8647:21;;8534:144;8518:4;8513:3;8509:14;8502:21;;8458:220;;;8462:21;8076:608;;7974:710;;;;;:::o;8707:370::-;8778:5;8827:3;8820:4;8812:6;8808:17;8804:27;8794:122;;8835:79;;:::i;:::-;8794:122;8952:6;8939:20;8977:94;9067:3;9059:6;9052:4;9044:6;9040:17;8977:94;:::i;:::-;8968:103;;8784:293;8707:370;;;;:::o;9083:539::-;9167:6;9216:2;9204:9;9195:7;9191:23;9187:32;9184:119;;;9222:79;;:::i;:::-;9184:119;9370:1;9359:9;9355:17;9342:31;9400:18;9392:6;9389:30;9386:117;;;9422:79;;:::i;:::-;9386:117;9527:78;9597:7;9588:6;9577:9;9573:22;9527:78;:::i;:::-;9517:88;;9313:302;9083:539;;;;:::o;9628:329::-;9687:6;9736:2;9724:9;9715:7;9711:23;9707:32;9704:119;;;9742:79;;:::i;:::-;9704:119;9862:1;9887:53;9932:7;9923:6;9912:9;9908:22;9887:53;:::i;:::-;9877:63;;9833:117;9628:329;;;;:::o;9963:118::-;10050:24;10068:5;10050:24;:::i;:::-;10045:3;10038:37;9963:118;;:::o;10087:222::-;10180:4;10218:2;10207:9;10203:18;10195:26;;10231:71;10299:1;10288:9;10284:17;10275:6;10231:71;:::i;:::-;10087:222;;;;:::o;10315:116::-;10385:21;10400:5;10385:21;:::i;:::-;10378:5;10375:32;10365:60;;10421:1;10418;10411:12;10365:60;10315:116;:::o;10437:133::-;10480:5;10518:6;10505:20;10496:29;;10534:30;10558:5;10534:30;:::i;:::-;10437:133;;;;:::o;10576:468::-;10641:6;10649;10698:2;10686:9;10677:7;10673:23;10669:32;10666:119;;;10704:79;;:::i;:::-;10666:119;10824:1;10849:53;10894:7;10885:6;10874:9;10870:22;10849:53;:::i;:::-;10839:63;;10795:117;10951:2;10977:50;11019:7;11010:6;10999:9;10995:22;10977:50;:::i;:::-;10967:60;;10922:115;10576:468;;;;;:::o;11050:311::-;11127:4;11217:18;11209:6;11206:30;11203:56;;;11239:18;;:::i;:::-;11203:56;11289:4;11281:6;11277:17;11269:25;;11349:4;11343;11339:15;11331:23;;11050:311;;;:::o;11384:710::-;11480:5;11505:81;11521:64;11578:6;11521:64;:::i;:::-;11505:81;:::i;:::-;11496:90;;11606:5;11635:6;11628:5;11621:21;11669:4;11662:5;11658:16;11651:23;;11722:4;11714:6;11710:17;11702:6;11698:30;11751:3;11743:6;11740:15;11737:122;;;11770:79;;:::i;:::-;11737:122;11885:6;11868:220;11902:6;11897:3;11894:15;11868:220;;;11977:3;12006:37;12039:3;12027:10;12006:37;:::i;:::-;12001:3;11994:50;12073:4;12068:3;12064:14;12057:21;;11944:144;11928:4;11923:3;11919:14;11912:21;;11868:220;;;11872:21;11486:608;;11384:710;;;;;:::o;12117:370::-;12188:5;12237:3;12230:4;12222:6;12218:17;12214:27;12204:122;;12245:79;;:::i;:::-;12204:122;12362:6;12349:20;12387:94;12477:3;12469:6;12462:4;12454:6;12450:17;12387:94;:::i;:::-;12378:103;;12194:293;12117:370;;;;:::o;12493:894::-;12611:6;12619;12668:2;12656:9;12647:7;12643:23;12639:32;12636:119;;;12674:79;;:::i;:::-;12636:119;12822:1;12811:9;12807:17;12794:31;12852:18;12844:6;12841:30;12838:117;;;12874:79;;:::i;:::-;12838:117;12979:78;13049:7;13040:6;13029:9;13025:22;12979:78;:::i;:::-;12969:88;;12765:302;13134:2;13123:9;13119:18;13106:32;13165:18;13157:6;13154:30;13151:117;;;13187:79;;:::i;:::-;13151:117;13292:78;13362:7;13353:6;13342:9;13338:22;13292:78;:::i;:::-;13282:88;;13077:303;12493:894;;;;;:::o;13393:323::-;13449:6;13498:2;13486:9;13477:7;13473:23;13469:32;13466:119;;;13504:79;;:::i;:::-;13466:119;13624:1;13649:50;13691:7;13682:6;13671:9;13667:22;13649:50;:::i;:::-;13639:60;;13595:114;13393:323;;;;:::o;13722:474::-;13790:6;13798;13847:2;13835:9;13826:7;13822:23;13818:32;13815:119;;;13853:79;;:::i;:::-;13815:119;13973:1;13998:53;14043:7;14034:6;14023:9;14019:22;13998:53;:::i;:::-;13988:63;;13944:117;14100:2;14126:53;14171:7;14162:6;14151:9;14147:22;14126:53;:::i;:::-;14116:63;;14071:118;13722:474;;;;;:::o;14202:180::-;14250:77;14247:1;14240:88;14347:4;14344:1;14337:15;14371:4;14368:1;14361:15;14388:320;14432:6;14469:1;14463:4;14459:12;14449:22;;14516:1;14510:4;14506:12;14537:18;14527:81;;14593:4;14585:6;14581:17;14571:27;;14527:81;14655:2;14647:6;14644:14;14624:18;14621:38;14618:84;;14674:18;;:::i;:::-;14618:84;14439:269;14388:320;;;:::o;14714:182::-;14854:34;14850:1;14842:6;14838:14;14831:58;14714:182;:::o;14902:366::-;15044:3;15065:67;15129:2;15124:3;15065:67;:::i;:::-;15058:74;;15141:93;15230:3;15141:93;:::i;:::-;15259:2;15254:3;15250:12;15243:19;;14902:366;;;:::o;15274:419::-;15440:4;15478:2;15467:9;15463:18;15455:26;;15527:9;15521:4;15517:20;15513:1;15502:9;15498:17;15491:47;15555:131;15681:4;15555:131;:::i;:::-;15547:139;;15274:419;;;:::o;15699:180::-;15747:77;15744:1;15737:88;15844:4;15841:1;15834:15;15868:4;15865:1;15858:15;15885:191;15925:3;15944:20;15962:1;15944:20;:::i;:::-;15939:25;;15978:20;15996:1;15978:20;:::i;:::-;15973:25;;16021:1;16018;16014:9;16007:16;;16042:3;16039:1;16036:10;16033:36;;;16049:18;;:::i;:::-;16033:36;15885:191;;;;:::o;16082:180::-;16130:77;16127:1;16120:88;16227:4;16224:1;16217:15;16251:4;16248:1;16241:15;16268:224;16408:34;16404:1;16396:6;16392:14;16385:58;16477:7;16472:2;16464:6;16460:15;16453:32;16268:224;:::o;16498:366::-;16640:3;16661:67;16725:2;16720:3;16661:67;:::i;:::-;16654:74;;16737:93;16826:3;16737:93;:::i;:::-;16855:2;16850:3;16846:12;16839:19;;16498:366;;;:::o;16870:419::-;17036:4;17074:2;17063:9;17059:18;17051:26;;17123:9;17117:4;17113:20;17109:1;17098:9;17094:17;17087:47;17151:131;17277:4;17151:131;:::i;:::-;17143:139;;16870:419;;;:::o;17295:225::-;17435:34;17431:1;17423:6;17419:14;17412:58;17504:8;17499:2;17491:6;17487:15;17480:33;17295:225;:::o;17526:366::-;17668:3;17689:67;17753:2;17748:3;17689:67;:::i;:::-;17682:74;;17765:93;17854:3;17765:93;:::i;:::-;17883:2;17878:3;17874:12;17867:19;;17526:366;;;:::o;17898:419::-;18064:4;18102:2;18091:9;18087:18;18079:26;;18151:9;18145:4;18141:20;18137:1;18126:9;18122:17;18115:47;18179:131;18305:4;18179:131;:::i;:::-;18171:139;;17898:419;;;:::o;18323:223::-;18463:34;18459:1;18451:6;18447:14;18440:58;18532:6;18527:2;18519:6;18515:15;18508:31;18323:223;:::o;18552:366::-;18694:3;18715:67;18779:2;18774:3;18715:67;:::i;:::-;18708:74;;18791:93;18880:3;18791:93;:::i;:::-;18909:2;18904:3;18900:12;18893:19;;18552:366;;;:::o;18924:419::-;19090:4;19128:2;19117:9;19113:18;19105:26;;19177:9;19171:4;19167:20;19163:1;19152:9;19148:17;19141:47;19205:131;19331:4;19205:131;:::i;:::-;19197:139;;18924:419;;;:::o;19349:221::-;19489:34;19485:1;19477:6;19473:14;19466:58;19558:4;19553:2;19545:6;19541:15;19534:29;19349:221;:::o;19576:366::-;19718:3;19739:67;19803:2;19798:3;19739:67;:::i;:::-;19732:74;;19815:93;19904:3;19815:93;:::i;:::-;19933:2;19928:3;19924:12;19917:19;;19576:366;;;:::o;19948:419::-;20114:4;20152:2;20141:9;20137:18;20129:26;;20201:9;20195:4;20191:20;20187:1;20176:9;20172:17;20165:47;20229:131;20355:4;20229:131;:::i;:::-;20221:139;;19948:419;;;:::o;20373:179::-;20513:31;20509:1;20501:6;20497:14;20490:55;20373:179;:::o;20558:366::-;20700:3;20721:67;20785:2;20780:3;20721:67;:::i;:::-;20714:74;;20797:93;20886:3;20797:93;:::i;:::-;20915:2;20910:3;20906:12;20899:19;;20558:366;;;:::o;20930:419::-;21096:4;21134:2;21123:9;21119:18;21111:26;;21183:9;21177:4;21173:20;21169:1;21158:9;21154:17;21147:47;21211:131;21337:4;21211:131;:::i;:::-;21203:139;;20930:419;;;:::o;21355:332::-;21476:4;21514:2;21503:9;21499:18;21491:26;;21527:71;21595:1;21584:9;21580:17;21571:6;21527:71;:::i;:::-;21608:72;21676:2;21665:9;21661:18;21652:6;21608:72;:::i;:::-;21355:332;;;;;:::o;21693:410::-;21733:7;21756:20;21774:1;21756:20;:::i;:::-;21751:25;;21790:20;21808:1;21790:20;:::i;:::-;21785:25;;21845:1;21842;21838:9;21867:30;21885:11;21867:30;:::i;:::-;21856:41;;22046:1;22037:7;22033:15;22030:1;22027:22;22007:1;22000:9;21980:83;21957:139;;22076:18;;:::i;:::-;21957:139;21741:362;21693:410;;;;:::o;22109:180::-;22157:77;22154:1;22147:88;22254:4;22251:1;22244:15;22278:4;22275:1;22268:15;22295:185;22335:1;22352:20;22370:1;22352:20;:::i;:::-;22347:25;;22386:20;22404:1;22386:20;:::i;:::-;22381:25;;22425:1;22415:35;;22430:18;;:::i;:::-;22415:35;22472:1;22469;22465:9;22460:14;;22295:185;;;;:::o;22486:194::-;22526:4;22546:20;22564:1;22546:20;:::i;:::-;22541:25;;22580:20;22598:1;22580:20;:::i;:::-;22575:25;;22624:1;22621;22617:9;22609:17;;22648:1;22642:4;22639:11;22636:37;;;22653:18;;:::i;:::-;22636:37;22486:194;;;;:::o;22686:220::-;22826:34;22822:1;22814:6;22810:14;22803:58;22895:3;22890:2;22882:6;22878:15;22871:28;22686:220;:::o;22912:366::-;23054:3;23075:67;23139:2;23134:3;23075:67;:::i;:::-;23068:74;;23151:93;23240:3;23151:93;:::i;:::-;23269:2;23264:3;23260:12;23253:19;;22912:366;;;:::o;23284:419::-;23450:4;23488:2;23477:9;23473:18;23465:26;;23537:9;23531:4;23527:20;23523:1;23512:9;23508:17;23501:47;23565:131;23691:4;23565:131;:::i;:::-;23557:139;;23284:419;;;:::o;23709:221::-;23849:34;23845:1;23837:6;23833:14;23826:58;23918:4;23913:2;23905:6;23901:15;23894:29;23709:221;:::o;23936:366::-;24078:3;24099:67;24163:2;24158:3;24099:67;:::i;:::-;24092:74;;24175:93;24264:3;24175:93;:::i;:::-;24293:2;24288:3;24284:12;24277:19;;23936:366;;;:::o;24308:419::-;24474:4;24512:2;24501:9;24497:18;24489:26;;24561:9;24555:4;24551:20;24547:1;24536:9;24532:17;24525:47;24589:131;24715:4;24589:131;:::i;:::-;24581:139;;24308:419;;;:::o;24733:143::-;24790:5;24821:6;24815:13;24806:22;;24837:33;24864:5;24837:33;:::i;:::-;24733:143;;;;:::o;24882:351::-;24952:6;25001:2;24989:9;24980:7;24976:23;24972:32;24969:119;;;25007:79;;:::i;:::-;24969:119;25127:1;25152:64;25208:7;25199:6;25188:9;25184:22;25152:64;:::i;:::-;25142:74;;25098:128;24882:351;;;;:::o;25239:85::-;25284:7;25313:5;25302:16;;25239:85;;;:::o;25330:158::-;25388:9;25421:61;25439:42;25448:32;25474:5;25448:32;:::i;:::-;25439:42;:::i;:::-;25421:61;:::i;:::-;25408:74;;25330:158;;;:::o;25494:147::-;25589:45;25628:5;25589:45;:::i;:::-;25584:3;25577:58;25494:147;;:::o;25647:114::-;25714:6;25748:5;25742:12;25732:22;;25647:114;;;:::o;25767:184::-;25866:11;25900:6;25895:3;25888:19;25940:4;25935:3;25931:14;25916:29;;25767:184;;;;:::o;25957:132::-;26024:4;26047:3;26039:11;;26077:4;26072:3;26068:14;26060:22;;25957:132;;;:::o;26095:108::-;26172:24;26190:5;26172:24;:::i;:::-;26167:3;26160:37;26095:108;;:::o;26209:179::-;26278:10;26299:46;26341:3;26333:6;26299:46;:::i;:::-;26377:4;26372:3;26368:14;26354:28;;26209:179;;;;:::o;26394:113::-;26464:4;26496;26491:3;26487:14;26479:22;;26394:113;;;:::o;26543:732::-;26662:3;26691:54;26739:5;26691:54;:::i;:::-;26761:86;26840:6;26835:3;26761:86;:::i;:::-;26754:93;;26871:56;26921:5;26871:56;:::i;:::-;26950:7;26981:1;26966:284;26991:6;26988:1;26985:13;26966:284;;;27067:6;27061:13;27094:63;27153:3;27138:13;27094:63;:::i;:::-;27087:70;;27180:60;27233:6;27180:60;:::i;:::-;27170:70;;27026:224;27013:1;27010;27006:9;27001:14;;26966:284;;;26970:14;27266:3;27259:10;;26667:608;;;26543:732;;;;:::o;27281:831::-;27544:4;27582:3;27571:9;27567:19;27559:27;;27596:71;27664:1;27653:9;27649:17;27640:6;27596:71;:::i;:::-;27677:80;27753:2;27742:9;27738:18;27729:6;27677:80;:::i;:::-;27804:9;27798:4;27794:20;27789:2;27778:9;27774:18;27767:48;27832:108;27935:4;27926:6;27832:108;:::i;:::-;27824:116;;27950:72;28018:2;28007:9;28003:18;27994:6;27950:72;:::i;:::-;28032:73;28100:3;28089:9;28085:19;28076:6;28032:73;:::i;:::-;27281:831;;;;;;;;:::o;28118:147::-;28219:11;28256:3;28241:18;;28118:147;;;;:::o;28271:114::-;;:::o;28391:398::-;28550:3;28571:83;28652:1;28647:3;28571:83;:::i;:::-;28564:90;;28663:93;28752:3;28663:93;:::i;:::-;28781:1;28776:3;28772:11;28765:18;;28391:398;;;:::o;28795:379::-;28979:3;29001:147;29144:3;29001:147;:::i;:::-;28994:154;;29165:3;29158:10;;28795:379;;;:::o;29180:224::-;29320:34;29316:1;29308:6;29304:14;29297:58;29389:7;29384:2;29376:6;29372:15;29365:32;29180:224;:::o;29410:366::-;29552:3;29573:67;29637:2;29632:3;29573:67;:::i;:::-;29566:74;;29649:93;29738:3;29649:93;:::i;:::-;29767:2;29762:3;29758:12;29751:19;;29410:366;;;:::o;29782:419::-;29948:4;29986:2;29975:9;29971:18;29963:26;;30035:9;30029:4;30025:20;30021:1;30010:9;30006:17;29999:47;30063:131;30189:4;30063:131;:::i;:::-;30055:139;;29782:419;;;:::o;30207:222::-;30347:34;30343:1;30335:6;30331:14;30324:58;30416:5;30411:2;30403:6;30399:15;30392:30;30207:222;:::o;30435:366::-;30577:3;30598:67;30662:2;30657:3;30598:67;:::i;:::-;30591:74;;30674:93;30763:3;30674:93;:::i;:::-;30792:2;30787:3;30783:12;30776:19;;30435:366;;;:::o;30807:419::-;30973:4;31011:2;31000:9;30996:18;30988:26;;31060:9;31054:4;31050:20;31046:1;31035:9;31031:17;31024:47;31088:131;31214:4;31088:131;:::i;:::-;31080:139;;30807:419;;;:::o;31232:225::-;31372:34;31368:1;31360:6;31356:14;31349:58;31441:8;31436:2;31428:6;31424:15;31417:33;31232:225;:::o;31463:366::-;31605:3;31626:67;31690:2;31685:3;31626:67;:::i;:::-;31619:74;;31702:93;31791:3;31702:93;:::i;:::-;31820:2;31815:3;31811:12;31804:19;;31463:366;;;:::o;31835:419::-;32001:4;32039:2;32028:9;32024:18;32016:26;;32088:9;32082:4;32078:20;32074:1;32063:9;32059:17;32052:47;32116:131;32242:4;32116:131;:::i;:::-;32108:139;;31835:419;;;:::o

Swarm Source

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