Token RUG TOKEN

MEME 

Overview ERC20

Price
$0.00 @ 0.000000 AVAX
Fully Diluted Market Cap
Total Supply:
40,690,000,000,069.999999 RUGG

Holders:
4,974 addresses
Balance
0 RUGG

Value
$0.00
0x4843078afef587a18b27734d842e229c35da1719
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

RUG was made to stimulate the AVAX NFT


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

Contract Source Code Verified (Exact Match)

Contract Name:
rugtoken

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: MIT

// 00000000000000000000000000000000000000000000000000000000000
// 0                                                  &&&&&&&0
// 0                                                &&()&&()&0
// 0                                                &&&___&&&0
// 0        $RUG TOKEN                             &&&&&&&&&&0
// 0                                              &&&# &&&&&&0
// 0      FOR THE CULTURE                       &&&/    &&&&&0
// 0                                           &&,        &&&0
// 0                                        &&&            &&0
// 0                               &&&&&&&&&&,             &&0
// 0                    &&&&&&&&&&&%%%%%&%%&%&&&          && 0
// 0         %%%%%%%%%%%(((#&&&&&&&&&&&&&&&&%%&%&&&     &&&  0
// 0   %%%%%%((((((%%%%##/*//(((%%%%%%%##%&&&&&%&&%&&. &&    0
// 0 %%@%((##(#%%((%%((*/((###%##((//(#%&&&&%&&&&&%%&&&&     0
// 0   %%%%(%%%%%%%#*//////////////*#%%%/#&&&&%%%%%&&&&&     0
// 0     %%%%((%%%%%%%%%%%%%%%%%%%%%((((%%%%%&&&&&&          0
// 0        %%%%(%%%%%%%(((((%%%%%%%%%%%                     0
// 0           %%%%(%%%%%%%%%*                               0
// 0             %%%                                         0
// 00000000000000000000000000000000000000000000000000000000000


// 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// 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.8.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.openzeppelin.com/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, allowance(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 = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * 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: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


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

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: rug_token_v2.sol


pragma solidity ^0.8.16;






contract rugtoken is
    ERC20,
    ERC20Burnable,
    Pausable,
    Ownable
    {
    uint256 public maxSupply;
    uint256 public price;


    //the beacon contract is initialized with the name, symbol, max supply and addresses with roles
    //when deploying proxies, provide the above values as constructor arguments
    //set max supply to 0 if there is no max supply
    //set transfer tax to 0 if there is no transfer tax
    //set tax receiver to 0x0 if there is no tax receiver

    constructor() ERC20("RUG TOKEN", "RUGG") {
        maxSupply = 99690420000000 * 10**decimals();
        price = 0.00001 ether;
        _pause();
    }


    function mint(address to, uint256 amount)
        public
        onlyOwner
    {
        require(totalSupply() + amount*10**decimals() <= maxSupply, "Max supply reached");
        _mint(to, amount*10**decimals());
    }

    function airdrop(address[] memory recipients, uint256[] memory amounts)
        public
        onlyOwner
    {
        require(
            recipients.length == amounts.length,
            "recipients and amounts must be of same length"
        );
        for (uint256 i = 0; i < recipients.length; i++) {
            mint(recipients[i], amounts[i]);
        }
    }
        function airdrop(address[] memory recipients, uint256 amount)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < recipients.length; i++) {
            mint(recipients[i], amount);
        }
    }


    function setPrice(uint256 price_)
        public
        onlyOwner
    {
        price = price_;
    }

    function buy() public payable whenNotPaused {
        require(msg.value > 0, "Value must be greater than 0");
        uint256 amount = msg.value / price;
        _mint(msg.sender, amount * 10**decimals());
    }

    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Balance must be greater than 0");
        payable(msg.sender).transfer(balance);
    }

    function withdrawERC20(address tokenAddress) public onlyOwner {
        IERC20 token = IERC20(tokenAddress);
        uint256 balance = token.balanceOf(address(this));
        require(balance > 0, "Balance must be greater than 0");
        token.transfer(msg.sender, balance);
    }



    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buy","outputs":[],"stateMutability":"payable","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600981526020017f52554720544f4b454e00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f525547470000000000000000000000000000000000000000000000000000000081525081600390816200008f91906200056b565b508060049081620000a191906200056b565b5050506000600560006101000a81548160ff021916908315150217905550620000df620000d36200013960201b60201c565b6200014160201b60201c565b620000ef6200020760201b60201c565b600a620000fd9190620007e2565b655aaafc12550062000110919062000833565b6006819055506509184e72a000600781905550620001336200021060201b60201c565b62000979565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b620002206200028560201b60201c565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200026c6200013960201b60201c565b6040516200027b9190620008d9565b60405180910390a1565b62000295620002da60201b60201c565b15620002d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002cf9062000957565b60405180910390fd5b565b6000600560009054906101000a900460ff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200037357607f821691505b6020821081036200038957620003886200032b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003b4565b620003ff8683620003b4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200044c62000446620004408462000417565b62000421565b62000417565b9050919050565b6000819050919050565b62000468836200042b565b62000480620004778262000453565b848454620003c1565b825550505050565b600090565b6200049762000488565b620004a48184846200045d565b505050565b5b81811015620004cc57620004c06000826200048d565b600181019050620004aa565b5050565b601f8211156200051b57620004e5816200038f565b620004f084620003a4565b8101602085101562000500578190505b620005186200050f85620003a4565b830182620004a9565b50505b505050565b600082821c905092915050565b6000620005406000198460080262000520565b1980831691505092915050565b60006200055b83836200052d565b9150826002028217905092915050565b6200057682620002f1565b67ffffffffffffffff811115620005925762000591620002fc565b5b6200059e82546200035a565b620005ab828285620004d0565b600060209050601f831160018114620005e35760008415620005ce578287015190505b620005da85826200054d565b8655506200064a565b601f198416620005f3866200038f565b60005b828110156200061d57848901518255600182019150602085019450602081019050620005f6565b868310156200063d578489015162000639601f8916826200052d565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620006e057808604811115620006b857620006b762000652565b5b6001851615620006c85780820291505b8081029050620006d88562000681565b945062000698565b94509492505050565b600082620006fb5760019050620007ce565b816200070b5760009050620007ce565b81600181146200072457600281146200072f5762000765565b6001915050620007ce565b60ff84111562000744576200074362000652565b5b8360020a9150848211156200075e576200075d62000652565b5b50620007ce565b5060208310610133831016604e8410600b84101617156200079f5782820a90508381111562000799576200079862000652565b5b620007ce565b620007ae84848460016200068e565b92509050818404811115620007c857620007c762000652565b5b81810290505b9392505050565b600060ff82169050919050565b6000620007ef8262000417565b9150620007fc83620007d5565b92506200082b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620006e9565b905092915050565b6000620008408262000417565b91506200084d8362000417565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000889576200088862000652565b5b828202905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008c18262000894565b9050919050565b620008d381620008b4565b82525050565b6000602082019050620008f06000830184620008c8565b92915050565b600082825260208201905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006200093f601083620008f6565b91506200094c8262000907565b602082019050919050565b60006020820190508181036000830152620009728162000930565b9050919050565b612d4380620009896000396000f3fe6080604052600436106101b75760003560e01c806379cc6790116100ec578063a6f2ae3a1161008a578063d5abeb0111610064578063d5abeb01146105b3578063dd62ed3e146105de578063f2fde38b1461061b578063f4f3b20014610644576101b7565b8063a6f2ae3a14610543578063a9059cbb1461054d578063c204642c1461058a576101b7565b806391b7f5ed116100c657806391b7f5ed1461048757806395d89b41146104b0578063a035b1fe146104db578063a457c2d714610506576101b7565b806379cc67901461041c5780638456cb59146104455780638da5cb5b1461045c576101b7565b80633f4ba83a116101595780635c975abb116101335780635c975abb14610374578063672434821461039f57806370a08231146103c8578063715018a614610405576101b7565b80633f4ba83a1461030b57806340c10f191461032257806342966c681461034b576101b7565b806323b872dd1161019557806323b872dd1461024f578063313ce5671461028c57806339509351146102b75780633ccfd60b146102f4576101b7565b806306fdde03146101bc578063095ea7b3146101e757806318160ddd14610224575b600080fd5b3480156101c857600080fd5b506101d161066d565b6040516101de9190611a2c565b60405180910390f35b3480156101f357600080fd5b5061020e60048036038101906102099190611af6565b6106ff565b60405161021b9190611b51565b60405180910390f35b34801561023057600080fd5b50610239610722565b6040516102469190611b7b565b60405180910390f35b34801561025b57600080fd5b5061027660048036038101906102719190611b96565b61072c565b6040516102839190611b51565b60405180910390f35b34801561029857600080fd5b506102a161075b565b6040516102ae9190611c05565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d99190611af6565b610764565b6040516102eb9190611b51565b60405180910390f35b34801561030057600080fd5b5061030961079b565b005b34801561031757600080fd5b50610320610835565b005b34801561032e57600080fd5b5061034960048036038101906103449190611af6565b610847565b005b34801561035757600080fd5b50610372600480360381019061036d9190611c20565b6108f0565b005b34801561038057600080fd5b50610389610904565b6040516103969190611b51565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190611e58565b61091b565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190611ed0565b6109c9565b6040516103fc9190611b7b565b60405180910390f35b34801561041157600080fd5b5061041a610a11565b005b34801561042857600080fd5b50610443600480360381019061043e9190611af6565b610a25565b005b34801561045157600080fd5b5061045a610a45565b005b34801561046857600080fd5b50610471610a57565b60405161047e9190611f0c565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a99190611c20565b610a81565b005b3480156104bc57600080fd5b506104c5610a93565b6040516104d29190611a2c565b60405180910390f35b3480156104e757600080fd5b506104f0610b25565b6040516104fd9190611b7b565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190611af6565b610b2b565b60405161053a9190611b51565b60405180910390f35b61054b610ba2565b005b34801561055957600080fd5b50610574600480360381019061056f9190611af6565b610c2a565b6040516105819190611b51565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190611f27565b610c4d565b005b3480156105bf57600080fd5b506105c8610c9d565b6040516105d59190611b7b565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190611f83565b610ca3565b6040516106129190611b7b565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d9190611ed0565b610d2a565b005b34801561065057600080fd5b5061066b60048036038101906106669190611ed0565b610dad565b005b60606003805461067c90611ff2565b80601f01602080910402602001604051908101604052809291908181526020018280546106a890611ff2565b80156106f55780601f106106ca576101008083540402835291602001916106f5565b820191906000526020600020905b8154815290600101906020018083116106d857829003601f168201915b5050505050905090565b60008061070a610eff565b9050610717818585610f07565b600191505092915050565b6000600254905090565b600080610737610eff565b90506107448582856110d0565b61074f85858561115c565b60019150509392505050565b60006012905090565b60008061076f610eff565b90506107908185856107818589610ca3565b61078b9190612052565b610f07565b600191505092915050565b6107a36113d2565b6000479050600081116107eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e2906120d2565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610831573d6000803e3d6000fd5b5050565b61083d6113d2565b610845611450565b565b61084f6113d2565b60065461085a61075b565b600a6108669190612225565b826108719190612270565b610879610722565b6108839190612052565b11156108c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bb90612316565b60405180910390fd5b6108ec826108d061075b565b600a6108dc9190612225565b836108e79190612270565b6114b3565b5050565b6109016108fb610eff565b82611609565b50565b6000600560009054906101000a900460ff16905090565b6109236113d2565b8051825114610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095e906123a8565b60405180910390fd5b60005b82518110156109c4576109b1838281518110610989576109886123c8565b5b60200260200101518383815181106109a4576109a36123c8565b5b6020026020010151610847565b80806109bc906123f7565b91505061096a565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a196113d2565b610a2360006117d6565b565b610a3782610a31610eff565b836110d0565b610a418282611609565b5050565b610a4d6113d2565b610a5561189c565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a896113d2565b8060078190555050565b606060048054610aa290611ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ace90611ff2565b8015610b1b5780601f10610af057610100808354040283529160200191610b1b565b820191906000526020600020905b815481529060010190602001808311610afe57829003601f168201915b5050505050905090565b60075481565b600080610b36610eff565b90506000610b448286610ca3565b905083811015610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b80906124b1565b60405180910390fd5b610b968286868403610f07565b60019250505092915050565b610baa6118ff565b60003411610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be49061251d565b60405180910390fd5b600060075434610bfd919061256c565b9050610c2733610c0b61075b565b600a610c179190612225565b83610c229190612270565b6114b3565b50565b600080610c35610eff565b9050610c4281858561115c565b600191505092915050565b610c556113d2565b60005b8251811015610c9857610c85838281518110610c7757610c766123c8565b5b602002602001015183610847565b8080610c90906123f7565b915050610c58565b505050565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d326113d2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d989061260f565b60405180910390fd5b610daa816117d6565b50565b610db56113d2565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610df59190611f0c565b602060405180830381865afa158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e369190612644565b905060008111610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e72906120d2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610eb6929190612671565b6020604051808303816000875af1158015610ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef991906126c6565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90612765565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc906127f7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110c39190611b7b565b60405180910390a3505050565b60006110dc8484610ca3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111565781811015611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90612863565b60405180910390fd5b6111558484848403610f07565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c2906128f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123190612987565b60405180910390fd5b611245838383611949565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290612a19565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113b99190611b7b565b60405180910390a36113cc84848461194e565b50505050565b6113da610eff565b73ffffffffffffffffffffffffffffffffffffffff166113f8610a57565b73ffffffffffffffffffffffffffffffffffffffff161461144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590612a85565b60405180910390fd5b565b611458611953565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61149c610eff565b6040516114a99190611f0c565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990612af1565b60405180910390fd5b61152e60008383611949565b80600260008282546115409190612052565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115f19190611b7b565b60405180910390a36116056000838361194e565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90612b83565b60405180910390fd5b61168482600083611949565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190612c15565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117bd9190611b7b565b60405180910390a36117d18360008461194e565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6118a46118ff565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118e8610eff565b6040516118f59190611f0c565b60405180910390a1565b611907610904565b15611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e90612c81565b60405180910390fd5b565b505050565b505050565b61195b610904565b61199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612ced565b60405180910390fd5b565b600081519050919050565b600082825260208201905092915050565b60005b838110156119d65780820151818401526020810190506119bb565b60008484015250505050565b6000601f19601f8301169050919050565b60006119fe8261199c565b611a0881856119a7565b9350611a188185602086016119b8565b611a21816119e2565b840191505092915050565b60006020820190508181036000830152611a4681846119f3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a8d82611a62565b9050919050565b611a9d81611a82565b8114611aa857600080fd5b50565b600081359050611aba81611a94565b92915050565b6000819050919050565b611ad381611ac0565b8114611ade57600080fd5b50565b600081359050611af081611aca565b92915050565b60008060408385031215611b0d57611b0c611a58565b5b6000611b1b85828601611aab565b9250506020611b2c85828601611ae1565b9150509250929050565b60008115159050919050565b611b4b81611b36565b82525050565b6000602082019050611b666000830184611b42565b92915050565b611b7581611ac0565b82525050565b6000602082019050611b906000830184611b6c565b92915050565b600080600060608486031215611baf57611bae611a58565b5b6000611bbd86828701611aab565b9350506020611bce86828701611aab565b9250506040611bdf86828701611ae1565b9150509250925092565b600060ff82169050919050565b611bff81611be9565b82525050565b6000602082019050611c1a6000830184611bf6565b92915050565b600060208284031215611c3657611c35611a58565b5b6000611c4484828501611ae1565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c8a826119e2565b810181811067ffffffffffffffff82111715611ca957611ca8611c52565b5b80604052505050565b6000611cbc611a4e565b9050611cc88282611c81565b919050565b600067ffffffffffffffff821115611ce857611ce7611c52565b5b602082029050602081019050919050565b600080fd5b6000611d11611d0c84611ccd565b611cb2565b90508083825260208201905060208402830185811115611d3457611d33611cf9565b5b835b81811015611d5d5780611d498882611aab565b845260208401935050602081019050611d36565b5050509392505050565b600082601f830112611d7c57611d7b611c4d565b5b8135611d8c848260208601611cfe565b91505092915050565b600067ffffffffffffffff821115611db057611daf611c52565b5b602082029050602081019050919050565b6000611dd4611dcf84611d95565b611cb2565b90508083825260208201905060208402830185811115611df757611df6611cf9565b5b835b81811015611e205780611e0c8882611ae1565b845260208401935050602081019050611df9565b5050509392505050565b600082601f830112611e3f57611e3e611c4d565b5b8135611e4f848260208601611dc1565b91505092915050565b60008060408385031215611e6f57611e6e611a58565b5b600083013567ffffffffffffffff811115611e8d57611e8c611a5d565b5b611e9985828601611d67565b925050602083013567ffffffffffffffff811115611eba57611eb9611a5d565b5b611ec685828601611e2a565b9150509250929050565b600060208284031215611ee657611ee5611a58565b5b6000611ef484828501611aab565b91505092915050565b611f0681611a82565b82525050565b6000602082019050611f216000830184611efd565b92915050565b60008060408385031215611f3e57611f3d611a58565b5b600083013567ffffffffffffffff811115611f5c57611f5b611a5d565b5b611f6885828601611d67565b9250506020611f7985828601611ae1565b9150509250929050565b60008060408385031215611f9a57611f99611a58565b5b6000611fa885828601611aab565b9250506020611fb985828601611aab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061200a57607f821691505b60208210810361201d5761201c611fc3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061205d82611ac0565b915061206883611ac0565b92508282019050808211156120805761207f612023565b5b92915050565b7f42616c616e6365206d7573742062652067726561746572207468616e20300000600082015250565b60006120bc601e836119a7565b91506120c782612086565b602082019050919050565b600060208201905081810360008301526120eb816120af565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156121495780860481111561212557612124612023565b5b60018516156121345780820291505b8081029050612142856120f2565b9450612109565b94509492505050565b600082612162576001905061221e565b81612170576000905061221e565b81600181146121865760028114612190576121bf565b600191505061221e565b60ff8411156121a2576121a1612023565b5b8360020a9150848211156121b9576121b8612023565b5b5061221e565b5060208310610133831016604e8410600b84101617156121f45782820a9050838111156121ef576121ee612023565b5b61221e565b61220184848460016120ff565b9250905081840481111561221857612217612023565b5b81810290505b9392505050565b600061223082611ac0565b915061223b83611be9565b92506122687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612152565b905092915050565b600061227b82611ac0565b915061228683611ac0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156122bf576122be612023565b5b828202905092915050565b7f4d617820737570706c7920726561636865640000000000000000000000000000600082015250565b60006123006012836119a7565b915061230b826122ca565b602082019050919050565b6000602082019050818103600083015261232f816122f3565b9050919050565b7f726563697069656e747320616e6420616d6f756e7473206d757374206265206f60008201527f662073616d65206c656e67746800000000000000000000000000000000000000602082015250565b6000612392602d836119a7565b915061239d82612336565b604082019050919050565b600060208201905081810360008301526123c181612385565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061240282611ac0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361243457612433612023565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061249b6025836119a7565b91506124a68261243f565b604082019050919050565b600060208201905081810360008301526124ca8161248e565b9050919050565b7f56616c7565206d7573742062652067726561746572207468616e203000000000600082015250565b6000612507601c836119a7565b9150612512826124d1565b602082019050919050565b60006020820190508181036000830152612536816124fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061257782611ac0565b915061258283611ac0565b9250826125925761259161253d565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006125f96026836119a7565b91506126048261259d565b604082019050919050565b60006020820190508181036000830152612628816125ec565b9050919050565b60008151905061263e81611aca565b92915050565b60006020828403121561265a57612659611a58565b5b60006126688482850161262f565b91505092915050565b60006040820190506126866000830185611efd565b6126936020830184611b6c565b9392505050565b6126a381611b36565b81146126ae57600080fd5b50565b6000815190506126c08161269a565b92915050565b6000602082840312156126dc576126db611a58565b5b60006126ea848285016126b1565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061274f6024836119a7565b915061275a826126f3565b604082019050919050565b6000602082019050818103600083015261277e81612742565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006127e16022836119a7565b91506127ec82612785565b604082019050919050565b60006020820190508181036000830152612810816127d4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061284d601d836119a7565b915061285882612817565b602082019050919050565b6000602082019050818103600083015261287c81612840565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006128df6025836119a7565b91506128ea82612883565b604082019050919050565b6000602082019050818103600083015261290e816128d2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006129716023836119a7565b915061297c82612915565b604082019050919050565b600060208201905081810360008301526129a081612964565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612a036026836119a7565b9150612a0e826129a7565b604082019050919050565b60006020820190508181036000830152612a32816129f6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a6f6020836119a7565b9150612a7a82612a39565b602082019050919050565b60006020820190508181036000830152612a9e81612a62565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612adb601f836119a7565b9150612ae682612aa5565b602082019050919050565b60006020820190508181036000830152612b0a81612ace565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b6d6021836119a7565b9150612b7882612b11565b604082019050919050565b60006020820190508181036000830152612b9c81612b60565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bff6022836119a7565b9150612c0a82612ba3565b604082019050919050565b60006020820190508181036000830152612c2e81612bf2565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612c6b6010836119a7565b9150612c7682612c35565b602082019050919050565b60006020820190508181036000830152612c9a81612c5e565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000612cd76014836119a7565b9150612ce282612ca1565b602082019050919050565b60006020820190508181036000830152612d0681612cca565b905091905056fea2646970667358221220b1c41e422a1321cc1053c4c0687fbeb371764e196a49b952ebe385073c0c8e8964736f6c63430008100033

Deployed ByteCode Sourcemap

25745:2513:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13324:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15675:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14444:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16456:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14286:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17160:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27607:208;;;;;;;;;;;;;:::i;:::-;;28190:65;;;;;;;;;;;;;:::i;:::-;;26417:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25095:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6584:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26650:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14615:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4094:103;;;;;;;;;;;;;:::i;:::-;;25505:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28121:61;;;;;;;;;;;;;:::i;:::-;;3446:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27269:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13543:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25869:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17901:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27384:215;;;:::i;:::-;;14948:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27037:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25838:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15204:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4352:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27823:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13324:100;13378:13;13411:5;13404:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13324:100;:::o;15675:201::-;15758:4;15775:13;15791:12;:10;:12::i;:::-;15775:28;;15814:32;15823:5;15830:7;15839:6;15814:8;:32::i;:::-;15864:4;15857:11;;;15675:201;;;;:::o;14444:108::-;14505:7;14532:12;;14525:19;;14444:108;:::o;16456:295::-;16587:4;16604:15;16622:12;:10;:12::i;:::-;16604:30;;16645:38;16661:4;16667:7;16676:6;16645:15;:38::i;:::-;16694:27;16704:4;16710:2;16714:6;16694:9;:27::i;:::-;16739:4;16732:11;;;16456:295;;;;;:::o;14286:93::-;14344:5;14369:2;14362:9;;14286:93;:::o;17160:238::-;17248:4;17265:13;17281:12;:10;:12::i;:::-;17265:28;;17304:64;17313:5;17320:7;17357:10;17329:25;17339:5;17346:7;17329:9;:25::i;:::-;:38;;;;:::i;:::-;17304:8;:64::i;:::-;17386:4;17379:11;;;17160:238;;;;:::o;27607:208::-;3332:13;:11;:13::i;:::-;27655:15:::1;27673:21;27655:39;;27723:1;27713:7;:11;27705:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27778:10;27770:28;;:37;27799:7;27770:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27644:171;27607:208::o:0;28190:65::-;3332:13;:11;:13::i;:::-;28237:10:::1;:8;:10::i;:::-;28190:65::o:0;26417:225::-;3332:13;:11;:13::i;:::-;26559:9:::1;;26545:10;:8;:10::i;:::-;26541:2;:14;;;;:::i;:::-;26534:6;:21;;;;:::i;:::-;26518:13;:11;:13::i;:::-;:37;;;;:::i;:::-;:50;;26510:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26602:32;26608:2;26623:10;:8;:10::i;:::-;26619:2;:14;;;;:::i;:::-;26612:6;:21;;;;:::i;:::-;26602:5;:32::i;:::-;26417:225:::0;;:::o;25095:91::-;25151:27;25157:12;:10;:12::i;:::-;25171:6;25151:5;:27::i;:::-;25095:91;:::o;6584:86::-;6631:4;6655:7;;;;;;;;;;;6648:14;;6584:86;:::o;26650:377::-;3332:13;:11;:13::i;:::-;26816:7:::1;:14;26795:10;:17;:35;26773:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;26919:9;26914:106;26938:10;:17;26934:1;:21;26914:106;;;26977:31;26982:10;26993:1;26982:13;;;;;;;;:::i;:::-;;;;;;;;26997:7;27005:1;26997:10;;;;;;;;:::i;:::-;;;;;;;;26977:4;:31::i;:::-;26957:3;;;;;:::i;:::-;;;;26914:106;;;;26650:377:::0;;:::o;14615:127::-;14689:7;14716:9;:18;14726:7;14716:18;;;;;;;;;;;;;;;;14709:25;;14615:127;;;:::o;4094:103::-;3332:13;:11;:13::i;:::-;4159:30:::1;4186:1;4159:18;:30::i;:::-;4094:103::o:0;25505:164::-;25582:46;25598:7;25607:12;:10;:12::i;:::-;25621:6;25582:15;:46::i;:::-;25639:22;25645:7;25654:6;25639:5;:22::i;:::-;25505:164;;:::o;28121:61::-;3332:13;:11;:13::i;:::-;28166:8:::1;:6;:8::i;:::-;28121:61::o:0;3446:87::-;3492:7;3519:6;;;;;;;;;;;3512:13;;3446:87;:::o;27269:107::-;3332:13;:11;:13::i;:::-;27362:6:::1;27354:5;:14;;;;27269:107:::0;:::o;13543:104::-;13599:13;13632:7;13625:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13543:104;:::o;25869:20::-;;;;:::o;17901:436::-;17994:4;18011:13;18027:12;:10;:12::i;:::-;18011:28;;18050:24;18077:25;18087:5;18094:7;18077:9;:25::i;:::-;18050:52;;18141:15;18121:16;:35;;18113:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18234:60;18243:5;18250:7;18278:15;18259:16;:34;18234:8;:60::i;:::-;18325:4;18318:11;;;;17901:436;;;;:::o;27384:215::-;6189:19;:17;:19::i;:::-;27459:1:::1;27447:9;:13;27439:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27504:14;27533:5;;27521:9;:17;;;;:::i;:::-;27504:34;;27549:42;27555:10;27580;:8;:10::i;:::-;27576:2;:14;;;;:::i;:::-;27567:6;:23;;;;:::i;:::-;27549:5;:42::i;:::-;27428:171;27384:215::o:0;14948:193::-;15027:4;15044:13;15060:12;:10;:12::i;:::-;15044:28;;15083;15093:5;15100:2;15104:6;15083:9;:28::i;:::-;15129:4;15122:11;;;14948:193;;;;:::o;27037:222::-;3332:13;:11;:13::i;:::-;27155:9:::1;27150:102;27174:10;:17;27170:1;:21;27150:102;;;27213:27;27218:10;27229:1;27218:13;;;;;;;;:::i;:::-;;;;;;;;27233:6;27213:4;:27::i;:::-;27193:3;;;;;:::i;:::-;;;;27150:102;;;;27037:222:::0;;:::o;25838:24::-;;;;:::o;15204:151::-;15293:7;15320:11;:18;15332:5;15320:18;;;;;;;;;;;;;;;:27;15339:7;15320:27;;;;;;;;;;;;;;;;15313:34;;15204:151;;;;:::o;4352:201::-;3332:13;:11;:13::i;:::-;4461:1:::1;4441:22;;:8;:22;;::::0;4433:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4517:28;4536:8;4517:18;:28::i;:::-;4352:201:::0;:::o;27823:286::-;3332:13;:11;:13::i;:::-;27896:12:::1;27918;27896:35;;27942:15;27960:5;:15;;;27984:4;27960:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27942:48;;28019:1;28009:7;:11;28001:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;28066:5;:14;;;28081:10;28093:7;28066:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27885:224;;27823:286:::0;:::o;1997:98::-;2050:7;2077:10;2070:17;;1997:98;:::o;21928:380::-;22081:1;22064:19;;:5;:19;;;22056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22162:1;22143:21;;:7;:21;;;22135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22246:6;22216:11;:18;22228:5;22216:18;;;;;;;;;;;;;;;:27;22235:7;22216:27;;;;;;;;;;;;;;;:36;;;;22284:7;22268:32;;22277:5;22268:32;;;22293:6;22268:32;;;;;;:::i;:::-;;;;;;;;21928:380;;;:::o;22599:453::-;22734:24;22761:25;22771:5;22778:7;22761:9;:25::i;:::-;22734:52;;22821:17;22801:16;:37;22797:248;;22883:6;22863:16;:26;;22855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22967:51;22976:5;22983:7;23011:6;22992:16;:25;22967:8;:51::i;:::-;22797:248;22723:329;22599:453;;;:::o;18807:840::-;18954:1;18938:18;;:4;:18;;;18930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19031:1;19017:16;;:2;:16;;;19009:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19086:38;19107:4;19113:2;19117:6;19086:20;:38::i;:::-;19137:19;19159:9;:15;19169:4;19159:15;;;;;;;;;;;;;;;;19137:37;;19208:6;19193:11;:21;;19185:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;19325:6;19311:11;:20;19293:9;:15;19303:4;19293:15;;;;;;;;;;;;;;;:38;;;;19528:6;19511:9;:13;19521:2;19511:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;19578:2;19563:26;;19572:4;19563:26;;;19582:6;19563:26;;;;;;:::i;:::-;;;;;;;;19602:37;19622:4;19628:2;19632:6;19602:19;:37::i;:::-;18919:728;18807:840;;;:::o;3611:132::-;3686:12;:10;:12::i;:::-;3675:23;;:7;:5;:7::i;:::-;:23;;;3667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3611:132::o;7439:120::-;6448:16;:14;:16::i;:::-;7508:5:::1;7498:7;;:15;;;;;;;;;;;;;;;;;;7529:22;7538:12;:10;:12::i;:::-;7529:22;;;;;;:::i;:::-;;;;;;;;7439:120::o:0;19934:548::-;20037:1;20018:21;;:7;:21;;;20010:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20088:49;20117:1;20121:7;20130:6;20088:20;:49::i;:::-;20166:6;20150:12;;:22;;;;;;;:::i;:::-;;;;;;;;20343:6;20321:9;:18;20331:7;20321:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;20397:7;20376:37;;20393:1;20376:37;;;20406:6;20376:37;;;;;;:::i;:::-;;;;;;;;20426:48;20454:1;20458:7;20467:6;20426:19;:48::i;:::-;19934:548;;:::o;20815:675::-;20918:1;20899:21;;:7;:21;;;20891:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20971:49;20992:7;21009:1;21013:6;20971:20;:49::i;:::-;21033:22;21058:9;:18;21068:7;21058:18;;;;;;;;;;;;;;;;21033:43;;21113:6;21095:14;:24;;21087:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21232:6;21215:14;:23;21194:9;:18;21204:7;21194:18;;;;;;;;;;;;;;;:44;;;;21349:6;21333:12;;:22;;;;;;;;;;;21410:1;21384:37;;21393:7;21384:37;;;21414:6;21384:37;;;;;;:::i;:::-;;;;;;;;21434:48;21454:7;21471:1;21475:6;21434:19;:48::i;:::-;20880:610;20815:675;;:::o;4713:191::-;4787:16;4806:6;;;;;;;;;;;4787:25;;4832:8;4823:6;;:17;;;;;;;;;;;;;;;;;;4887:8;4856:40;;4877:8;4856:40;;;;;;;;;;;;4776:128;4713:191;:::o;7180:118::-;6189:19;:17;:19::i;:::-;7250:4:::1;7240:7;;:14;;;;;;;;;;;;;;;;;;7270:20;7277:12;:10;:12::i;:::-;7270:20;;;;;;:::i;:::-;;;;;;;;7180:118::o:0;6743:108::-;6814:8;:6;:8::i;:::-;6813:9;6805:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6743:108::o;23652:125::-;;;;:::o;24381:124::-;;;;:::o;6928:108::-;6995:8;:6;:8::i;:::-;6987:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;6928:108::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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:117::-;5297:1;5294;5287:12;5311:180;5359:77;5356:1;5349:88;5456:4;5453:1;5446:15;5480:4;5477:1;5470:15;5497:281;5580:27;5602:4;5580:27;:::i;:::-;5572:6;5568:40;5710:6;5698:10;5695:22;5674:18;5662:10;5659:34;5656:62;5653:88;;;5721:18;;:::i;:::-;5653:88;5761:10;5757:2;5750:22;5540:238;5497:281;;:::o;5784:129::-;5818:6;5845:20;;:::i;:::-;5835:30;;5874:33;5902:4;5894:6;5874:33;:::i;:::-;5784:129;;;:::o;5919:311::-;5996:4;6086:18;6078:6;6075:30;6072:56;;;6108:18;;:::i;:::-;6072:56;6158:4;6150:6;6146:17;6138:25;;6218:4;6212;6208:15;6200:23;;5919:311;;;:::o;6236:117::-;6345:1;6342;6335:12;6376:710;6472:5;6497:81;6513:64;6570:6;6513:64;:::i;:::-;6497:81;:::i;:::-;6488:90;;6598:5;6627:6;6620:5;6613:21;6661:4;6654:5;6650:16;6643:23;;6714:4;6706:6;6702:17;6694:6;6690:30;6743:3;6735:6;6732:15;6729:122;;;6762:79;;:::i;:::-;6729:122;6877:6;6860:220;6894:6;6889:3;6886:15;6860:220;;;6969:3;6998:37;7031:3;7019:10;6998:37;:::i;:::-;6993:3;6986:50;7065:4;7060:3;7056:14;7049:21;;6936:144;6920:4;6915:3;6911:14;6904:21;;6860:220;;;6864:21;6478:608;;6376:710;;;;;:::o;7109:370::-;7180:5;7229:3;7222:4;7214:6;7210:17;7206:27;7196:122;;7237:79;;:::i;:::-;7196:122;7354:6;7341:20;7379:94;7469:3;7461:6;7454:4;7446:6;7442:17;7379:94;:::i;:::-;7370:103;;7186:293;7109:370;;;;:::o;7485:311::-;7562:4;7652:18;7644:6;7641:30;7638:56;;;7674:18;;:::i;:::-;7638:56;7724:4;7716:6;7712:17;7704:25;;7784:4;7778;7774:15;7766:23;;7485:311;;;:::o;7819:710::-;7915:5;7940:81;7956:64;8013:6;7956:64;:::i;:::-;7940:81;:::i;:::-;7931:90;;8041:5;8070:6;8063:5;8056:21;8104:4;8097:5;8093:16;8086:23;;8157:4;8149:6;8145:17;8137:6;8133:30;8186:3;8178:6;8175:15;8172:122;;;8205:79;;:::i;:::-;8172:122;8320:6;8303:220;8337:6;8332:3;8329:15;8303:220;;;8412:3;8441:37;8474:3;8462:10;8441:37;:::i;:::-;8436:3;8429:50;8508:4;8503:3;8499:14;8492:21;;8379:144;8363:4;8358:3;8354:14;8347:21;;8303:220;;;8307:21;7921:608;;7819:710;;;;;:::o;8552:370::-;8623:5;8672:3;8665:4;8657:6;8653:17;8649:27;8639:122;;8680:79;;:::i;:::-;8639:122;8797:6;8784:20;8822:94;8912:3;8904:6;8897:4;8889:6;8885:17;8822:94;:::i;:::-;8813:103;;8629:293;8552:370;;;;:::o;8928:894::-;9046:6;9054;9103:2;9091:9;9082:7;9078:23;9074:32;9071:119;;;9109:79;;:::i;:::-;9071:119;9257:1;9246:9;9242:17;9229:31;9287:18;9279:6;9276:30;9273:117;;;9309:79;;:::i;:::-;9273:117;9414:78;9484:7;9475:6;9464:9;9460:22;9414:78;:::i;:::-;9404:88;;9200:302;9569:2;9558:9;9554:18;9541:32;9600:18;9592:6;9589:30;9586:117;;;9622:79;;:::i;:::-;9586:117;9727:78;9797:7;9788:6;9777:9;9773:22;9727:78;:::i;:::-;9717:88;;9512:303;8928:894;;;;;:::o;9828:329::-;9887:6;9936:2;9924:9;9915:7;9911:23;9907:32;9904:119;;;9942:79;;:::i;:::-;9904:119;10062:1;10087:53;10132:7;10123:6;10112:9;10108:22;10087:53;:::i;:::-;10077:63;;10033:117;9828:329;;;;:::o;10163:118::-;10250:24;10268:5;10250:24;:::i;:::-;10245:3;10238:37;10163:118;;:::o;10287:222::-;10380:4;10418:2;10407:9;10403:18;10395:26;;10431:71;10499:1;10488:9;10484:17;10475:6;10431:71;:::i;:::-;10287:222;;;;:::o;10515:684::-;10608:6;10616;10665:2;10653:9;10644:7;10640:23;10636:32;10633:119;;;10671:79;;:::i;:::-;10633:119;10819:1;10808:9;10804:17;10791:31;10849:18;10841:6;10838:30;10835:117;;;10871:79;;:::i;:::-;10835:117;10976:78;11046:7;11037:6;11026:9;11022:22;10976:78;:::i;:::-;10966:88;;10762:302;11103:2;11129:53;11174:7;11165:6;11154:9;11150:22;11129:53;:::i;:::-;11119:63;;11074:118;10515:684;;;;;:::o;11205:474::-;11273:6;11281;11330:2;11318:9;11309:7;11305:23;11301:32;11298:119;;;11336:79;;:::i;:::-;11298:119;11456:1;11481:53;11526:7;11517:6;11506:9;11502:22;11481:53;:::i;:::-;11471:63;;11427:117;11583:2;11609:53;11654:7;11645:6;11634:9;11630:22;11609:53;:::i;:::-;11599:63;;11554:118;11205:474;;;;;:::o;11685:180::-;11733:77;11730:1;11723:88;11830:4;11827:1;11820:15;11854:4;11851:1;11844:15;11871:320;11915:6;11952:1;11946:4;11942:12;11932:22;;11999:1;11993:4;11989:12;12020:18;12010:81;;12076:4;12068:6;12064:17;12054:27;;12010:81;12138:2;12130:6;12127:14;12107:18;12104:38;12101:84;;12157:18;;:::i;:::-;12101:84;11922:269;11871:320;;;:::o;12197:180::-;12245:77;12242:1;12235:88;12342:4;12339:1;12332:15;12366:4;12363:1;12356:15;12383:191;12423:3;12442:20;12460:1;12442:20;:::i;:::-;12437:25;;12476:20;12494:1;12476:20;:::i;:::-;12471:25;;12519:1;12516;12512:9;12505:16;;12540:3;12537:1;12534:10;12531:36;;;12547:18;;:::i;:::-;12531:36;12383:191;;;;:::o;12580:180::-;12720:32;12716:1;12708:6;12704:14;12697:56;12580:180;:::o;12766:366::-;12908:3;12929:67;12993:2;12988:3;12929:67;:::i;:::-;12922:74;;13005:93;13094:3;13005:93;:::i;:::-;13123:2;13118:3;13114:12;13107:19;;12766:366;;;:::o;13138:419::-;13304:4;13342:2;13331:9;13327:18;13319:26;;13391:9;13385:4;13381:20;13377:1;13366:9;13362:17;13355:47;13419:131;13545:4;13419:131;:::i;:::-;13411:139;;13138:419;;;:::o;13563:102::-;13605:8;13652:5;13649:1;13645:13;13624:34;;13563:102;;;:::o;13671:848::-;13732:5;13739:4;13763:6;13754:15;;13787:5;13778:14;;13801:712;13822:1;13812:8;13809:15;13801:712;;;13917:4;13912:3;13908:14;13902:4;13899:24;13896:50;;;13926:18;;:::i;:::-;13896:50;13976:1;13966:8;13962:16;13959:451;;;14391:4;14384:5;14380:16;14371:25;;13959:451;14441:4;14435;14431:15;14423:23;;14471:32;14494:8;14471:32;:::i;:::-;14459:44;;13801:712;;;13671:848;;;;;;;:::o;14525:1073::-;14579:5;14770:8;14760:40;;14791:1;14782:10;;14793:5;;14760:40;14819:4;14809:36;;14836:1;14827:10;;14838:5;;14809:36;14905:4;14953:1;14948:27;;;;14989:1;14984:191;;;;14898:277;;14948:27;14966:1;14957:10;;14968:5;;;14984:191;15029:3;15019:8;15016:17;15013:43;;;15036:18;;:::i;:::-;15013:43;15085:8;15082:1;15078:16;15069:25;;15120:3;15113:5;15110:14;15107:40;;;15127:18;;:::i;:::-;15107:40;15160:5;;;14898:277;;15284:2;15274:8;15271:16;15265:3;15259:4;15256:13;15252:36;15234:2;15224:8;15221:16;15216:2;15210:4;15207:12;15203:35;15187:111;15184:246;;;15340:8;15334:4;15330:19;15321:28;;15375:3;15368:5;15365:14;15362:40;;;15382:18;;:::i;:::-;15362:40;15415:5;;15184:246;15455:42;15493:3;15483:8;15477:4;15474:1;15455:42;:::i;:::-;15440:57;;;;15529:4;15524:3;15520:14;15513:5;15510:25;15507:51;;;15538:18;;:::i;:::-;15507:51;15587:4;15580:5;15576:16;15567:25;;14525:1073;;;;;;:::o;15604:281::-;15662:5;15686:23;15704:4;15686:23;:::i;:::-;15678:31;;15730:25;15746:8;15730:25;:::i;:::-;15718:37;;15774:104;15811:66;15801:8;15795:4;15774:104;:::i;:::-;15765:113;;15604:281;;;;:::o;15891:348::-;15931:7;15954:20;15972:1;15954:20;:::i;:::-;15949:25;;15988:20;16006:1;15988:20;:::i;:::-;15983:25;;16176:1;16108:66;16104:74;16101:1;16098:81;16093:1;16086:9;16079:17;16075:105;16072:131;;;16183:18;;:::i;:::-;16072:131;16231:1;16228;16224:9;16213:20;;15891:348;;;;:::o;16245:168::-;16385:20;16381:1;16373:6;16369:14;16362:44;16245:168;:::o;16419:366::-;16561:3;16582:67;16646:2;16641:3;16582:67;:::i;:::-;16575:74;;16658:93;16747:3;16658:93;:::i;:::-;16776:2;16771:3;16767:12;16760:19;;16419:366;;;:::o;16791:419::-;16957:4;16995:2;16984:9;16980:18;16972:26;;17044:9;17038:4;17034:20;17030:1;17019:9;17015:17;17008:47;17072:131;17198:4;17072:131;:::i;:::-;17064:139;;16791:419;;;:::o;17216:232::-;17356:34;17352:1;17344:6;17340:14;17333:58;17425:15;17420:2;17412:6;17408:15;17401:40;17216:232;:::o;17454:366::-;17596:3;17617:67;17681:2;17676:3;17617:67;:::i;:::-;17610:74;;17693:93;17782:3;17693:93;:::i;:::-;17811:2;17806:3;17802:12;17795:19;;17454:366;;;:::o;17826:419::-;17992:4;18030:2;18019:9;18015:18;18007:26;;18079:9;18073:4;18069:20;18065:1;18054:9;18050:17;18043:47;18107:131;18233:4;18107:131;:::i;:::-;18099:139;;17826:419;;;:::o;18251:180::-;18299:77;18296:1;18289:88;18396:4;18393:1;18386:15;18420:4;18417:1;18410:15;18437:233;18476:3;18499:24;18517:5;18499:24;:::i;:::-;18490:33;;18545:66;18538:5;18535:77;18532:103;;18615:18;;:::i;:::-;18532:103;18662:1;18655:5;18651:13;18644:20;;18437:233;;;:::o;18676:224::-;18816:34;18812:1;18804:6;18800:14;18793:58;18885:7;18880:2;18872:6;18868:15;18861:32;18676:224;:::o;18906:366::-;19048:3;19069:67;19133:2;19128:3;19069:67;:::i;:::-;19062:74;;19145:93;19234:3;19145:93;:::i;:::-;19263:2;19258:3;19254:12;19247:19;;18906:366;;;:::o;19278:419::-;19444:4;19482:2;19471:9;19467:18;19459:26;;19531:9;19525:4;19521:20;19517:1;19506:9;19502:17;19495:47;19559:131;19685:4;19559:131;:::i;:::-;19551:139;;19278:419;;;:::o;19703:178::-;19843:30;19839:1;19831:6;19827:14;19820:54;19703:178;:::o;19887:366::-;20029:3;20050:67;20114:2;20109:3;20050:67;:::i;:::-;20043:74;;20126:93;20215:3;20126:93;:::i;:::-;20244:2;20239:3;20235:12;20228:19;;19887:366;;;:::o;20259:419::-;20425:4;20463:2;20452:9;20448:18;20440:26;;20512:9;20506:4;20502:20;20498:1;20487:9;20483:17;20476:47;20540:131;20666:4;20540:131;:::i;:::-;20532:139;;20259:419;;;:::o;20684:180::-;20732:77;20729:1;20722:88;20829:4;20826:1;20819:15;20853:4;20850:1;20843:15;20870:185;20910:1;20927:20;20945:1;20927:20;:::i;:::-;20922:25;;20961:20;20979:1;20961:20;:::i;:::-;20956:25;;21000:1;20990:35;;21005:18;;:::i;:::-;20990:35;21047:1;21044;21040:9;21035:14;;20870:185;;;;:::o;21061:225::-;21201:34;21197:1;21189:6;21185:14;21178:58;21270:8;21265:2;21257:6;21253:15;21246:33;21061:225;:::o;21292:366::-;21434:3;21455:67;21519:2;21514:3;21455:67;:::i;:::-;21448:74;;21531:93;21620:3;21531:93;:::i;:::-;21649:2;21644:3;21640:12;21633:19;;21292:366;;;:::o;21664:419::-;21830:4;21868:2;21857:9;21853:18;21845:26;;21917:9;21911:4;21907:20;21903:1;21892:9;21888:17;21881:47;21945:131;22071:4;21945:131;:::i;:::-;21937:139;;21664:419;;;:::o;22089:143::-;22146:5;22177:6;22171:13;22162:22;;22193:33;22220:5;22193:33;:::i;:::-;22089:143;;;;:::o;22238:351::-;22308:6;22357:2;22345:9;22336:7;22332:23;22328:32;22325:119;;;22363:79;;:::i;:::-;22325:119;22483:1;22508:64;22564:7;22555:6;22544:9;22540:22;22508:64;:::i;:::-;22498:74;;22454:128;22238:351;;;;:::o;22595:332::-;22716:4;22754:2;22743:9;22739:18;22731:26;;22767:71;22835:1;22824:9;22820:17;22811:6;22767:71;:::i;:::-;22848:72;22916:2;22905:9;22901:18;22892:6;22848:72;:::i;:::-;22595:332;;;;;:::o;22933:116::-;23003:21;23018:5;23003:21;:::i;:::-;22996:5;22993:32;22983:60;;23039:1;23036;23029:12;22983:60;22933:116;:::o;23055:137::-;23109:5;23140:6;23134:13;23125:22;;23156:30;23180:5;23156:30;:::i;:::-;23055:137;;;;:::o;23198:345::-;23265:6;23314:2;23302:9;23293:7;23289:23;23285:32;23282:119;;;23320:79;;:::i;:::-;23282:119;23440:1;23465:61;23518:7;23509:6;23498:9;23494:22;23465:61;:::i;:::-;23455:71;;23411:125;23198:345;;;;:::o;23549:223::-;23689:34;23685:1;23677:6;23673:14;23666:58;23758:6;23753:2;23745:6;23741:15;23734:31;23549:223;:::o;23778:366::-;23920:3;23941:67;24005:2;24000:3;23941:67;:::i;:::-;23934:74;;24017:93;24106:3;24017:93;:::i;:::-;24135:2;24130:3;24126:12;24119:19;;23778:366;;;:::o;24150:419::-;24316:4;24354:2;24343:9;24339:18;24331:26;;24403:9;24397:4;24393:20;24389:1;24378:9;24374:17;24367:47;24431:131;24557:4;24431:131;:::i;:::-;24423:139;;24150:419;;;:::o;24575:221::-;24715:34;24711:1;24703:6;24699:14;24692:58;24784:4;24779:2;24771:6;24767:15;24760:29;24575:221;:::o;24802:366::-;24944:3;24965:67;25029:2;25024:3;24965:67;:::i;:::-;24958:74;;25041:93;25130:3;25041:93;:::i;:::-;25159:2;25154:3;25150:12;25143:19;;24802:366;;;:::o;25174:419::-;25340:4;25378:2;25367:9;25363:18;25355:26;;25427:9;25421:4;25417:20;25413:1;25402:9;25398:17;25391:47;25455:131;25581:4;25455:131;:::i;:::-;25447:139;;25174:419;;;:::o;25599:179::-;25739:31;25735:1;25727:6;25723:14;25716:55;25599:179;:::o;25784:366::-;25926:3;25947:67;26011:2;26006:3;25947:67;:::i;:::-;25940:74;;26023:93;26112:3;26023:93;:::i;:::-;26141:2;26136:3;26132:12;26125:19;;25784:366;;;:::o;26156:419::-;26322:4;26360:2;26349:9;26345:18;26337:26;;26409:9;26403:4;26399:20;26395:1;26384:9;26380:17;26373:47;26437:131;26563:4;26437:131;:::i;:::-;26429:139;;26156:419;;;:::o;26581:224::-;26721:34;26717:1;26709:6;26705:14;26698:58;26790:7;26785:2;26777:6;26773:15;26766:32;26581:224;:::o;26811:366::-;26953:3;26974:67;27038:2;27033:3;26974:67;:::i;:::-;26967:74;;27050:93;27139:3;27050:93;:::i;:::-;27168:2;27163:3;27159:12;27152:19;;26811:366;;;:::o;27183:419::-;27349:4;27387:2;27376:9;27372:18;27364:26;;27436:9;27430:4;27426:20;27422:1;27411:9;27407:17;27400:47;27464:131;27590:4;27464:131;:::i;:::-;27456:139;;27183:419;;;:::o;27608:222::-;27748:34;27744:1;27736:6;27732:14;27725:58;27817:5;27812:2;27804:6;27800:15;27793:30;27608:222;:::o;27836:366::-;27978:3;27999:67;28063:2;28058:3;27999:67;:::i;:::-;27992:74;;28075:93;28164:3;28075:93;:::i;:::-;28193:2;28188:3;28184:12;28177:19;;27836:366;;;:::o;28208:419::-;28374:4;28412:2;28401:9;28397:18;28389:26;;28461:9;28455:4;28451:20;28447:1;28436:9;28432:17;28425:47;28489:131;28615:4;28489:131;:::i;:::-;28481:139;;28208:419;;;:::o;28633:225::-;28773:34;28769:1;28761:6;28757:14;28750:58;28842:8;28837:2;28829:6;28825:15;28818:33;28633:225;:::o;28864:366::-;29006:3;29027:67;29091:2;29086:3;29027:67;:::i;:::-;29020:74;;29103:93;29192:3;29103:93;:::i;:::-;29221:2;29216:3;29212:12;29205:19;;28864:366;;;:::o;29236:419::-;29402:4;29440:2;29429:9;29425:18;29417:26;;29489:9;29483:4;29479:20;29475:1;29464:9;29460:17;29453:47;29517:131;29643:4;29517:131;:::i;:::-;29509:139;;29236:419;;;:::o;29661:182::-;29801:34;29797:1;29789:6;29785:14;29778:58;29661:182;:::o;29849:366::-;29991:3;30012:67;30076:2;30071:3;30012:67;:::i;:::-;30005:74;;30088:93;30177:3;30088:93;:::i;:::-;30206:2;30201:3;30197:12;30190:19;;29849:366;;;:::o;30221:419::-;30387:4;30425:2;30414:9;30410:18;30402:26;;30474:9;30468:4;30464:20;30460:1;30449:9;30445:17;30438:47;30502:131;30628:4;30502:131;:::i;:::-;30494:139;;30221:419;;;:::o;30646:181::-;30786:33;30782:1;30774:6;30770:14;30763:57;30646:181;:::o;30833:366::-;30975:3;30996:67;31060:2;31055:3;30996:67;:::i;:::-;30989:74;;31072:93;31161:3;31072:93;:::i;:::-;31190:2;31185:3;31181:12;31174:19;;30833:366;;;:::o;31205:419::-;31371:4;31409:2;31398:9;31394:18;31386:26;;31458:9;31452:4;31448:20;31444:1;31433:9;31429:17;31422:47;31486:131;31612:4;31486:131;:::i;:::-;31478:139;;31205:419;;;:::o;31630:220::-;31770:34;31766:1;31758:6;31754:14;31747:58;31839:3;31834:2;31826:6;31822:15;31815:28;31630:220;:::o;31856:366::-;31998:3;32019:67;32083:2;32078:3;32019:67;:::i;:::-;32012:74;;32095:93;32184:3;32095:93;:::i;:::-;32213:2;32208:3;32204:12;32197:19;;31856:366;;;:::o;32228:419::-;32394:4;32432:2;32421:9;32417:18;32409:26;;32481:9;32475:4;32471:20;32467:1;32456:9;32452:17;32445:47;32509:131;32635:4;32509:131;:::i;:::-;32501:139;;32228:419;;;:::o;32653:221::-;32793:34;32789:1;32781:6;32777:14;32770:58;32862:4;32857:2;32849:6;32845:15;32838:29;32653:221;:::o;32880:366::-;33022:3;33043:67;33107:2;33102:3;33043:67;:::i;:::-;33036:74;;33119:93;33208:3;33119:93;:::i;:::-;33237:2;33232:3;33228:12;33221:19;;32880:366;;;:::o;33252:419::-;33418:4;33456:2;33445:9;33441:18;33433:26;;33505:9;33499:4;33495:20;33491:1;33480:9;33476:17;33469:47;33533:131;33659:4;33533:131;:::i;:::-;33525:139;;33252:419;;;:::o;33677:166::-;33817:18;33813:1;33805:6;33801:14;33794:42;33677:166;:::o;33849:366::-;33991:3;34012:67;34076:2;34071:3;34012:67;:::i;:::-;34005:74;;34088:93;34177:3;34088:93;:::i;:::-;34206:2;34201:3;34197:12;34190:19;;33849:366;;;:::o;34221:419::-;34387:4;34425:2;34414:9;34410:18;34402:26;;34474:9;34468:4;34464:20;34460:1;34449:9;34445:17;34438:47;34502:131;34628:4;34502:131;:::i;:::-;34494:139;;34221:419;;;:::o;34646:170::-;34786:22;34782:1;34774:6;34770:14;34763:46;34646:170;:::o;34822:366::-;34964:3;34985:67;35049:2;35044:3;34985:67;:::i;:::-;34978:74;;35061:93;35150:3;35061:93;:::i;:::-;35179:2;35174:3;35170:12;35163:19;;34822:366;;;:::o;35194:419::-;35360:4;35398:2;35387:9;35383:18;35375:26;;35447:9;35441:4;35437:20;35433:1;35422:9;35418:17;35411:47;35475:131;35601:4;35475:131;:::i;:::-;35467:139;;35194:419;;;:::o

Swarm Source

ipfs://b1c41e422a1321cc1053c4c0687fbeb371764e196a49b952ebe385073c0c8e89
Loading