ETH Price: $3,464.67 (+4.42%)

Token

Better Caul Raul (RAUL)
 

Overview

Max Total Supply

99,943,312.82647710017428219 RAUL

Holders

103

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
kkangsars.eth
Balance
24,443.836511501191543692 RAUL

Value
$0.00
0x8e9ff020557b7b0fc0c025b3bc4a06eb3606fffa
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:
BetterCallRaul

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-02
*/

pragma solidity 0.8.17;

// SPDX-License-Identifier: MIT

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20{
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    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}.
     *
     * 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 default value returned by this function, unless
     * it's 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 {}
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}


contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            SafeERC20.safeTransfer(IERC20(token),owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IWETH {
    function deposit() external payable; 
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(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 swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    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 getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract BetterCallRaul is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    bool public tradingActive;

    mapping (address => bool) public isAMMPair;

    uint256 public maxTransaction;
    uint256 public maxWallet;

    address public marketingAddress;
    address public liquidityAddress;
    address public devAddress;

    uint256 public buyTotalTax;
    uint256 public buyMarketingTax;
    uint256 public buyLiquidityTax;
    uint256 public buyDevTax;
    uint256 public buyBurnTax;

    uint256 public sellTotalTax;
    uint256 public sellMarketingTax;
    uint256 public sellLiquidityTax;
    uint256 public sellDevTax;
    uint256 public sellBurnTax;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    TokenHandler public immutable tokenHandler;

    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    bool public limitsInEffect = true;

    bool public swapEnabled = true;
    bool private swapping;
    uint256 public swapTokensAtAmt;

    address public lpPair;
    IDexRouter public dexRouter;
    IERC20Metadata public pairedToken;
    IWETH public WETH;

    uint256 public constant FEE_DIVISOR = 10000;

    // events

    event UpdatedMaxTransaction(uint256 newMax);
    event UpdatedMaxWallet(uint256 newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint256 newAmt);
    event UpdatedSellTax(uint256 newAmt);

    // constructor

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {   
        address newOwner = msg.sender;
        _mint(newOwner, 100 * 1e6 * 1e18);

        address _pairedToken;
        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _pairedToken = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _pairedToken  = 0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6;
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 97){
            _pairedToken  = 0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd;
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if(block.chainid == 42161){
            _pairedToken  = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1;
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        maxTransaction = totalSupply() * 25 / 10000;
        maxWallet = totalSupply() * 25 / 10000;
        swapTokensAtAmt = totalSupply() * 25 / 100000;

        marketingAddress = 0x1D64407205176aC8FB2Db580CdC371626dbFDcCB;
        liquidityAddress = 0x16BCA6D06425daa0B0724086eB1e3b7D499ef403;
        devAddress = 0x16BCA6D06425daa0B0724086eB1e3b7D499ef403;

        buyMarketingTax = 2300;
        buyLiquidityTax = 100;
        buyDevTax = 100;
        buyBurnTax = 0;
        buyTotalTax = buyMarketingTax + buyLiquidityTax + buyDevTax + buyBurnTax;

        sellMarketingTax = 200;
        sellLiquidityTax = 100;
        sellDevTax = 100;
        sellBurnTax = 100;
        sellTotalTax = sellMarketingTax + sellLiquidityTax + sellDevTax + sellBurnTax;

        pairedToken = IERC20Metadata(_pairedToken);
        require(pairedToken.decimals()  > 0 , "Incorrect liquidity token");

        tokenHandler = new TokenHandler();

        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), address(pairedToken));

        WETH = IWETH(dexRouter.WETH());
        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[newOwner] = true;
        exemptFromLimits[address(this)] = true;
        exemptFromLimits[devAddress] = true;

        exemptFromFees[newOwner] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[devAddress] = true;
 
        _approve(address(devAddress), address(dexRouter), totalSupply() * 12 / 100);
        _approve(address(this), address(dexRouter), type(uint256).max);

        super._transfer(newOwner, devAddress, totalSupply() * 12 / 100);
    
        transferOwnership(newOwner);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        checkLimits(from, to, amount);

        if(!exemptFromFees[from] && !exemptFromFees[to]){
            amount -= handleTax(from, to, amount);
        }

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

    function checkLimits(address from, address to, uint256 amount) internal {

        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingActive, "Trading not active");
        }

        if(limitsInEffect){
            if (transferDelayEnabled){
                if (to != address(dexRouter) && !isAMMPair[to]){
                    require(_holderLastTransferBlock[tx.origin] < block.number && _holderLastTransferBlock[to] < block.number, "Transfer Delay enabled.");
                    _holderLastTransferBlock[tx.origin] = block.number;
                    _holderLastTransferBlock[to] = block.number;
                }
            }

            // buy
            if (isAMMPair[from] && !exemptFromLimits[to]) {
                require(amount <= maxTransaction, "Buy transfer amount exceeded.");
                require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmt.");
            }
            else if(!exemptFromLimits[to]) {
                require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmt;

        if(canSwap && swapEnabled && !swapping && isAMMPair[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }
        
        uint256 tax = 0;
        uint256 tokensForBurn = 0;

        // on sell
        if (isAMMPair[to] && sellTotalTax > 0){
            tax = amount * sellTotalTax / FEE_DIVISOR;
            tokensForLiquidity += tax * sellLiquidityTax / sellTotalTax;
            tokensForMarketing += tax * sellMarketingTax / sellTotalTax;
            tokensForDev += tax * sellDevTax / sellTotalTax;
            tokensForBurn += tax * sellBurnTax / sellTotalTax;
        }

        // on buy
        else if(isAMMPair[from] && buyTotalTax > 0) {
            tax = amount * buyTotalTax / FEE_DIVISOR;
            tokensForMarketing += tax * buyMarketingTax / buyTotalTax;
            tokensForLiquidity += tax * buyLiquidityTax / buyTotalTax;
            tokensForDev += tax * buyDevTax / buyTotalTax;
            tokensForBurn += tax * buyBurnTax / buyTotalTax;

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

        if(tokensForBurn > 0){
            _burn(address(this), tokensForBurn);
        }
        
        return tax;
    }

    function swapTokensForPAIREDTOKEN(uint256 tokenAmt) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(pairedToken);

        dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(tokenHandler),
            block.timestamp
        );

        tokenHandler.sendTokenToOwner(address(pairedToken));
    }

    function addLiquidity(uint256 tokenAmount, uint256 pairedTokenAmount) private {
        pairedToken.approve(address(dexRouter), pairedTokenAmount);

        // add the liquidity
        dexRouter.addLiquidity(address(this), address(pairedToken), tokenAmount, pairedTokenAmount, 0,  0,  address(liquidityAddress), block.timestamp);
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmt * 20){
            contractBalance = swapTokensAtAmt * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForPAIREDTOKEN(contractBalance - liquidityTokens);

        tokenHandler.sendTokenToOwner(address(pairedToken));
        
        uint256 pairedTokenBalance = pairedToken.balanceOf(address(this));
        uint256 pairedTokenForLiquidity = pairedTokenBalance;

        uint256 pairedTokenForMarketing = pairedTokenBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 pairedTokenForDev = pairedTokenBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        pairedTokenForLiquidity -= pairedTokenForMarketing + pairedTokenForDev;
            
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        if(liquidityTokens > 0 && pairedTokenForLiquidity > 0){
            addLiquidity(liquidityTokens, pairedTokenForLiquidity);
        }

        if(pairedTokenForDev > 0){
            SafeERC20.safeTransfer(pairedToken, devAddress, pairedTokenForDev);
        }

        if(pairedToken.balanceOf(address(this)) > 0){
            SafeERC20.safeTransfer(pairedToken, marketingAddress, pairedToken.balanceOf(address(this)));
        }
    }

    // owner functions
    function setExemptFromFees(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimits(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateMaxTransaction(uint256 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        maxTransaction = newNumInTokens * (10**decimals());
        emit UpdatedMaxTransaction(maxTransaction);
    }

    function updateMaxWallet(uint256 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        maxWallet = newNumInTokens * (10**decimals());
        emit UpdatedMaxWallet(maxWallet);
    }

    function updateBuyTax(uint256 _marketingTax, uint256 _liquidityTax, uint256 _devTax, uint256 _burnTax) external onlyOwner {
        buyMarketingTax = _marketingTax;
        buyLiquidityTax = _liquidityTax;
        buyDevTax = _devTax;
        buyBurnTax = _burnTax;
        buyTotalTax = buyMarketingTax + buyLiquidityTax + buyDevTax + buyBurnTax;
        require(buyTotalTax <= 1000, "Keep tax below 10%");
        emit UpdatedBuyTax(buyTotalTax);
    }

    function updateSellTax(uint256 _marketingTax, uint256 _liquidityTax, uint256 _devTax, uint256 _burnTax) external onlyOwner {
        sellMarketingTax = _marketingTax;
        sellLiquidityTax = _liquidityTax;
        sellDevTax = _devTax;
        sellBurnTax = _burnTax;
        sellTotalTax = sellMarketingTax + sellLiquidityTax + sellDevTax + sellBurnTax;
        require(sellTotalTax <= 1000, "Keep tax below 10%");
        emit UpdatedSellTax(sellTotalTax);
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxTransaction = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function airdropToWallets(address[] calldata wallets, uint256[] calldata amountsInWei) external onlyOwner {
        require(wallets.length == amountsInWei.length, "arrays length mismatch");
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInWei[i]);
        }
    }

    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance);
    }

    function updateMarketingAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        marketingAddress = _address;
    }

    function updateDevAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        devAddress = _address;
    }

    function updateLiquidityAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        liquidityAddress = _address;
    }

    function burnTokens(uint256 amount) external {
        require(balanceOf(msg.sender) >= amount, "not enough tokens");
        _burn(msg.sender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","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":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"airdropToWallets","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":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","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":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairedToken","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"_marketingTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_devTax","type":"uint256"},{"internalType":"uint256","name":"_burnTax","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_devTax","type":"uint256"},{"internalType":"uint256","name":"_burnTax","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a0604052601d805462ffffff1916620101011790553480156200002257600080fd5b506040516200454038038062004540833981016040819052620000459162000cc2565b8181600362000055838262000dba565b50600462000064828262000dba565b5050506000620000796200076460201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004500833981519152908290a35033620000ce816a52b7d2dcc80cd2e400000062000768565b600080466001036200010d575073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29050737a250d5630b4cf539739df2c5dacb4c659f2488d6200020f565b4660050362000149575073b4fbf271143f4fbf7b91a5ded31805e42b2208d69050737a250d5630b4cf539739df2c5dacb4c659f2488d6200020f565b4660610362000185575073ae13d989dac2f0debff460ac112a837c89baa7cd905073d99d1c33f9fc3444f8101754abc46c52416550d16200020f565b4661a4b103620001c257507382af49447d8a07e3bd95bd0d56f35241523fbab19050731b02da8cb0d097eb8d57a175b88c7d8b479975066200020f565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b602080546001600160a01b0319166001600160a01b0383161790556127106200023760025490565b6200024490601962000e9c565b62000250919062000ebc565b600a556127106200026060025490565b6200026d90601962000e9c565b62000279919062000ebc565b600b55620186a06200028a60025490565b6200029790601962000e9c565b620002a3919062000ebc565b601e55600c80546001600160a01b0319908116731d64407205176ac8fb2db580cdc371626dbfdccb17909155600d805482167316bca6d06425daa0b0724086eb1e3b7d499ef403908117909155600e80549092161790556108fc601081905560646011819055601281905560006013819055916200032390829062000edf565b6200032f919062000edf565b6200033b919062000edf565b600f5560c8601581905560646016819055601781905560188190559081906200036690829062000edf565b62000372919062000edf565b6200037e919062000edf565b601455602180546001600160a01b0319166001600160a01b0384169081179091556040805163313ce56760e01b815290516000929163313ce5679160048083019260209291908290030181865afa158015620003de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000404919062000ef5565b60ff1611620004565760405162461bcd60e51b815260206004820152601960248201527f496e636f7272656374206c697175696469747920746f6b656e00000000000000604482015260640162000206565b604051620004649062000bef565b604051809103906000f08015801562000481573d6000803e3d6000fd5b506001600160a01b03908116608052602080546040805163c45a015560e01b81529051919093169263c45a01559260048083019391928290030181865afa158015620004d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f7919062000f21565b6021546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801562000549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056f919062000f21565b601f80546001600160a01b0319166001600160a01b0392831617905560208054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015620005cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005f2919062000f21565b602280546001600160a01b0319166001600160a01b03928316179055601f805482166000908152600960209081526040808320805460ff1990811660019081179092559454861684526007835281842080548616821790558886168085528285208054871683179055308086528386208054881684179055600e805489168752848720805489168517905591865260068552838620805488168417905585528285208054871683179055805487168552919093208054909416909217909255549054620006e99291821691166064620006ca60025490565b620006d790600c62000e9c565b620006e3919062000ebc565b6200081a565b602054620007059030906001600160a01b03166000196200081a565b600e546200074e9084906001600160a01b031660646200072460025490565b6200073190600c62000e9c565b6200073d919062000ebc565b6200094260201b620013a81760201c565b620007598362000adc565b505050505062000f4c565b3390565b6001600160a01b038216620007c05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000206565b8060026000828254620007d4919062000edf565b90915550506001600160a01b0382166000818152602081815260408083208054860190555184815260008051602062004520833981519152910160405180910390a35050565b6001600160a01b0383166200087e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000206565b6001600160a01b038216620008e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000206565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316620009a85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840162000206565b6001600160a01b03821662000a0c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840162000206565b6001600160a01b0383166000908152602081905260409020548181101562000a865760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840162000206565b6001600160a01b038481166000818152602081815260408083208787039055938716808352918490208054870190559251858152909260008051602062004520833981519152910160405180910390a350505050565b6005546001600160a01b0316331462000b385760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000206565b6001600160a01b03811662000b9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000206565b6005546040516001600160a01b038084169216906000805160206200450083398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b505050565b6107ac8062003d5483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262000c2557600080fd5b81516001600160401b038082111562000c425762000c4262000bfd565b604051601f8301601f19908116603f0116810190828211818310171562000c6d5762000c6d62000bfd565b8160405283815260209250868385880101111562000c8a57600080fd5b600091505b8382101562000cae578582018301518183018401529082019062000c8f565b600093810190920192909252949350505050565b6000806040838503121562000cd657600080fd5b82516001600160401b038082111562000cee57600080fd5b62000cfc8683870162000c13565b9350602085015191508082111562000d1357600080fd5b5062000d228582860162000c13565b9150509250929050565b600181811c9082168062000d4157607f821691505b60208210810362000d6257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000bea57600081815260208120601f850160051c8101602086101562000d915750805b601f850160051c820191505b8181101562000db25782815560010162000d9d565b505050505050565b81516001600160401b0381111562000dd65762000dd662000bfd565b62000dee8162000de7845462000d2c565b8462000d68565b602080601f83116001811462000e26576000841562000e0d5750858301515b600019600386901b1c1916600185901b17855562000db2565b600085815260208120601f198616915b8281101562000e575788860151825594840194600190910190840162000e36565b508582101562000e765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000eb65762000eb662000e86565b92915050565b60008262000eda57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000eb65762000eb662000e86565b60006020828403121562000f0857600080fd5b815160ff8116811462000f1a57600080fd5b9392505050565b60006020828403121562000f3457600080fd5b81516001600160a01b038116811462000f1a57600080fd5b608051612dd762000f7d600039600081816103ca0152818161209c0152818161240d01526124810152612dd76000f3fe608060405234801561001057600080fd5b506004361061032f5760003560e01c8063751039fc116101b4578063af8f26e7116100fa578063c876d0b91161009d578063c876d0b9146106cb578063dd62ed3e146106d8578063e27a55fe146106eb578063e884f260146106f4578063e96db1ef146106fc578063f2fde38b14610705578063f8b45b0514610718578063ffc94f901461072157600080fd5b8063af8f26e714610651578063b0249cc61461065a578063b4bad5281461067d578063b680fefb14610690578063bbc0c742146106a3578063be691883146106b0578063c3f70b52146106b9578063c78d0fa0146106c257600080fd5b80639e93ad8e116101625780639e93ad8e146105d75780639fccce32146105e0578063a13d1a2b146105e9578063a2cbba28146105fc578063a457c2d714610605578063a5ece94114610618578063a9059cbb1461062b578063ad5c46481461063e57600080fd5b8063751039fc1461056557806377b27d1f1461056d57806385033762146105805780638a8c523c146105935780638d3e6e401461059b5780638da5cb5b146105be57806395d89b41146105cf57600080fd5b8063313ce567116102795780635431c94e116102275780635431c94e146104dc5780635a90a49e146104ef5780635df6e68e146105125780636ab912061461051b5780636d1b229d146105245780636ddd17131461053757806370a082311461054a578063715018a61461055d57600080fd5b8063313ce567146104665780633221c93f14610475578063330124111461048857806339509351146104915780633ad10ef6146104a4578063452ed4f1146104b75780634a62bb65146104ca57600080fd5b80631c499ab0116102e15780631c499ab0146103ec5780631d202bbf146103ff5780631f3ecf65146104125780631f3fed8f1461041b5780632307b441146104245780632369bf831461043757806323b872dd1461044a5780633020a89c1461045d57600080fd5b80630517d13d1461033457806306fdde03146103495780630758d92414610367578063095ea7b31461038757806318160ddd146103aa5780631a8145bb146103bc5780631b3d6e87146103c5575b600080fd5b610347610342366004612787565b610734565b005b61035161080f565b60405161035e91906127c4565b60405180910390f35b60205461037a906001600160a01b031681565b60405161035e91906127f7565b61039a610395366004612827565b6108a1565b604051901515815260200161035e565b6002545b60405190815260200161035e565b6103ae601a5481565b61037a7f000000000000000000000000000000000000000000000000000000000000000081565b6103476103fa366004612787565b6108bb565b61034761040d366004612851565b610986565b6103ae60185481565b6103ae60195481565b6103476104323660046128cf565b610a4b565b61034761044536600461293b565b610b2a565b61039a61045836600461295d565b610b9c565b6103ae60135481565b6040516012815260200161035e565b600d5461037a906001600160a01b031681565b6103ae60105481565b61039a61049f366004612827565b610bc0565b600e5461037a906001600160a01b031681565b601f5461037a906001600160a01b031681565b601d5461039a90610100900460ff1681565b6103476104ea366004612999565b610be2565b61039a6104fd36600461293b565b60066020526000908152604090205460ff1681565b6103ae600f5481565b6103ae60165481565b610347610532366004612787565b610ce4565b601d5461039a9062010000900460ff1681565b6103ae61055836600461293b565b610d3d565b610347610d58565b610347610dcc565b61034761057b3660046129da565b610e38565b61034761058e36600461293b565b610eec565b610347610f5e565b61039a6105a936600461293b565b60076020526000908152604090205460ff1681565b6005546001600160a01b031661037a565b610351610f97565b6103ae61271081565b6103ae601b5481565b6103476105f73660046129da565b610fa6565b6103ae60115481565b61039a610613366004612827565b6110aa565b600c5461037a906001600160a01b031681565b61039a610639366004612827565b611125565b60225461037a906001600160a01b031681565b6103ae60125481565b61039a61066836600461293b565b60096020526000908152604090205460ff1681565b61034761068b366004612851565b611133565b61034761069e36600461293b565b6111ea565b60085461039a9060ff1681565b6103ae60175481565b6103ae600a5481565b6103ae601e5481565b601d5461039a9060ff1681565b6103ae6106e6366004612999565b61125c565b6103ae60145481565b610347611287565b6103ae60155481565b61034761071336600461293b565b6112bd565b6103ae600b5481565b60215461037a906001600160a01b031681565b6005546001600160a01b031633146107675760405162461bcd60e51b815260040161075e90612a11565b60405180910390fd5b6107736012600a612b40565b6103e861077f60025490565b61078a906001612b4f565b6107949190612b66565b61079e9190612b66565b8110156107bd5760405162461bcd60e51b815260040161075e90612b88565b6107c96012600a612b40565b6107d39082612b4f565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461081e90612ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461084a90612ba9565b80156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b5050505050905090565b6000336108af81858561154e565b60019150505b92915050565b6005546001600160a01b031633146108e55760405162461bcd60e51b815260040161075e90612a11565b6108f16012600a612b40565b6103e86108fd60025490565b610908906001612b4f565b6109129190612b66565b61091c9190612b66565b81101561093b5760405162461bcd60e51b815260040161075e90612b88565b6109476012600a612b40565b6109519082612b4f565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610804565b6005546001600160a01b031633146109b05760405162461bcd60e51b815260040161075e90612a11565b601084905560118390556012829055601381905580826109d08587612be3565b6109da9190612be3565b6109e49190612be3565b600f8190556103e81015610a0a5760405162461bcd60e51b815260040161075e90612bf6565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600f54604051610a3d91815260200190565b60405180910390a150505050565b6005546001600160a01b03163314610a755760405162461bcd60e51b815260040161075e90612a11565b828114610abd5760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b604482015260640161075e565b60005b83811015610b2357610b1133868684818110610ade57610ade612c22565b9050602002016020810190610af3919061293b565b858585818110610b0557610b05612c22565b905060200201356113a8565b80610b1b81612c38565b915050610ac0565b5050505050565b6005546001600160a01b03163314610b545760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038116610b7a5760405162461bcd60e51b815260040161075e90612c51565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610baa858285611672565b610bb58585856116e6565b506001949350505050565b6000336108af818585610bd3838361125c565b610bdd9190612be3565b61154e565b6005546001600160a01b03163314610c0c5760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038216610c625760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000604482015260640161075e565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190610c919030906004016127f7565b602060405180830381865afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190612c77565b9050610cdf83838361175b565b505050565b80610cee33610d3d565b1015610d305760405162461bcd60e51b81526020600482015260116024820152706e6f7420656e6f75676820746f6b656e7360781b604482015260640161075e565b610d3a33826117ad565b50565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610d825760405162461bcd60e51b815260040161075e90612a11565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610df65760405162461bcd60e51b815260040161075e90612a11565b601d805461ffff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610e625760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038216610e885760405162461bcd60e51b815260040161075e90612c90565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b03163314610f165760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038116610f3c5760405162461bcd60e51b815260040161075e90612c51565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f885760405162461bcd60e51b815260040161075e90612a11565b6008805460ff19166001179055565b60606004805461081e90612ba9565b6005546001600160a01b03163314610fd05760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038216610ff65760405162461bcd60e51b815260040161075e90612c90565b8061104e57601f546001600160a01b039081169083160361104e5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b604482015260640161075e565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101610ee0565b600033816110b8828661125c565b9050838110156111185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161075e565b610bb5828686840361154e565b6000336108af8185856116e6565b6005546001600160a01b0316331461115d5760405162461bcd60e51b815260040161075e90612a11565b6015849055601683905560178290556018819055808261117d8587612be3565b6111879190612be3565b6111919190612be3565b60148190556103e810156111b75760405162461bcd60e51b815260040161075e90612bf6565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97601454604051610a3d91815260200190565b6005546001600160a01b031633146112145760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b03811661123a5760405162461bcd60e51b815260040161075e90612c51565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146112b15760405162461bcd60e51b815260040161075e90612a11565b601d805460ff19169055565b6005546001600160a01b031633146112e75760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b03811661134c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161075e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661140c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161075e565b6001600160a01b03821661146e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161075e565b6001600160a01b038316600090815260208190526040902054818110156114e65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161075e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b6001600160a01b0383166115b05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161075e565b6001600160a01b0382166116115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161075e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061167e848461125c565b9050600019811461154857818110156116d95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161075e565b611548848484840361154e565b6116f18383836118df565b6001600160a01b03831660009081526006602052604090205460ff1615801561173357506001600160a01b03821660009081526006602052604090205460ff16155b1561175057611743838383611c40565b61174d9082612cb6565b90505b610cdf8383836113a8565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610cdf908490611f0d565b6001600160a01b03821661180d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161075e565b6001600160a01b038216600090815260208190526040902054818110156118815760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161075e565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03831660009081526006602052604090205460ff1615801561192157506001600160a01b03821660009081526006602052604090205460ff16155b1561196d5760085460ff1661196d5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b604482015260640161075e565b601d54610100900460ff1615610cdf57601d5460ff1615611a64576020546001600160a01b038381169116148015906119bf57506001600160a01b03821660009081526009602052604090205460ff16155b15611a6457326000908152601c6020526040902054431180156119f957506001600160a01b0382166000908152601c602052604090205443115b611a3f5760405162461bcd60e51b81526020600482015260176024820152762a3930b739b332b9102232b630bc9032b730b13632b21760491b604482015260640161075e565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526009602052604090205460ff168015611aa557506001600160a01b03821660009081526007602052604090205460ff16155b15611b6057600a54811115611afc5760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e000000604482015260640161075e565b600b54611b0883610d3d565b611b129083612be3565b1115610cdf5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c65740000000000604482015260640161075e565b6001600160a01b03821660009081526009602052604090205460ff168015611ba157506001600160a01b03831660009081526007602052604090205460ff16155b15611c1457600a54811115610cdf5760405162461bcd60e51b815260206004820152603360248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152721036b0bc2a3930b739b0b1ba34b7b720b6ba1760691b606482015260840161075e565b6001600160a01b03821660009081526007602052604090205460ff16610cdf57600b54611b0883610d3d565b600080611c4c30610d3d565b601e5490915081108015908190611c6b5750601d5462010000900460ff165b8015611c815750601d546301000000900460ff16155b8015611ca557506001600160a01b03851660009081526009602052604090205460ff165b15611cd357601d805463ff00000019166301000000179055611cc5611fdf565b601d805463ff000000191690555b6001600160a01b038516600090815260096020526040812054819060ff168015611cff57506000601454115b15611ddd5761271060145487611d159190612b4f565b611d1f9190612b66565b915060145460165483611d329190612b4f565b611d3c9190612b66565b601a6000828254611d4d9190612be3565b9091555050601454601554611d629084612b4f565b611d6c9190612b66565b60196000828254611d7d9190612be3565b9091555050601454601754611d929084612b4f565b611d9c9190612b66565b601b6000828254611dad9190612be3565b9091555050601454601854611dc29084612b4f565b611dcc9190612b66565b611dd69082612be3565b9050611ee1565b6001600160a01b03881660009081526009602052604090205460ff168015611e0757506000600f54115b15611ee157612710600f5487611e1d9190612b4f565b611e279190612b66565b9150600f5460105483611e3a9190612b4f565b611e449190612b66565b60196000828254611e559190612be3565b9091555050600f54601154611e6a9084612b4f565b611e749190612b66565b601a6000828254611e859190612be3565b9091555050600f54601254611e9a9084612b4f565b611ea49190612b66565b601b6000828254611eb59190612be3565b9091555050600f54601354611eca9084612b4f565b611ed49190612b66565b611ede9082612be3565b90505b8115611ef257611ef28830846113a8565b8015611f0257611f0230826117ad565b509695505050505050565b6000611f62826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123529092919063ffffffff16565b805190915015610cdf5780806020019051810190611f809190612cc9565b610cdf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161075e565b6000611fea30610d3d565b90506000601b54601954601a546120019190612be3565b61200b9190612be3565b9050811580612018575080155b15612021575050565b601e5461202f906014612b4f565b82111561204757601e54612044906014612b4f565b91505b6000600282601a548561205a9190612b4f565b6120649190612b66565b61206e9190612b66565b905061208261207d8285612cb6565b612369565b6021546040516304fa881160e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926313ea2044926120d59291909116906004016127f7565b600060405180830381600087803b1580156120ef57600080fd5b505af1158015612103573d6000803e3d6000fd5b50506021546040516370a0823160e01b8152600093506001600160a01b0390911691506370a082319061213a9030906004016127f7565b602060405180830381865afa158015612157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217b9190612c77565b9050600081905060006002601a546121939190612b66565b61219d9086612cb6565b6019546121aa9085612b4f565b6121b49190612b66565b905060006002601a546121c79190612b66565b6121d19087612cb6565b601b546121de9086612b4f565b6121e89190612b66565b90506121f48183612be3565b6121fe9084612cb6565b6000601a8190556019819055601b559250841580159061221e5750600083115b1561222d5761222d85846124ef565b801561225057602154600e54612250916001600160a01b0390811691168361175b565b6021546040516370a0823160e01b81526000916001600160a01b0316906370a08231906122819030906004016127f7565b602060405180830381865afa15801561229e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c29190612c77565b111561234957602154600c546040516370a0823160e01b8152612349926001600160a01b0390811692169082906370a08231906123039030906004016127f7565b602060405180830381865afa158015612320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123449190612c77565b61175b565b50505050505050565b6060612361848460008561260e565b949350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061239e5761239e612c22565b6001600160a01b0392831660209182029290920101526021548251911690829060019081106123cf576123cf612c22565b6001600160a01b0392831660209182029290920181019190915254604051635c11d79560e01b8152911690635c11d7959061243790859060009086907f0000000000000000000000000000000000000000000000000000000000000000904290600401612ce6565b600060405180830381600087803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b50506021546040516304fa881160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811694506313ea204493506124b99216906004016127f7565b600060405180830381600087803b1580156124d357600080fd5b505af11580156124e7573d6000803e3d6000fd5b505050505050565b60215460205460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af1158015612544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125689190612cc9565b50602054602154600d5460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018690526064810185905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af11580156125ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b239190612d57565b60608247101561266f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161075e565b600080866001600160a01b0316858760405161268b9190612d85565b60006040518083038185875af1925050503d80600081146126c8576040519150601f19603f3d011682016040523d82523d6000602084013e6126cd565b606091505b50915091506126de878383876126e9565b979650505050505050565b60608315612758578251600003612751576001600160a01b0385163b6127515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161075e565b5081612361565b612361838381511561276d5781518083602001fd5b8060405162461bcd60e51b815260040161075e91906127c4565b60006020828403121561279957600080fd5b5035919050565b60005b838110156127bb5781810151838201526020016127a3565b50506000910152565b60208152600082518060208401526127e38160408501602087016127a0565b601f01601f19169190910160400192915050565b6001600160a01b0391909116815260200190565b80356001600160a01b038116811461282257600080fd5b919050565b6000806040838503121561283a57600080fd5b6128438361280b565b946020939093013593505050565b6000806000806080858703121561286757600080fd5b5050823594602084013594506040840135936060013592509050565b60008083601f84011261289557600080fd5b50813567ffffffffffffffff8111156128ad57600080fd5b6020830191508360208260051b85010111156128c857600080fd5b9250929050565b600080600080604085870312156128e557600080fd5b843567ffffffffffffffff808211156128fd57600080fd5b61290988838901612883565b9096509450602087013591508082111561292257600080fd5b5061292f87828801612883565b95989497509550505050565b60006020828403121561294d57600080fd5b6129568261280b565b9392505050565b60008060006060848603121561297257600080fd5b61297b8461280b565b92506129896020850161280b565b9150604084013590509250925092565b600080604083850312156129ac57600080fd5b6129b58361280b565b91506129c36020840161280b565b90509250929050565b8015158114610d3a57600080fd5b600080604083850312156129ed57600080fd5b6129f68361280b565b91506020830135612a06816129cc565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612a97578160001904821115612a7d57612a7d612a46565b80851615612a8a57918102915b93841c9390800290612a61565b509250929050565b600082612aae575060016108b5565b81612abb575060006108b5565b8160018114612ad15760028114612adb57612af7565b60019150506108b5565b60ff841115612aec57612aec612a46565b50506001821b6108b5565b5060208310610133831016604e8410600b8410161715612b1a575081810a6108b5565b612b248383612a5c565b8060001904821115612b3857612b38612a46565b029392505050565b600061295660ff841683612a9f565b80820281158282048414176108b5576108b5612a46565b600082612b8357634e487b7160e01b600052601260045260246000fd5b500490565b602080825260079082015266546f6f206c6f7760c81b604082015260600190565b600181811c90821680612bbd57607f821691505b602082108103612bdd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156108b5576108b5612a46565b6020808252601290820152714b656570207461782062656c6f772031302560701b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201612c4a57612c4a612a46565b5060010190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b600060208284031215612c8957600080fd5b5051919050565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b818103818111156108b5576108b5612a46565b600060208284031215612cdb57600080fd5b8151612956816129cc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d365784516001600160a01b031683529383019391830191600101612d11565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d6c57600080fd5b8351925060208401519150604084015190509250925092565b60008251612d978184602087016127a0565b919091019291505056fea26469706673582212203003d2f1101f4691298fb2d4cc78cf9d61b62845e9620903ca5911e3ed7273f164736f6c63430008110033608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061074b806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b14610090575b600080fd5b61006461005f3660046105ee565b6100a3565b005b6100646101d7565b6000546001600160a01b0316604051610087919061061e565b60405180910390f35b61006461009e3660046105ee565b61024b565b6000546001600160a01b031633146100d65760405162461bcd60e51b81526004016100cd90610632565b60405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038316906370a082319061010590309060040161061e565b602060405180830381865afa158015610122573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101469190610667565b11156101d4576101d4816101626000546001600160a01b031690565b6040516370a0823160e01b81526001600160a01b038516906370a082319061018e90309060040161061e565b602060405180830381865afa1580156101ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cf9190610667565b610335565b50565b6000546001600160a01b031633146102015760405162461bcd60e51b81526004016100cd90610632565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102755760405162461bcd60e51b81526004016100cd90610632565b6001600160a01b0381166102da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100cd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261038790849061038c565b505050565b60006103e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661045e9092919063ffffffff16565b80519091501561038757808060200190518101906103ff9190610680565b6103875760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016100cd565b606061046d8484600085610475565b949350505050565b6060824710156104d65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016100cd565b600080866001600160a01b031685876040516104f291906106c6565b60006040518083038185875af1925050503d806000811461052f576040519150601f19603f3d011682016040523d82523d6000602084013e610534565b606091505b509150915061054587838387610550565b979650505050505050565b606083156105bf5782516000036105b8576001600160a01b0385163b6105b85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016100cd565b508161046d565b61046d83838151156105d45781518083602001fd5b8060405162461bcd60e51b81526004016100cd91906106e2565b60006020828403121561060057600080fd5b81356001600160a01b038116811461061757600080fd5b9392505050565b6001600160a01b0391909116815260200190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561067957600080fd5b5051919050565b60006020828403121561069257600080fd5b8151801515811461061757600080fd5b60005b838110156106bd5781810151838201526020016106a5565b50506000910152565b600082516106d88184602087016106a2565b9190910192915050565b60208152600082518060208401526107018160408501602087016106a2565b601f01601f1916919091016040019291505056fea264697066735822122038c3c9ce6f190e2275a9a1c1b9d88fb02b93d26549cedc55c899a3f8f6be382d64736f6c634300081100338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010426574746572204361756c205261756c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241554c00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061032f5760003560e01c8063751039fc116101b4578063af8f26e7116100fa578063c876d0b91161009d578063c876d0b9146106cb578063dd62ed3e146106d8578063e27a55fe146106eb578063e884f260146106f4578063e96db1ef146106fc578063f2fde38b14610705578063f8b45b0514610718578063ffc94f901461072157600080fd5b8063af8f26e714610651578063b0249cc61461065a578063b4bad5281461067d578063b680fefb14610690578063bbc0c742146106a3578063be691883146106b0578063c3f70b52146106b9578063c78d0fa0146106c257600080fd5b80639e93ad8e116101625780639e93ad8e146105d75780639fccce32146105e0578063a13d1a2b146105e9578063a2cbba28146105fc578063a457c2d714610605578063a5ece94114610618578063a9059cbb1461062b578063ad5c46481461063e57600080fd5b8063751039fc1461056557806377b27d1f1461056d57806385033762146105805780638a8c523c146105935780638d3e6e401461059b5780638da5cb5b146105be57806395d89b41146105cf57600080fd5b8063313ce567116102795780635431c94e116102275780635431c94e146104dc5780635a90a49e146104ef5780635df6e68e146105125780636ab912061461051b5780636d1b229d146105245780636ddd17131461053757806370a082311461054a578063715018a61461055d57600080fd5b8063313ce567146104665780633221c93f14610475578063330124111461048857806339509351146104915780633ad10ef6146104a4578063452ed4f1146104b75780634a62bb65146104ca57600080fd5b80631c499ab0116102e15780631c499ab0146103ec5780631d202bbf146103ff5780631f3ecf65146104125780631f3fed8f1461041b5780632307b441146104245780632369bf831461043757806323b872dd1461044a5780633020a89c1461045d57600080fd5b80630517d13d1461033457806306fdde03146103495780630758d92414610367578063095ea7b31461038757806318160ddd146103aa5780631a8145bb146103bc5780631b3d6e87146103c5575b600080fd5b610347610342366004612787565b610734565b005b61035161080f565b60405161035e91906127c4565b60405180910390f35b60205461037a906001600160a01b031681565b60405161035e91906127f7565b61039a610395366004612827565b6108a1565b604051901515815260200161035e565b6002545b60405190815260200161035e565b6103ae601a5481565b61037a7f0000000000000000000000002c88848d9b7a0b87180278483e4fdcedac03515a81565b6103476103fa366004612787565b6108bb565b61034761040d366004612851565b610986565b6103ae60185481565b6103ae60195481565b6103476104323660046128cf565b610a4b565b61034761044536600461293b565b610b2a565b61039a61045836600461295d565b610b9c565b6103ae60135481565b6040516012815260200161035e565b600d5461037a906001600160a01b031681565b6103ae60105481565b61039a61049f366004612827565b610bc0565b600e5461037a906001600160a01b031681565b601f5461037a906001600160a01b031681565b601d5461039a90610100900460ff1681565b6103476104ea366004612999565b610be2565b61039a6104fd36600461293b565b60066020526000908152604090205460ff1681565b6103ae600f5481565b6103ae60165481565b610347610532366004612787565b610ce4565b601d5461039a9062010000900460ff1681565b6103ae61055836600461293b565b610d3d565b610347610d58565b610347610dcc565b61034761057b3660046129da565b610e38565b61034761058e36600461293b565b610eec565b610347610f5e565b61039a6105a936600461293b565b60076020526000908152604090205460ff1681565b6005546001600160a01b031661037a565b610351610f97565b6103ae61271081565b6103ae601b5481565b6103476105f73660046129da565b610fa6565b6103ae60115481565b61039a610613366004612827565b6110aa565b600c5461037a906001600160a01b031681565b61039a610639366004612827565b611125565b60225461037a906001600160a01b031681565b6103ae60125481565b61039a61066836600461293b565b60096020526000908152604090205460ff1681565b61034761068b366004612851565b611133565b61034761069e36600461293b565b6111ea565b60085461039a9060ff1681565b6103ae60175481565b6103ae600a5481565b6103ae601e5481565b601d5461039a9060ff1681565b6103ae6106e6366004612999565b61125c565b6103ae60145481565b610347611287565b6103ae60155481565b61034761071336600461293b565b6112bd565b6103ae600b5481565b60215461037a906001600160a01b031681565b6005546001600160a01b031633146107675760405162461bcd60e51b815260040161075e90612a11565b60405180910390fd5b6107736012600a612b40565b6103e861077f60025490565b61078a906001612b4f565b6107949190612b66565b61079e9190612b66565b8110156107bd5760405162461bcd60e51b815260040161075e90612b88565b6107c96012600a612b40565b6107d39082612b4f565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461081e90612ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461084a90612ba9565b80156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b5050505050905090565b6000336108af81858561154e565b60019150505b92915050565b6005546001600160a01b031633146108e55760405162461bcd60e51b815260040161075e90612a11565b6108f16012600a612b40565b6103e86108fd60025490565b610908906001612b4f565b6109129190612b66565b61091c9190612b66565b81101561093b5760405162461bcd60e51b815260040161075e90612b88565b6109476012600a612b40565b6109519082612b4f565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610804565b6005546001600160a01b031633146109b05760405162461bcd60e51b815260040161075e90612a11565b601084905560118390556012829055601381905580826109d08587612be3565b6109da9190612be3565b6109e49190612be3565b600f8190556103e81015610a0a5760405162461bcd60e51b815260040161075e90612bf6565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600f54604051610a3d91815260200190565b60405180910390a150505050565b6005546001600160a01b03163314610a755760405162461bcd60e51b815260040161075e90612a11565b828114610abd5760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b604482015260640161075e565b60005b83811015610b2357610b1133868684818110610ade57610ade612c22565b9050602002016020810190610af3919061293b565b858585818110610b0557610b05612c22565b905060200201356113a8565b80610b1b81612c38565b915050610ac0565b5050505050565b6005546001600160a01b03163314610b545760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038116610b7a5760405162461bcd60e51b815260040161075e90612c51565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610baa858285611672565b610bb58585856116e6565b506001949350505050565b6000336108af818585610bd3838361125c565b610bdd9190612be3565b61154e565b6005546001600160a01b03163314610c0c5760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038216610c625760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000604482015260640161075e565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190610c919030906004016127f7565b602060405180830381865afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190612c77565b9050610cdf83838361175b565b505050565b80610cee33610d3d565b1015610d305760405162461bcd60e51b81526020600482015260116024820152706e6f7420656e6f75676820746f6b656e7360781b604482015260640161075e565b610d3a33826117ad565b50565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610d825760405162461bcd60e51b815260040161075e90612a11565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610df65760405162461bcd60e51b815260040161075e90612a11565b601d805461ffff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610e625760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038216610e885760405162461bcd60e51b815260040161075e90612c90565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b03163314610f165760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038116610f3c5760405162461bcd60e51b815260040161075e90612c51565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f885760405162461bcd60e51b815260040161075e90612a11565b6008805460ff19166001179055565b60606004805461081e90612ba9565b6005546001600160a01b03163314610fd05760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b038216610ff65760405162461bcd60e51b815260040161075e90612c90565b8061104e57601f546001600160a01b039081169083160361104e5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b604482015260640161075e565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101610ee0565b600033816110b8828661125c565b9050838110156111185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161075e565b610bb5828686840361154e565b6000336108af8185856116e6565b6005546001600160a01b0316331461115d5760405162461bcd60e51b815260040161075e90612a11565b6015849055601683905560178290556018819055808261117d8587612be3565b6111879190612be3565b6111919190612be3565b60148190556103e810156111b75760405162461bcd60e51b815260040161075e90612bf6565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97601454604051610a3d91815260200190565b6005546001600160a01b031633146112145760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b03811661123a5760405162461bcd60e51b815260040161075e90612c51565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146112b15760405162461bcd60e51b815260040161075e90612a11565b601d805460ff19169055565b6005546001600160a01b031633146112e75760405162461bcd60e51b815260040161075e90612a11565b6001600160a01b03811661134c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161075e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661140c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161075e565b6001600160a01b03821661146e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161075e565b6001600160a01b038316600090815260208190526040902054818110156114e65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161075e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b6001600160a01b0383166115b05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161075e565b6001600160a01b0382166116115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161075e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061167e848461125c565b9050600019811461154857818110156116d95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161075e565b611548848484840361154e565b6116f18383836118df565b6001600160a01b03831660009081526006602052604090205460ff1615801561173357506001600160a01b03821660009081526006602052604090205460ff16155b1561175057611743838383611c40565b61174d9082612cb6565b90505b610cdf8383836113a8565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610cdf908490611f0d565b6001600160a01b03821661180d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161075e565b6001600160a01b038216600090815260208190526040902054818110156118815760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161075e565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03831660009081526006602052604090205460ff1615801561192157506001600160a01b03821660009081526006602052604090205460ff16155b1561196d5760085460ff1661196d5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b604482015260640161075e565b601d54610100900460ff1615610cdf57601d5460ff1615611a64576020546001600160a01b038381169116148015906119bf57506001600160a01b03821660009081526009602052604090205460ff16155b15611a6457326000908152601c6020526040902054431180156119f957506001600160a01b0382166000908152601c602052604090205443115b611a3f5760405162461bcd60e51b81526020600482015260176024820152762a3930b739b332b9102232b630bc9032b730b13632b21760491b604482015260640161075e565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526009602052604090205460ff168015611aa557506001600160a01b03821660009081526007602052604090205460ff16155b15611b6057600a54811115611afc5760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e000000604482015260640161075e565b600b54611b0883610d3d565b611b129083612be3565b1115610cdf5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c65740000000000604482015260640161075e565b6001600160a01b03821660009081526009602052604090205460ff168015611ba157506001600160a01b03831660009081526007602052604090205460ff16155b15611c1457600a54811115610cdf5760405162461bcd60e51b815260206004820152603360248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152721036b0bc2a3930b739b0b1ba34b7b720b6ba1760691b606482015260840161075e565b6001600160a01b03821660009081526007602052604090205460ff16610cdf57600b54611b0883610d3d565b600080611c4c30610d3d565b601e5490915081108015908190611c6b5750601d5462010000900460ff165b8015611c815750601d546301000000900460ff16155b8015611ca557506001600160a01b03851660009081526009602052604090205460ff165b15611cd357601d805463ff00000019166301000000179055611cc5611fdf565b601d805463ff000000191690555b6001600160a01b038516600090815260096020526040812054819060ff168015611cff57506000601454115b15611ddd5761271060145487611d159190612b4f565b611d1f9190612b66565b915060145460165483611d329190612b4f565b611d3c9190612b66565b601a6000828254611d4d9190612be3565b9091555050601454601554611d629084612b4f565b611d6c9190612b66565b60196000828254611d7d9190612be3565b9091555050601454601754611d929084612b4f565b611d9c9190612b66565b601b6000828254611dad9190612be3565b9091555050601454601854611dc29084612b4f565b611dcc9190612b66565b611dd69082612be3565b9050611ee1565b6001600160a01b03881660009081526009602052604090205460ff168015611e0757506000600f54115b15611ee157612710600f5487611e1d9190612b4f565b611e279190612b66565b9150600f5460105483611e3a9190612b4f565b611e449190612b66565b60196000828254611e559190612be3565b9091555050600f54601154611e6a9084612b4f565b611e749190612b66565b601a6000828254611e859190612be3565b9091555050600f54601254611e9a9084612b4f565b611ea49190612b66565b601b6000828254611eb59190612be3565b9091555050600f54601354611eca9084612b4f565b611ed49190612b66565b611ede9082612be3565b90505b8115611ef257611ef28830846113a8565b8015611f0257611f0230826117ad565b509695505050505050565b6000611f62826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123529092919063ffffffff16565b805190915015610cdf5780806020019051810190611f809190612cc9565b610cdf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161075e565b6000611fea30610d3d565b90506000601b54601954601a546120019190612be3565b61200b9190612be3565b9050811580612018575080155b15612021575050565b601e5461202f906014612b4f565b82111561204757601e54612044906014612b4f565b91505b6000600282601a548561205a9190612b4f565b6120649190612b66565b61206e9190612b66565b905061208261207d8285612cb6565b612369565b6021546040516304fa881160e21b81526001600160a01b037f0000000000000000000000002c88848d9b7a0b87180278483e4fdcedac03515a8116926313ea2044926120d59291909116906004016127f7565b600060405180830381600087803b1580156120ef57600080fd5b505af1158015612103573d6000803e3d6000fd5b50506021546040516370a0823160e01b8152600093506001600160a01b0390911691506370a082319061213a9030906004016127f7565b602060405180830381865afa158015612157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217b9190612c77565b9050600081905060006002601a546121939190612b66565b61219d9086612cb6565b6019546121aa9085612b4f565b6121b49190612b66565b905060006002601a546121c79190612b66565b6121d19087612cb6565b601b546121de9086612b4f565b6121e89190612b66565b90506121f48183612be3565b6121fe9084612cb6565b6000601a8190556019819055601b559250841580159061221e5750600083115b1561222d5761222d85846124ef565b801561225057602154600e54612250916001600160a01b0390811691168361175b565b6021546040516370a0823160e01b81526000916001600160a01b0316906370a08231906122819030906004016127f7565b602060405180830381865afa15801561229e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c29190612c77565b111561234957602154600c546040516370a0823160e01b8152612349926001600160a01b0390811692169082906370a08231906123039030906004016127f7565b602060405180830381865afa158015612320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123449190612c77565b61175b565b50505050505050565b6060612361848460008561260e565b949350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061239e5761239e612c22565b6001600160a01b0392831660209182029290920101526021548251911690829060019081106123cf576123cf612c22565b6001600160a01b0392831660209182029290920181019190915254604051635c11d79560e01b8152911690635c11d7959061243790859060009086907f0000000000000000000000002c88848d9b7a0b87180278483e4fdcedac03515a904290600401612ce6565b600060405180830381600087803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b50506021546040516304fa881160e21b81526001600160a01b037f0000000000000000000000002c88848d9b7a0b87180278483e4fdcedac03515a811694506313ea204493506124b99216906004016127f7565b600060405180830381600087803b1580156124d357600080fd5b505af11580156124e7573d6000803e3d6000fd5b505050505050565b60215460205460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af1158015612544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125689190612cc9565b50602054602154600d5460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018690526064810185905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af11580156125ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b239190612d57565b60608247101561266f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161075e565b600080866001600160a01b0316858760405161268b9190612d85565b60006040518083038185875af1925050503d80600081146126c8576040519150601f19603f3d011682016040523d82523d6000602084013e6126cd565b606091505b50915091506126de878383876126e9565b979650505050505050565b60608315612758578251600003612751576001600160a01b0385163b6127515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161075e565b5081612361565b612361838381511561276d5781518083602001fd5b8060405162461bcd60e51b815260040161075e91906127c4565b60006020828403121561279957600080fd5b5035919050565b60005b838110156127bb5781810151838201526020016127a3565b50506000910152565b60208152600082518060208401526127e38160408501602087016127a0565b601f01601f19169190910160400192915050565b6001600160a01b0391909116815260200190565b80356001600160a01b038116811461282257600080fd5b919050565b6000806040838503121561283a57600080fd5b6128438361280b565b946020939093013593505050565b6000806000806080858703121561286757600080fd5b5050823594602084013594506040840135936060013592509050565b60008083601f84011261289557600080fd5b50813567ffffffffffffffff8111156128ad57600080fd5b6020830191508360208260051b85010111156128c857600080fd5b9250929050565b600080600080604085870312156128e557600080fd5b843567ffffffffffffffff808211156128fd57600080fd5b61290988838901612883565b9096509450602087013591508082111561292257600080fd5b5061292f87828801612883565b95989497509550505050565b60006020828403121561294d57600080fd5b6129568261280b565b9392505050565b60008060006060848603121561297257600080fd5b61297b8461280b565b92506129896020850161280b565b9150604084013590509250925092565b600080604083850312156129ac57600080fd5b6129b58361280b565b91506129c36020840161280b565b90509250929050565b8015158114610d3a57600080fd5b600080604083850312156129ed57600080fd5b6129f68361280b565b91506020830135612a06816129cc565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612a97578160001904821115612a7d57612a7d612a46565b80851615612a8a57918102915b93841c9390800290612a61565b509250929050565b600082612aae575060016108b5565b81612abb575060006108b5565b8160018114612ad15760028114612adb57612af7565b60019150506108b5565b60ff841115612aec57612aec612a46565b50506001821b6108b5565b5060208310610133831016604e8410600b8410161715612b1a575081810a6108b5565b612b248383612a5c565b8060001904821115612b3857612b38612a46565b029392505050565b600061295660ff841683612a9f565b80820281158282048414176108b5576108b5612a46565b600082612b8357634e487b7160e01b600052601260045260246000fd5b500490565b602080825260079082015266546f6f206c6f7760c81b604082015260600190565b600181811c90821680612bbd57607f821691505b602082108103612bdd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156108b5576108b5612a46565b6020808252601290820152714b656570207461782062656c6f772031302560701b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201612c4a57612c4a612a46565b5060010190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b600060208284031215612c8957600080fd5b5051919050565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b818103818111156108b5576108b5612a46565b600060208284031215612cdb57600080fd5b8151612956816129cc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d365784516001600160a01b031683529383019391830191600101612d11565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d6c57600080fd5b8351925060208401519150604084015190509250925092565b60008251612d978184602087016127a0565b919091019291505056fea26469706673582212203003d2f1101f4691298fb2d4cc78cf9d61b62845e9620903ca5911e3ed7273f164736f6c63430008110033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010426574746572204361756c205261756c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241554c00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Better Caul Raul
Arg [1] : _symbol (string): RAUL

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [3] : 426574746572204361756c205261756c00000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 5241554c00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

30876:14443:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42020:287;;;;;;:::i;:::-;;:::i;:::-;;4189:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32164:27;;;;;-1:-1:-1;;;;;32164:27:0;;;;;;;;;;:::i;6549:201::-;;;;;;:::i;:::-;;:::i;:::-;;;1684:14:1;;1677:22;1659:41;;1647:2;1632:18;6549:201:0;1519:187:1;5318:108:0;5406:12;;5318:108;;;1857:25:1;;;1845:2;1830:18;5318:108:0;1711:177:1;31692:33:0;;;;;;31772:42;;;;;42315:267;;;;;;:::i;:::-;;:::i;42590:462::-;;;;;;:::i;:::-;;:::i;31617:26::-;;;;;;31652:33;;;;;;43979:333;;;;;;:::i;:::-;;:::i;44624:173::-;;;;;;:::i;:::-;;:::i;7330:261::-;;;;;;:::i;:::-;;:::i;31441:25::-;;;;;;5160:93;;;5243:2;4328:36:1;;4316:2;4301:18;5160:93:0;4186:184:1;31231:31:0;;;;;-1:-1:-1;;;;;31231:31:0;;;31336:30;;;;;;8000:238;;;;;;:::i;:::-;;:::i;31269:25::-;;;;;-1:-1:-1;;;;;31269:25:0;;;32136:21;;;;;-1:-1:-1;;;;;32136:21:0;;;31990:33;;;;;;;;;;;;44320:296;;;;;;:::i;:::-;;:::i;30927:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31303:26;;;;;;31547:31;;;;;;45155:161;;;;;;:::i;:::-;;:::i;32032:30::-;;;;;;;;;;;;5489:127;;;;;;:::i;:::-;;:::i;15720:150::-;;;:::i;43634:231::-;;;:::i;41404:247::-;;;;;;:::i;:::-;;:::i;44805:161::-;;;;;;:::i;:::-;;:::i;43543:83::-;;;:::i;30981:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15506:79;15571:6;;-1:-1:-1;;;;;15571:6:0;15506:79;;4408:104;;;:::i;32264:43::-;;32302:5;32264:43;;31732:27;;;;;;41659:353;;;;;;:::i;:::-;;:::i;31373:30::-;;;;;;8741:436;;;;;;:::i;:::-;;:::i;31193:31::-;;;;;-1:-1:-1;;;;;31193:31:0;;;5822:193;;;;;;:::i;:::-;;:::i;32238:17::-;;;;;-1:-1:-1;;;;;32238:17:0;;;31410:24;;;;;;31073:42;;;;;;:::i;:::-;;;;;;;;;;;;;;;;43060:475;;;;;;:::i;:::-;;:::i;44974:173::-;;;;;;:::i;:::-;;:::i;31039:25::-;;;;;;;;;31585;;;;;;31124:29;;;;;;32097:30;;;;;;31942:39;;;;;;;;;6078:151;;;;;;:::i;:::-;;:::i;31475:27::-;;;;;;43873:98;;;:::i;31509:31::-;;;;;;15878:244;;;;;;:::i;:::-;;:::i;31160:24::-;;;;;;32198:33;;;;;-1:-1:-1;;;;;32198:33:0;;;42020:287;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;;;;;;;;;42158:14:::1;5243:2:::0;42158::::1;:14;:::i;:::-;42151:4;42131:13;5406:12:::0;;;5318:108;42131:13:::1;:17;::::0;42147:1:::1;42131:17;:::i;:::-;:24;;;;:::i;:::-;42130:43;;;;:::i;:::-;42112:14;:61;;42104:81;;;;-1:-1:-1::0;;;42104:81:0::1;;;;;;;:::i;:::-;42231:14;5243:2:::0;42231::::1;:14;:::i;:::-;42213:33;::::0;:14;:33:::1;:::i;:::-;42196:14;:50:::0;;;42262:37:::1;::::0;1857:25:1;;;42262:37:0::1;::::0;1845:2:1;1830:18;42262:37:0::1;;;;;;;;42020:287:::0;:::o;4189:100::-;4243:13;4276:5;4269:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4189:100;:::o;6549:201::-;6632:4;175:10;6688:32;175:10;6704:7;6713:6;6688:8;:32::i;:::-;6738:4;6731:11;;;6549:201;;;;;:::o;42315:267::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;42448:14:::1;5243:2:::0;42448::::1;:14;:::i;:::-;42441:4;42421:13;5406:12:::0;;;5318:108;42421:13:::1;:17;::::0;42437:1:::1;42421:17;:::i;:::-;:24;;;;:::i;:::-;42420:43;;;;:::i;:::-;42402:14;:61;;42394:81;;;;-1:-1:-1::0;;;42394:81:0::1;;;;;;;:::i;:::-;42516:14;5243:2:::0;42516::::1;:14;:::i;:::-;42498:33;::::0;:14;:33:::1;:::i;:::-;42486:9;:45:::0;;;42547:27:::1;::::0;1857:25:1;;;42547:27:0::1;::::0;1845:2:1;1830:18;42547:27:0::1;1711:177:1::0;42590:462:0;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;42723:15:::1;:31:::0;;;42765:15:::1;:31:::0;;;42807:9:::1;:19:::0;;;42837:10:::1;:21:::0;;;42850:8;42819:7;42883:33:::1;42783:13:::0;42741;42883:33:::1;:::i;:::-;:45;;;;:::i;:::-;:58;;;;:::i;:::-;42869:11;:72:::0;;;42975:4:::1;-1:-1:-1::0;42960:19:0::1;42952:50;;;;-1:-1:-1::0;;;42952:50:0::1;;;;;;;:::i;:::-;43018:26;43032:11;;43018:26;;;;1857:25:1::0;;1845:2;1830:18;;1711:177;43018:26:0::1;;;;;;;;42590:462:::0;;;;:::o;43979:333::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;44104:37;;::::1;44096:72;;;::::0;-1:-1:-1;;;44096:72:0;;9413:2:1;44096:72:0::1;::::0;::::1;9395:21:1::0;9452:2;9432:18;;;9425:30;-1:-1:-1;;;9471:18:1;;;9464:52;9533:18;;44096:72:0::1;9211:346:1::0;44096:72:0::1;44183:9;44179:126;44198:18:::0;;::::1;44179:126;;;44237:56;44253:10;44265:7;;44273:1;44265:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;44277:12;;44290:1;44277:15;;;;;;;:::i;:::-;;;;;;;44237;:56::i;:::-;44218:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44179:126;;;;43979:333:::0;;;;:::o;44624:173::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44712:22:0;::::1;44704:47;;;;-1:-1:-1::0;;;44704:47:0::1;;;;;;;:::i;:::-;44762:16;:27:::0;;-1:-1:-1;;;;;;44762:27:0::1;-1:-1:-1::0;;;;;44762:27:0;;;::::1;::::0;;;::::1;::::0;;44624:173::o;7330:261::-;7427:4;175:10;7485:38;7501:4;175:10;7516:6;7485:15;:38::i;:::-;7534:27;7544:4;7550:2;7554:6;7534:9;:27::i;:::-;-1:-1:-1;7579:4:0;;7330:261;-1:-1:-1;;;;7330:261:0:o;8000:238::-;8088:4;175:10;8144:64;175:10;8160:7;8197:10;8169:25;175:10;8160:7;8169:9;:25::i;:::-;:38;;;;:::i;:::-;8144:8;:64::i;44320:296::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44409:20:0;::::1;44401:59;;;::::0;-1:-1:-1;;;44401:59:0;;10377:2:1;44401:59:0::1;::::0;::::1;10359:21:1::0;10416:2;10396:18;;;10389:30;10455:28;10435:18;;;10428:56;10501:18;;44401:59:0::1;10175:350:1::0;44401:59:0::1;44498:39;::::0;-1:-1:-1;;;44498:39:0;;44471:24:::1;::::0;-1:-1:-1;;;;;44498:24:0;::::1;::::0;::::1;::::0;:39:::1;::::0;44531:4:::1;::::0;44498:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44471:66;;44548:60;44578:6;44586:3;44591:16;44548:22;:60::i;:::-;44390:226;44320:296:::0;;:::o;45155:161::-;45244:6;45219:21;45229:10;45219:9;:21::i;:::-;:31;;45211:61;;;;-1:-1:-1;;;45211:61:0;;10921:2:1;45211:61:0;;;10903:21:1;10960:2;10940:18;;;10933:30;-1:-1:-1;;;10979:18:1;;;10972:47;11036:18;;45211:61:0;10719:341:1;45211:61:0;45283:25;45289:10;45301:6;45283:5;:25::i;:::-;45155:161;:::o;5489:127::-;-1:-1:-1;;;;;5590:18:0;5563:7;5590:18;;;;;;;;;;;;5489:127::o;15720:150::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;15813:6:::1;::::0;15792:40:::1;::::0;15829:1:::1;::::0;-1:-1:-1;;;;;15813:6:0::1;::::0;15792:40:::1;::::0;15829:1;;15792:40:::1;15843:6;:19:::0;;-1:-1:-1;;;;;;15843:19:0::1;::::0;;15720:150::o;43634:231::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;43688:14:::1;:22:::0;;-1:-1:-1;;43721:28:0;;;5406:12;;43760:14:::1;:30:::0;5406:12;;43801:9:::1;:25:::0;43842:15:::1;::::0;::::1;::::0;;;::::1;43634:231::o:0;41404:247::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41503:22:0;::::1;41495:47;;;;-1:-1:-1::0;;;41495:47:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41553:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;41553:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41605:38;;11574:51:1;;;11641:18;;;11634:50;41605:38:0::1;::::0;11547:18:1;41605:38:0::1;;;;;;;;41404:247:::0;;:::o;44805:161::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44887:22:0;::::1;44879:47;;;;-1:-1:-1::0;;;44879:47:0::1;;;;;;;:::i;:::-;44937:10;:21:::0;;-1:-1:-1;;;;;;44937:21:0::1;-1:-1:-1::0;;;;;44937:21:0;;;::::1;::::0;;;::::1;::::0;;44805:161::o;43543:83::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;43598:13:::1;:20:::0;;-1:-1:-1;;43598:20:0::1;43614:4;43598:20;::::0;;43543:83::o;4408:104::-;4464:13;4497:7;4490:14;;;;;:::i;41659:353::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41760:22:0;::::1;41752:47;;;;-1:-1:-1::0;;;41752:47:0::1;;;;;;;:::i;:::-;41814:9;41810:90;;41859:6;::::0;-1:-1:-1;;;;;41859:6:0;;::::1;41847:18:::0;;::::1;::::0;41839:49:::1;;;::::0;-1:-1:-1;;;41839:49:0;;11897:2:1;41839:49:0::1;::::0;::::1;11879:21:1::0;11936:2;11916:18;;;11909:30;-1:-1:-1;;;11955:18:1;;;11948:48;12013:18;;41839:49:0::1;11695:342:1::0;41839:49:0::1;-1:-1:-1::0;;;;;41910:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;41910:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41964:40;;11574:51:1;;;11641:18;;;11634:50;41964:40:0::1;::::0;11547:18:1;41964:40:0::1;11406:284:1::0;8741:436:0;8834:4;175:10;8834:4;8917:25;175:10;8934:7;8917:9;:25::i;:::-;8890:52;;8981:15;8961:16;:35;;8953:85;;;;-1:-1:-1;;;8953:85:0;;12244:2:1;8953:85:0;;;12226:21:1;12283:2;12263:18;;;12256:30;12322:34;12302:18;;;12295:62;-1:-1:-1;;;12373:18:1;;;12366:35;12418:19;;8953:85:0;12042:401:1;8953:85:0;9074:60;9083:5;9090:7;9118:15;9099:16;:34;9074:8;:60::i;5822:193::-;5901:4;175:10;5957:28;175:10;5974:2;5978:6;5957:9;:28::i;43060:475::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;43194:16:::1;:32:::0;;;43237:16:::1;:32:::0;;;43280:10:::1;:20:::0;;;43311:11:::1;:22:::0;;;43325:8;43293:7;43359:35:::1;43256:13:::0;43213;43359:35:::1;:::i;:::-;:48;;;;:::i;:::-;:62;;;;:::i;:::-;43344:12;:77:::0;;;43456:4:::1;-1:-1:-1::0;43440:20:0::1;43432:51;;;;-1:-1:-1::0;;;43432:51:0::1;;;;;;;:::i;:::-;43499:28;43514:12;;43499:28;;;;1857:25:1::0;;1845:2;1830:18;;1711:177;44974:173:0;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45062:22:0;::::1;45054:47;;;;-1:-1:-1::0;;;45054:47:0::1;;;;;;;:::i;:::-;45112:16;:27:::0;;-1:-1:-1;;;;;;45112:27:0::1;-1:-1:-1::0;;;;;45112:27:0;;;::::1;::::0;;;::::1;::::0;;44974:173::o;6078:151::-;-1:-1:-1;;;;;6194:18:0;;;6167:7;6194:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6078:151::o;43873:98::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;43935:20:::1;:28:::0;;-1:-1:-1;;43935:28:0::1;::::0;;43873:98::o;15878:244::-;15633:6;;-1:-1:-1;;;;;15633:6:0;175:10;15633:22;15625:67;;;;-1:-1:-1;;;15625:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15967:22:0;::::1;15959:73;;;::::0;-1:-1:-1;;;15959:73:0;;12650:2:1;15959:73:0::1;::::0;::::1;12632:21:1::0;12689:2;12669:18;;;12662:30;12728:34;12708:18;;;12701:62;-1:-1:-1;;;12779:18:1;;;12772:36;12825:19;;15959:73:0::1;12448:402:1::0;15959:73:0::1;16069:6;::::0;16048:38:::1;::::0;-1:-1:-1;;;;;16048:38:0;;::::1;::::0;16069:6:::1;::::0;16048:38:::1;::::0;16069:6:::1;::::0;16048:38:::1;16097:6;:17:::0;;-1:-1:-1;;;;;;16097:17:0::1;-1:-1:-1::0;;;;;16097:17:0;;;::::1;::::0;;;::::1;::::0;;15878:244::o;9647:806::-;-1:-1:-1;;;;;9744:18:0;;9736:68;;;;-1:-1:-1;;;9736:68:0;;13057:2:1;9736:68:0;;;13039:21:1;13096:2;13076:18;;;13069:30;13135:34;13115:18;;;13108:62;-1:-1:-1;;;13186:18:1;;;13179:35;13231:19;;9736:68:0;12855:401:1;9736:68:0;-1:-1:-1;;;;;9823:16:0;;9815:64;;;;-1:-1:-1;;;9815:64:0;;13463:2:1;9815:64:0;;;13445:21:1;13502:2;13482:18;;;13475:30;13541:34;13521:18;;;13514:62;-1:-1:-1;;;13592:18:1;;;13585:33;13635:19;;9815:64:0;13261:399:1;9815:64:0;-1:-1:-1;;;;;9965:15:0;;9943:19;9965:15;;;;;;;;;;;9999:21;;;;9991:72;;;;-1:-1:-1;;;9991:72:0;;13867:2:1;9991:72:0;;;13849:21:1;13906:2;13886:18;;;13879:30;13945:34;13925:18;;;13918:62;-1:-1:-1;;;13996:18:1;;;13989:36;14042:19;;9991:72:0;13665:402:1;9991:72:0;-1:-1:-1;;;;;10099:15:0;;;:9;:15;;;;;;;;;;;10117:20;;;10099:38;;10317:13;;;;;;;;;;:23;;;;;;10369:26;;1857:25:1;;;10317:13:0;;10369:26;;1830:18:1;10369:26:0;;;;;;;10408:37;9725:728;9647:806;;;:::o;12734:346::-;-1:-1:-1;;;;;12836:19:0;;12828:68;;;;-1:-1:-1;;;12828:68:0;;14274:2:1;12828:68:0;;;14256:21:1;14313:2;14293:18;;;14286:30;14352:34;14332:18;;;14325:62;-1:-1:-1;;;14403:18:1;;;14396:34;14447:19;;12828:68:0;14072:400:1;12828:68:0;-1:-1:-1;;;;;12915:21:0;;12907:68;;;;-1:-1:-1;;;12907:68:0;;14679:2:1;12907:68:0;;;14661:21:1;14718:2;14698:18;;;14691:30;14757:34;14737:18;;;14730:62;-1:-1:-1;;;14808:18:1;;;14801:32;14850:19;;12907:68:0;14477:398:1;12907:68:0;-1:-1:-1;;;;;12988:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13040:32;;1857:25:1;;;13040:32:0;;1830:18:1;13040:32:0;;;;;;;12734:346;;;:::o;13371:419::-;13472:24;13499:25;13509:5;13516:7;13499:9;:25::i;:::-;13472:52;;-1:-1:-1;;13539:16:0;:37;13535:248;;13621:6;13601:16;:26;;13593:68;;;;-1:-1:-1;;;13593:68:0;;15082:2:1;13593:68:0;;;15064:21:1;15121:2;15101:18;;;15094:30;15160:31;15140:18;;;15133:59;15209:18;;13593:68:0;14880:353:1;13593:68:0;13705:51;13714:5;13721:7;13749:6;13730:16;:25;13705:8;:51::i;35576:347::-;35718:29;35730:4;35736:2;35740:6;35718:11;:29::i;:::-;-1:-1:-1;;;;;35764:20:0;;;;;;:14;:20;;;;;;;;35763:21;:44;;;;-1:-1:-1;;;;;;35789:18:0;;;;;;:14;:18;;;;;;;;35788:19;35763:44;35760:112;;;35833:27;35843:4;35849:2;35853:6;35833:9;:27::i;:::-;35823:37;;;;:::i;:::-;;;35760:112;35884:31;35900:4;35905:2;35908:6;35884:15;:31::i;22292:177::-;22402:58;;;-1:-1:-1;;;;;15563:32:1;;22402:58:0;;;15545:51:1;15612:18;;;;15605:34;;;22402:58:0;;;;;;;;;;15518:18:1;;;;22402:58:0;;;;;;;;-1:-1:-1;;;;;22402:58:0;-1:-1:-1;;;22402:58:0;;;22375:86;;22395:5;;22375:19;:86::i;11621:675::-;-1:-1:-1;;;;;11705:21:0;;11697:67;;;;-1:-1:-1;;;11697:67:0;;15852:2:1;11697:67:0;;;15834:21:1;15891:2;15871:18;;;15864:30;15930:34;15910:18;;;15903:62;-1:-1:-1;;;15981:18:1;;;15974:31;16022:19;;11697:67:0;15650:397:1;11697:67:0;-1:-1:-1;;;;;11864:18:0;;11839:22;11864:18;;;;;;;;;;;11901:24;;;;11893:71;;;;-1:-1:-1;;;11893:71:0;;16254:2:1;11893:71:0;;;16236:21:1;16293:2;16273:18;;;16266:30;16332:34;16312:18;;;16305:62;-1:-1:-1;;;16383:18:1;;;16376:32;16425:19;;11893:71:0;16052:398:1;11893:71:0;-1:-1:-1;;;;;12000:18:0;;:9;:18;;;;;;;;;;;12021:23;;;12000:44;;12139:12;:22;;;;;;;12190:37;1857:25:1;;;12000:9:0;;:18;12190:37;;1830:18:1;12190:37:0;;;;;;;44390:226:::1;44320:296:::0;;:::o;35931:1330::-;-1:-1:-1;;;;;36020:20:0;;;;;;:14;:20;;;;;;;;36019:21;:44;;;;-1:-1:-1;;;;;;36045:18:0;;;;;;:14;:18;;;;;;;;36044:19;36019:44;36016:119;;;36087:13;;;;36079:44;;;;-1:-1:-1;;;36079:44:0;;16657:2:1;36079:44:0;;;16639:21:1;16696:2;16676:18;;;16669:30;-1:-1:-1;;;16715:18:1;;;16708:48;16773:18;;36079:44:0;16455:342:1;36079:44:0;36150:14;;;;;;;36147:1107;;;36184:20;;;;36180:421;;;36242:9;;-1:-1:-1;;;;;36228:24:0;;;36242:9;;36228:24;;;;:42;;-1:-1:-1;;;;;;36257:13:0;;;;;;:9;:13;;;;;;;;36256:14;36228:42;36224:362;;;36327:9;36302:35;;;;:24;:35;;;;;;36340:12;-1:-1:-1;36302:97:0;;;;-1:-1:-1;;;;;;36356:28:0;;;;;;:24;:28;;;;;;36387:12;-1:-1:-1;36302:97:0;36294:133;;;;-1:-1:-1;;;36294:133:0;;17004:2:1;36294:133:0;;;16986:21:1;17043:2;17023:18;;;17016:30;-1:-1:-1;;;17062:18:1;;;17055:53;17125:18;;36294:133:0;16802:347:1;36294:133:0;36475:9;36450:35;;;;:24;:35;;;;;;36488:12;36450:50;;;;-1:-1:-1;;;;;36523:28:0;;;;;;:43;36224:362;-1:-1:-1;;;;;36641:15:0;;;;;;:9;:15;;;;;;;;:40;;;;-1:-1:-1;;;;;;36661:20:0;;;;;;:16;:20;;;;;;;;36660:21;36641:40;36637:606;;;36720:14;;36710:6;:24;;36702:66;;;;-1:-1:-1;;;36702:66:0;;17356:2:1;36702:66:0;;;17338:21:1;17395:2;17375:18;;;17368:30;17434:31;17414:18;;;17407:59;17483:18;;36702:66:0;17154:353:1;36702:66:0;36821:9;;36804:13;36814:2;36804:9;:13::i;:::-;36795:22;;:6;:22;:::i;:::-;:35;;36787:75;;;;-1:-1:-1;;;36787:75:0;;17714:2:1;36787:75:0;;;17696:21:1;17753:2;17733:18;;;17726:30;17792:29;17772:18;;;17765:57;17839:18;;36787:75:0;17512:351:1;36637:606:0;-1:-1:-1;;;;;36923:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;36941:22:0;;;;;;:16;:22;;;;;;;;36940:23;36923:40;36919:324;;;37002:14;;36992:6;:24;;36984:88;;;;-1:-1:-1;;;36984:88:0;;18070:2:1;36984:88:0;;;18052:21:1;18109:2;18089:18;;;18082:30;18148:34;18128:18;;;18121:62;-1:-1:-1;;;18199:18:1;;;18192:49;18258:19;;36984:88:0;17868:415:1;36919:324:0;-1:-1:-1;;;;;37111:20:0;;;;;;:16;:20;;;;;;;;37107:136;;37186:9;;37169:13;37179:2;37169:9;:13::i;37269:1526::-;37348:7;37367:28;37398:24;37416:4;37398:9;:24::i;:::-;37482:15;;37367:55;;-1:-1:-1;37458:39:0;;;;;;;37513:22;;-1:-1:-1;37524:11:0;;;;;;;37513:22;:35;;;;-1:-1:-1;37540:8:0;;;;;;;37539:9;37513:35;:52;;;;-1:-1:-1;;;;;;37552:13:0;;;;;;:9;:13;;;;;;;;37513:52;37510:155;;;37582:8;:15;;-1:-1:-1;;37582:15:0;;;;;37612:10;:8;:10::i;:::-;37637:8;:16;;-1:-1:-1;;37637:16:0;;;37510:155;-1:-1:-1;;;;;37773:13:0;;37685:11;37773:13;;;:9;:13;;;;;;37685:11;;37773:13;;:33;;;;;37805:1;37790:12;;:16;37773:33;37769:790;;;32302:5;37837:12;;37828:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;37822:41;;37925:12;;37906:16;;37900:3;:22;;;;:::i;:::-;:37;;;;:::i;:::-;37878:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;37999:12:0;;37980:16;;37974:22;;:3;:22;:::i;:::-;:37;;;;:::i;:::-;37952:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;38061:12:0;;38048:10;;38042:16;;:3;:16;:::i;:::-;:31;;;;:::i;:::-;38026:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;38125:12:0;;38111:11;;38105:17;;:3;:17;:::i;:::-;:32;;;;:::i;:::-;38088:49;;;;:::i;:::-;;;37769:790;;;-1:-1:-1;;;;;38188:15:0;;;;;;:9;:15;;;;;;;;:34;;;;;38221:1;38207:11;;:15;38188:34;38185:374;;;32302:5;38254:11;;38245:6;:20;;;;:::i;:::-;:34;;;;:::i;:::-;38239:40;;38340:11;;38322:15;;38316:3;:21;;;;:::i;:::-;:35;;;;:::i;:::-;38294:18;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;38412:11:0;;38394:15;;38388:21;;:3;:21;:::i;:::-;:35;;;;:::i;:::-;38366:18;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;38472:11:0;;38460:9;;38454:15;;:3;:15;:::i;:::-;:29;;;;:::i;:::-;38438:12;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;38534:11:0;;38521:10;;38515:16;;:3;:16;:::i;:::-;:30;;;;:::i;:::-;38498:47;;;;:::i;:::-;;;38185:374;38582:7;;38579:83;;38609:41;38625:4;38639;38646:3;38609:15;:41::i;:::-;38677:17;;38674:83;;38710:35;38724:4;38731:13;38710:5;:35::i;:::-;-1:-1:-1;38784:3:0;37269:1526;-1:-1:-1;;;;;;37269:1526:0:o;22690:333::-;22771:23;22797:69;22825:4;22797:69;;;;;;;;;;;;;;;;;22805:5;-1:-1:-1;;;;;22797:27:0;;;:69;;;;;:::i;:::-;22881:17;;22771:95;;-1:-1:-1;22881:21:0;22877:139;;22938:10;22927:30;;;;;;;;;;;;:::i;:::-;22919:85;;;;-1:-1:-1;;;22919:85:0;;18740:2:1;22919:85:0;;;18722:21:1;18779:2;18759:18;;;18752:30;18818:34;18798:18;;;18791:62;-1:-1:-1;;;18869:18:1;;;18862:40;18919:19;;22919:85:0;18538:406:1;39631:1741:0;39672:23;39698:24;39716:4;39698:9;:24::i;:::-;39672:50;;39733:25;39803:12;;39782:18;;39761;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;39733:82;-1:-1:-1;39839:20:0;;;:46;;-1:-1:-1;39863:22:0;;39839:46;39836:60;;;39888:7;;39631:1741::o;39836:60::-;39929:15;;:20;;39947:2;39929:20;:::i;:::-;39911:15;:38;39908:107;;;39983:15;;:20;;40001:2;39983:20;:::i;:::-;39965:38;;39908:107;40084:23;40169:1;40149:17;40128:18;;40110:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40084:86;-1:-1:-1;40191:59:0;40216:33;40084:86;40216:15;:33;:::i;:::-;40191:24;:59::i;:::-;40301:11;;40263:51;;-1:-1:-1;;;40263:51:0;;-1:-1:-1;;;;;40263:12:0;:29;;;;;:51;;40301:11;;;;;40263:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40364:11:0;;:36;;-1:-1:-1;;;40364:36:0;;40335:26;;-1:-1:-1;;;;;;40364:11:0;;;;-1:-1:-1;40364:21:0;;:36;;40394:4;;40364:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40335:65;;40411:31;40445:18;40411:52;;40476:31;40593:1;40574:18;;:20;;;;:::i;:::-;40553:42;;:17;:42;:::i;:::-;40531:18;;40510:39;;:18;:39;:::i;:::-;:86;;;;:::i;:::-;40476:120;;40607:25;40712:1;40693:18;;:20;;;;:::i;:::-;40672:42;;:17;:42;:::i;:::-;40656:12;;40635:33;;:18;:33;:::i;:::-;:80;;;;:::i;:::-;40607:108;-1:-1:-1;40755:43:0;40607:108;40755:23;:43;:::i;:::-;40728:70;;;;:::i;:::-;40844:1;40823:18;:22;;;40856:18;:22;;;40889:12;:16;40728:70;-1:-1:-1;40929:19:0;;;;;:50;;;40978:1;40952:23;:27;40929:50;40926:135;;;40995:54;41008:15;41025:23;40995:12;:54::i;:::-;41076:21;;41073:118;;41136:11;;41149:10;;41113:66;;-1:-1:-1;;;;;41136:11:0;;;;41149:10;41161:17;41113:22;:66::i;:::-;41206:11;;:36;;-1:-1:-1;;;41206:36:0;;41245:1;;-1:-1:-1;;;;;41206:11:0;;:21;;:36;;41236:4;;41206:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;41203:162;;;41285:11;;41298:16;;41316:36;;-1:-1:-1;;;41316:36:0;;41262:91;;-1:-1:-1;;;;;41285:11:0;;;;41298:16;;41285:11;;41316:21;;:36;;41346:4;;41316:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41262:22;:91::i;:::-;39659:1713;;;;;;;39631:1741::o;16795:229::-;16932:12;16964:52;16986:6;16994:4;17000:1;17003:12;16964:21;:52::i;:::-;16957:59;16795:229;-1:-1:-1;;;;16795:229:0:o;38803:471::-;38900:16;;;38914:1;38900:16;;;;;;;;38876:21;;38900:16;;;;;;;;;;-1:-1:-1;38900:16:0;38876:40;;38945:4;38927;38932:1;38927:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38927:23:0;;;:7;;;;;;;;;:23;38979:11;;38961:7;;38979:11;;;38961:4;;38979:11;;38961:7;;;;;;:::i;:::-;-1:-1:-1;;;;;38961:30:0;;;:7;;;;;;;;;;:30;;;;39004:9;:198;;-1:-1:-1;;;39004:198:0;;:9;;;:63;;:198;;39082:8;;39004:9;;39121:4;;39148:12;;39176:15;;39004:198;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39253:11:0;;39215:51;;-1:-1:-1;;;39215:51:0;;-1:-1:-1;;;;;39215:12:0;:29;;;-1:-1:-1;39215:29:0;;-1:-1:-1;39215:51:0;;39253:11;;39215:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38863:411;38803:471;:::o;39282:341::-;39371:11;;39399:9;;39371:58;;-1:-1:-1;;;39371:58:0;;-1:-1:-1;;;;;39399:9:0;;;39371:58;;;15545:51:1;15612:18;;;15605:34;;;39371:11:0;;;:19;;15518:18:1;;39371:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39472:9:0;;39518:11;;39580:16;;39472:143;;-1:-1:-1;;;39472:143:0;;39503:4;39472:143;;;20463:34:1;-1:-1:-1;;;;;39518:11:0;;;20513:18:1;;;20506:43;20565:18;;;20558:34;;;20608:18;;;20601:34;;;39472:9:0;20651:19:1;;;20644:35;;;20695:19;;;20688:35;39580:16:0;;;20739:19:1;;;20732:44;39599:15:0;20792:19:1;;;20785:35;39472:9:0;;;:22;;20397:19:1;;39472:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17915:455::-;18085:12;18143:5;18118:21;:30;;18110:81;;;;-1:-1:-1;;;18110:81:0;;21344:2:1;18110:81:0;;;21326:21:1;21383:2;21363:18;;;21356:30;21422:34;21402:18;;;21395:62;-1:-1:-1;;;21473:18:1;;;21466:36;21519:19;;18110:81:0;21142:402:1;18110:81:0;18203:12;18217:23;18244:6;-1:-1:-1;;;;;18244:11:0;18263:5;18270:4;18244:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18202:73;;;;18293:69;18320:6;18328:7;18337:10;18349:12;18293:26;:69::i;:::-;18286:76;17915:455;-1:-1:-1;;;;;;;17915:455:0:o;20488:644::-;20673:12;20702:7;20698:427;;;20730:10;:17;20751:1;20730:22;20726:290;;-1:-1:-1;;;;;16236:19:0;;;20940:60;;;;-1:-1:-1;;;20940:60:0;;22043:2:1;20940:60:0;;;22025:21:1;22082:2;22062:18;;;22055:30;22121:31;22101:18;;;22094:59;22170:18;;20940:60:0;21841:353:1;20940:60:0;-1:-1:-1;21037:10:0;21030:17;;20698:427;21080:33;21088:10;21100:12;21835:17;;:21;21831:388;;22067:10;22061:17;22124:15;22111:10;22107:2;22103:19;22096:44;21831:388;22194:12;22187:20;;-1:-1:-1;;;22187:20:0;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:250::-;284:1;294:113;308:6;305:1;302:13;294:113;;;384:11;;;378:18;365:11;;;358:39;330:2;323:10;294:113;;;-1:-1:-1;;441:1:1;423:16;;416:27;199:250::o;454:396::-;603:2;592:9;585:21;566:4;635:6;629:13;678:6;673:2;662:9;658:18;651:34;694:79;766:6;761:2;750:9;746:18;741:2;733:6;729:15;694:79;:::i;:::-;834:2;813:15;-1:-1:-1;;809:29:1;794:45;;;;841:2;790:54;;454:396;-1:-1:-1;;454:396:1:o;855:222::-;-1:-1:-1;;;;;1038:32:1;;;;1020:51;;1008:2;993:18;;855:222::o;1082:173::-;1150:20;;-1:-1:-1;;;;;1199:31:1;;1189:42;;1179:70;;1245:1;1242;1235:12;1179:70;1082:173;;;:::o;1260:254::-;1328:6;1336;1389:2;1377:9;1368:7;1364:23;1360:32;1357:52;;;1405:1;1402;1395:12;1357:52;1428:29;1447:9;1428:29;:::i;:::-;1418:39;1504:2;1489:18;;;;1476:32;;-1:-1:-1;;;1260:254:1:o;2122:385::-;2208:6;2216;2224;2232;2285:3;2273:9;2264:7;2260:23;2256:33;2253:53;;;2302:1;2299;2292:12;2253:53;-1:-1:-1;;2325:23:1;;;2395:2;2380:18;;2367:32;;-1:-1:-1;2446:2:1;2431:18;;2418:32;;2497:2;2482:18;2469:32;;-1:-1:-1;2122:385:1;-1:-1:-1;2122:385:1:o;2512:367::-;2575:8;2585:6;2639:3;2632:4;2624:6;2620:17;2616:27;2606:55;;2657:1;2654;2647:12;2606:55;-1:-1:-1;2680:20:1;;2723:18;2712:30;;2709:50;;;2755:1;2752;2745:12;2709:50;2792:4;2784:6;2780:17;2768:29;;2852:3;2845:4;2835:6;2832:1;2828:14;2820:6;2816:27;2812:38;2809:47;2806:67;;;2869:1;2866;2859:12;2806:67;2512:367;;;;;:::o;2884:773::-;3006:6;3014;3022;3030;3083:2;3071:9;3062:7;3058:23;3054:32;3051:52;;;3099:1;3096;3089:12;3051:52;3139:9;3126:23;3168:18;3209:2;3201:6;3198:14;3195:34;;;3225:1;3222;3215:12;3195:34;3264:70;3326:7;3317:6;3306:9;3302:22;3264:70;:::i;:::-;3353:8;;-1:-1:-1;3238:96:1;-1:-1:-1;3441:2:1;3426:18;;3413:32;;-1:-1:-1;3457:16:1;;;3454:36;;;3486:1;3483;3476:12;3454:36;;3525:72;3589:7;3578:8;3567:9;3563:24;3525:72;:::i;:::-;2884:773;;;;-1:-1:-1;3616:8:1;-1:-1:-1;;;;2884:773:1:o;3662:186::-;3721:6;3774:2;3762:9;3753:7;3749:23;3745:32;3742:52;;;3790:1;3787;3780:12;3742:52;3813:29;3832:9;3813:29;:::i;:::-;3803:39;3662:186;-1:-1:-1;;;3662:186:1:o;3853:328::-;3930:6;3938;3946;3999:2;3987:9;3978:7;3974:23;3970:32;3967:52;;;4015:1;4012;4005:12;3967:52;4038:29;4057:9;4038:29;:::i;:::-;4028:39;;4086:38;4120:2;4109:9;4105:18;4086:38;:::i;:::-;4076:48;;4171:2;4160:9;4156:18;4143:32;4133:42;;3853:328;;;;;:::o;4583:260::-;4651:6;4659;4712:2;4700:9;4691:7;4687:23;4683:32;4680:52;;;4728:1;4725;4718:12;4680:52;4751:29;4770:9;4751:29;:::i;:::-;4741:39;;4799:38;4833:2;4822:9;4818:18;4799:38;:::i;:::-;4789:48;;4583:260;;;;;:::o;4848:118::-;4934:5;4927:13;4920:21;4913:5;4910:32;4900:60;;4956:1;4953;4946:12;4971:315;5036:6;5044;5097:2;5085:9;5076:7;5072:23;5068:32;5065:52;;;5113:1;5110;5103:12;5065:52;5136:29;5155:9;5136:29;:::i;:::-;5126:39;;5215:2;5204:9;5200:18;5187:32;5228:28;5250:5;5228:28;:::i;:::-;5275:5;5265:15;;;4971:315;;;;;:::o;5743:356::-;5945:2;5927:21;;;5964:18;;;5957:30;6023:34;6018:2;6003:18;;5996:62;6090:2;6075:18;;5743:356::o;6104:127::-;6165:10;6160:3;6156:20;6153:1;6146:31;6196:4;6193:1;6186:15;6220:4;6217:1;6210:15;6236:422;6325:1;6368:5;6325:1;6382:270;6403:7;6393:8;6390:21;6382:270;;;6462:4;6458:1;6454:6;6450:17;6444:4;6441:27;6438:53;;;6471:18;;:::i;:::-;6521:7;6511:8;6507:22;6504:55;;;6541:16;;;;6504:55;6620:22;;;;6580:15;;;;6382:270;;;6386:3;6236:422;;;;;:::o;6663:806::-;6712:5;6742:8;6732:80;;-1:-1:-1;6783:1:1;6797:5;;6732:80;6831:4;6821:76;;-1:-1:-1;6868:1:1;6882:5;;6821:76;6913:4;6931:1;6926:59;;;;6999:1;6994:130;;;;6906:218;;6926:59;6956:1;6947:10;;6970:5;;;6994:130;7031:3;7021:8;7018:17;7015:43;;;7038:18;;:::i;:::-;-1:-1:-1;;7094:1:1;7080:16;;7109:5;;6906:218;;7208:2;7198:8;7195:16;7189:3;7183:4;7180:13;7176:36;7170:2;7160:8;7157:16;7152:2;7146:4;7143:12;7139:35;7136:77;7133:159;;;-1:-1:-1;7245:19:1;;;7277:5;;7133:159;7324:34;7349:8;7343:4;7324:34;:::i;:::-;7394:6;7390:1;7386:6;7382:19;7373:7;7370:32;7367:58;;;7405:18;;:::i;:::-;7443:20;;6663:806;-1:-1:-1;;;6663:806:1:o;7474:140::-;7532:5;7561:47;7602:4;7592:8;7588:19;7582:4;7561:47;:::i;7619:168::-;7692:9;;;7723;;7740:15;;;7734:22;;7720:37;7710:71;;7761:18;;:::i;7792:217::-;7832:1;7858;7848:132;;7902:10;7897:3;7893:20;7890:1;7883:31;7937:4;7934:1;7927:15;7965:4;7962:1;7955:15;7848:132;-1:-1:-1;7994:9:1;;7792:217::o;8014:330::-;8216:2;8198:21;;;8255:1;8235:18;;;8228:29;-1:-1:-1;;;8288:2:1;8273:18;;8266:37;8335:2;8320:18;;8014:330::o;8349:380::-;8428:1;8424:12;;;;8471;;;8492:61;;8546:4;8538:6;8534:17;8524:27;;8492:61;8599:2;8591:6;8588:14;8568:18;8565:38;8562:161;;8645:10;8640:3;8636:20;8633:1;8626:31;8680:4;8677:1;8670:15;8708:4;8705:1;8698:15;8562:161;;8349:380;;;:::o;8734:125::-;8799:9;;;8820:10;;;8817:36;;;8833:18;;:::i;8864:342::-;9066:2;9048:21;;;9105:2;9085:18;;;9078:30;-1:-1:-1;;;9139:2:1;9124:18;;9117:48;9197:2;9182:18;;8864:342::o;9562:127::-;9623:10;9618:3;9614:20;9611:1;9604:31;9654:4;9651:1;9644:15;9678:4;9675:1;9668:15;9694:135;9733:3;9754:17;;;9751:43;;9774:18;;:::i;:::-;-1:-1:-1;9821:1:1;9810:13;;9694:135::o;9834:336::-;10036:2;10018:21;;;10075:2;10055:18;;;10048:30;-1:-1:-1;;;10109:2:1;10094:18;;10087:42;10161:2;10146:18;;9834:336::o;10530:184::-;10600:6;10653:2;10641:9;10632:7;10628:23;10624:32;10621:52;;;10669:1;10666;10659:12;10621:52;-1:-1:-1;10692:16:1;;10530:184;-1:-1:-1;10530:184:1:o;11065:336::-;11267:2;11249:21;;;11306:2;11286:18;;;11279:30;-1:-1:-1;;;11340:2:1;11325:18;;11318:42;11392:2;11377:18;;11065:336::o;15238:128::-;15305:9;;;15326:11;;;15323:37;;;15340:18;;:::i;18288:245::-;18355:6;18408:2;18396:9;18387:7;18383:23;18379:32;18376:52;;;18424:1;18421;18414:12;18376:52;18456:9;18450:16;18475:28;18497:5;18475:28;:::i;19081:980::-;19343:4;19391:3;19380:9;19376:19;19422:6;19411:9;19404:25;19448:2;19486:6;19481:2;19470:9;19466:18;19459:34;19529:3;19524:2;19513:9;19509:18;19502:31;19553:6;19588;19582:13;19619:6;19611;19604:22;19657:3;19646:9;19642:19;19635:26;;19696:2;19688:6;19684:15;19670:29;;19717:1;19727:195;19741:6;19738:1;19735:13;19727:195;;;19806:13;;-1:-1:-1;;;;;19802:39:1;19790:52;;19897:15;;;;19862:12;;;;19838:1;19756:9;19727:195;;;-1:-1:-1;;;;;;;19978:32:1;;;;19973:2;19958:18;;19951:60;-1:-1:-1;;;20042:3:1;20027:19;20020:35;19939:3;19081:980;-1:-1:-1;;;19081:980:1:o;20831:306::-;20919:6;20927;20935;20988:2;20976:9;20967:7;20963:23;20959:32;20956:52;;;21004:1;21001;20994:12;20956:52;21033:9;21027:16;21017:26;;21083:2;21072:9;21068:18;21062:25;21052:35;;21127:2;21116:9;21112:18;21106:25;21096:35;;20831:306;;;;;:::o;21549:287::-;21678:3;21716:6;21710:13;21732:66;21791:6;21786:3;21779:4;21771:6;21767:17;21732:66;:::i;:::-;21814:16;;;;;21549:287;-1:-1:-1;;21549:287:1:o

Swarm Source

ipfs://38c3c9ce6f190e2275a9a1c1b9d88fb02b93d26549cedc55c899a3f8f6be382d
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.