ETH Price: $3,453.10 (-0.77%)
Gas: 4 Gwei

Token

(0x0AC2255b0AC00e2BE88B8e6d8B5e32fe152C320C)
 

Overview

Max Total Supply

1,000,000,000 ERC-20 TOKEN*

Holders

100 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
crypthony.eth
Balance
1,086,257.649056752219531681 ERC-20 TOKEN*

Value
$0.00
0xacf6aa3fc165b42e5af0b69e769fa4a62ddb8dce
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:
BLACKROCK

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: lib/Auth.sol

abstract contract Auth {
    address internal owner;
    mapping(address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER");
        _;
    }

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

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED");
        _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = owner;
        owner = newOwner;
    }

    event OwnershipTransferred(address owner);
}
// File: lib/IUniswapV2Router02.sol

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
// File: lib/IUniswapV2Pair.sol

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}
// File: lib/IUniswapV2Factory.sol

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}
// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 {}
}

// File: BLACK ROCK.sol


pragma solidity ^0.8.0;








contract BLACKROCK is ERC20, Auth {
   
    uint256 private _taxRate; // Tax rate in basis points (1 basis point = 0.01%)
    uint256 private _sellLimit; // Sell limit for holders
    mapping(address=>bool) public limitExcluded;
    mapping(address => bool) private _taxExcluded; // Addresses excluded from tax
    mapping(address => uint256) private _sellLimits; // Sell limits for individual holders
    mapping(address => bool) private authorizedCallers; // Addresses authorized to make changes

    string tokenName = "BLACK ROCK";
    string tokenSymbol = "BLCK";
    uint256 initialSupply = 1000000000;
    uint256 initialTaxRate = 5;
    uint256 initialSellLimit = 0;

    //ROUTER CONFIG
    IUniswapV2Router02 public Router;
    address public tokenPair;
    address public routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    //TOKEN CONFIG
    bool limitEnabled = false;
    mapping(address=>bool) public isPair;

    event AuthorizedCallerAdded(address caller);
    event AuthorizedCallerRemoved(address caller);

    constructor() ERC20(tokenName, tokenSymbol) Auth(msg.sender) {
        //TOKEN PAIR CREATION
        IUniswapV2Router02 router = IUniswapV2Router02(routerAddress);
        IUniswapV2Factory factory = IUniswapV2Factory(router.factory());
        tokenPair = factory.createPair(router.WETH(), address(this));

        isPair[tokenPair] = true;

        _taxExcluded[msg.sender] = true;
        limitExcluded[msg.sender] = true;

        _mint(msg.sender, initialSupply * 10**uint256(decimals()));
        _taxRate = initialTaxRate;
        _sellLimit = initialSellLimit;
        limitEnabled = true;
    }

    // Get the current tax rate
    function getTaxRate() external view returns (uint256) {
        return _taxRate;
    }

    // Modify the tax rate (only callable by authorized callers)
    function setTaxRate(uint256 newTaxRate) external authorized {
        require(newTaxRate <= 10000, "Tax rate must be <= 100%");
        _taxRate = newTaxRate;
    }

    // Set the global sell limit (only callable by authorized callers)
    function setSellLimit(uint256 newSellLimit) external authorized {
        _sellLimit = newSellLimit;
    }

    // Exclude or include an address from tax (only callable by authorized callers)
    function setTaxExcluded(address account, bool excluded) external authorized {
        _taxExcluded[account] = excluded;
    }

    // Check if an address is excluded from tax
    function isTaxExcluded(address account) external view returns (bool) {
        return _taxExcluded[account];
    }

    // Set an individual sell limit for a holder (only callable by authorized callers)
    function setSellLimitForAddress(address account, uint256 limit)
        external
        authorized
    {
        _sellLimits[account] = limit;
    }

    // Get the sell limit for a holder
    function getSellLimitForAddress(address account)
        external
        view
        returns (uint256)
    {
        return _sellLimits[account];
    }

    function excludeFromSellLimit(address _address, bool _excluded) external authorized {
        limitExcluded[_address] = _excluded;
    }

    function setLimitEnabled(bool _enabled) external authorized {
        limitEnabled = _enabled;
    }

    function setPair(address _pair, bool _status) external authorized {
        isPair[_pair] = _status;
    }

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

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

        if (limitEnabled) {
            if (
                from != ownerr() &&
                to != ownerr() &&
                to != address(0) &&
                to != address(0xdead)
            ) {
               
               if (
                    isPair[to] &&
                    !limitExcluded[from]
                ) {
                    require(
                        amount <= _sellLimit,
                        "Max amount issue"
                    );
                }
            }
        }
       
        bool takeFee = true;

        uint256 taxAmount = 0;

        if (_taxExcluded[from] || _taxExcluded[to]) {
            takeFee = false;
        }

        if (takeFee) {

            if (isPair[to] && _taxRate > 0) {
                taxAmount = (amount * _taxRate) / 100;
            }
            
            else if (isPair[from] && _taxRate > 0) {
               taxAmount = (amount * _taxRate) / 100;
            }

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

            amount -= taxAmount;
        }

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

    function rescueEth() public authorized {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success);
    }

    function rescueToken(address tokenAddress) public authorized {
        IERC20 Token = IERC20(tokenAddress);
        Token.transfer(msg.sender, Token.balanceOf(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"AuthorizedCallerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"AuthorizedCallerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"excludeFromSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getSellLimitForAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTaxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"limitExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setLimitEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"setSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setSellLimitForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTaxRate","type":"uint256"}],"name":"setTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600a81526020017f424c41434b20524f434b00000000000000000000000000000000000000000000815250600d90816200004a919062000a72565b506040518060400160405280600481526020017f424c434b00000000000000000000000000000000000000000000000000000000815250600e908162000091919062000a72565b50633b9aca00600f5560056010556000601155737a250d5630b4cf539739df2c5dacb4c659f2488d601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006014806101000a81548160ff0219169083151502179055503480156200012057600080fd5b5033600d8054620001319062000861565b80601f01602080910402602001604051908101604052809291908181526020018280546200015f9062000861565b8015620001b05780601f106200018457610100808354040283529160200191620001b0565b820191906000526020600020905b8154815290600101906020018083116200019257829003601f168201915b5050505050600e8054620001c49062000861565b80601f0160208091040260200160405190810160405280929190818152602001828054620001f29062000861565b8015620002435780601f10620002175761010080835404028352916020019162000243565b820191906000526020600020905b8154815290600101906020018083116200022557829003601f168201915b5050505050816003908162000259919062000a72565b5080600490816200026b919062000a72565b50505080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000bc3565b90508073ffffffffffffffffffffffffffffffffffffffff1663c9c653968373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000433919062000bc3565b306040518363ffffffff1660e01b81526004016200045392919062000c06565b6020604051808303816000875af115801562000473573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000499919062000bc3565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160156000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200064433620006186200067860201b60201c565b60ff16600a62000629919062000db6565b600f5462000638919062000e07565b6200068160201b60201c565b60105460078190555060115460088190555060016014806101000a81548160ff021916908315150217905550505062000f3e565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ea9062000eb3565b60405180910390fd5b6200070760008383620007ee60201b60201c565b80600260008282546200071b919062000ed5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007ce919062000f21565b60405180910390a3620007ea60008383620007f360201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200087a57607f821691505b60208210810362000890576200088f62000832565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008bb565b620009068683620008bb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009536200094d62000947846200091e565b62000928565b6200091e565b9050919050565b6000819050919050565b6200096f8362000932565b620009876200097e826200095a565b848454620008c8565b825550505050565b600090565b6200099e6200098f565b620009ab81848462000964565b505050565b5b81811015620009d357620009c760008262000994565b600181019050620009b1565b5050565b601f82111562000a2257620009ec8162000896565b620009f784620008ab565b8101602085101562000a07578190505b62000a1f62000a1685620008ab565b830182620009b0565b50505b505050565b600082821c905092915050565b600062000a476000198460080262000a27565b1980831691505092915050565b600062000a62838362000a34565b9150826002028217905092915050565b62000a7d82620007f8565b67ffffffffffffffff81111562000a995762000a9862000803565b5b62000aa5825462000861565b62000ab2828285620009d7565b600060209050601f83116001811462000aea576000841562000ad5578287015190505b62000ae1858262000a54565b86555062000b51565b601f19841662000afa8662000896565b60005b8281101562000b245784890151825560018201915060208501945060208101905062000afd565b8683101562000b44578489015162000b40601f89168262000a34565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b8b8262000b5e565b9050919050565b62000b9d8162000b7e565b811462000ba957600080fd5b50565b60008151905062000bbd8162000b92565b92915050565b60006020828403121562000bdc5762000bdb62000b59565b5b600062000bec8482850162000bac565b91505092915050565b62000c008162000b7e565b82525050565b600060408201905062000c1d600083018562000bf5565b62000c2c602083018462000bf5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cc15780860481111562000c995762000c9862000c33565b5b600185161562000ca95780820291505b808102905062000cb98562000c62565b945062000c79565b94509492505050565b60008262000cdc576001905062000daf565b8162000cec576000905062000daf565b816001811462000d05576002811462000d105762000d46565b600191505062000daf565b60ff84111562000d255762000d2462000c33565b5b8360020a91508482111562000d3f5762000d3e62000c33565b5b5062000daf565b5060208310610133831016604e8410600b841016171562000d805782820a90508381111562000d7a5762000d7962000c33565b5b62000daf565b62000d8f848484600162000c6f565b9250905081840481111562000da95762000da862000c33565b5b81810290505b9392505050565b600062000dc3826200091e565b915062000dd0836200091e565b925062000dff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cca565b905092915050565b600062000e14826200091e565b915062000e21836200091e565b925082820262000e31816200091e565b9150828204841483151762000e4b5762000e4a62000c33565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e9b601f8362000e52565b915062000ea88262000e63565b602082019050919050565b6000602082019050818103600083015262000ece8162000e8c565b9050919050565b600062000ee2826200091e565b915062000eef836200091e565b925082820190508082111562000f0a5762000f0962000c33565b5b92915050565b62000f1b816200091e565b82525050565b600060208201905062000f38600083018462000f10565b92915050565b612c1e8062000f4e6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806395d89b4111610125578063ce31a06b116100ad578063ee16c1601161007c578063ee16c16014610638578063f0b37c0414610656578063f2fde38b14610672578063f6d7eade1461068e578063fe9fbb80146106ac57610211565b8063ce31a06b1461059e578063db4e120c146105a8578063dd62ed3e146105d8578063e5e31b131461060857610211565b8063a9059cbb116100f4578063a9059cbb146104fc578063a9bf2c091461052c578063b6a5d7de14610548578063c6d69a3014610564578063cb66667f1461058057610211565b806395d89b411461047457806399799c42146104925780639da793d0146104b0578063a457c2d7146104cc57610211565b8063369f1332116101a857806369ec8e9c1161017757806369ec8e9c146103be57806370a08231146103ee578063715018a61461041e57806386a22eff146104285780638ee76fef1461044457610211565b8063369f13321461033a57806339509351146103565780634460d3cf146103865780634efa65be146103a257610211565b806323b872dd116101e457806323b872dd1461029e5780632f54bf6e146102ce578063313ce567146102fe5780633268cc561461031c57610211565b806306fdde0314610216578063095ea7b31461023457806318160ddd1461026457806319c2c40d14610282575b600080fd5b61021e6106dc565b60405161022b9190611f71565b60405180910390f35b61024e6004803603810190610249919061202c565b61076e565b60405161025b9190612087565b60405180910390f35b61026c610791565b60405161027991906120b1565b60405180910390f35b61029c600480360381019061029791906120f8565b61079b565b005b6102b860048036038101906102b39190612138565b61083e565b6040516102c59190612087565b60405180910390f35b6102e860048036038101906102e3919061218b565b61086d565b6040516102f59190612087565b60405180910390f35b6103066108c7565b60405161031391906121d4565b60405180910390f35b6103246108d0565b60405161033191906121fe565b60405180910390f35b610354600480360381019061034f91906120f8565b6108f6565b005b610370600480360381019061036b919061202c565b610999565b60405161037d9190612087565b60405180910390f35b6103a0600480360381019061039b919061218b565b6109d0565b005b6103bc60048036038101906103b7919061202c565b610b19565b005b6103d860048036038101906103d3919061218b565b610ba9565b6040516103e59190612087565b60405180910390f35b6104086004803603810190610403919061218b565b610bff565b60405161041591906120b1565b60405180910390f35b610426610c47565b005b610442600480360381019061043d91906120f8565b610c9b565b005b61045e6004803603810190610459919061218b565b610d3e565b60405161046b9190612087565b60405180910390f35b61047c610d5e565b6040516104899190611f71565b60405180910390f35b61049a610df0565b6040516104a791906121fe565b60405180910390f35b6104ca60048036038101906104c59190612219565b610e1a565b005b6104e660048036038101906104e1919061202c565b610e7e565b6040516104f39190612087565b60405180910390f35b6105166004803603810190610511919061202c565b610ef5565b6040516105239190612087565b60405180910390f35b61054660048036038101906105419190612246565b610f18565b005b610562600480360381019061055d919061218b565b610f6a565b005b61057e60048036038101906105799190612246565b61100d565b005b6105886110a4565b60405161059591906120b1565b60405180910390f35b6105a66110ae565b005b6105c260048036038101906105bd919061218b565b61116f565b6040516105cf91906120b1565b60405180910390f35b6105f260048036038101906105ed9190612273565b6111b8565b6040516105ff91906120b1565b60405180910390f35b610622600480360381019061061d919061218b565b61123f565b60405161062f9190612087565b60405180910390f35b61064061125f565b60405161064d91906121fe565b60405180910390f35b610670600480360381019061066b919061218b565b611285565b005b61068c600480360381019061068791906122f1565b611328565b005b610696611443565b6040516106a3919061237d565b60405180910390f35b6106c660048036038101906106c1919061218b565b611469565b6040516106d39190612087565b60405180910390f35b6060600380546106eb906123c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610717906123c7565b80156107645780601f1061073957610100808354040283529160200191610764565b820191906000526020600020905b81548152906001019060200180831161074757829003601f168201915b5050505050905090565b6000806107796114bf565b90506107868185856114c7565b600191505092915050565b6000600254905090565b6107a433611469565b6107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90612444565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806108496114bf565b9050610856858285611690565b61086185858561171c565b60019150509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108ff33611469565b61093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093590612444565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806109a46114bf565b90506109c58185856109b685896111b8565b6109c09190612493565b6114c7565b600191505092915050565b6109d933611469565b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f90612444565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a7391906121fe565b602060405180830381865afa158015610a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab491906124dc565b6040518363ffffffff1660e01b8152600401610ad1929190612509565b6020604051808303816000875af1158015610af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b149190612547565b505050565b610b2233611469565b610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890612444565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c503361086d565b610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906125c0565b60405180910390fd5b610c996000611bf5565b565b610ca433611469565b610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90612444565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b606060048054610d6d906123c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d99906123c7565b8015610de65780601f10610dbb57610100808354040283529160200191610de6565b820191906000526020600020905b815481529060010190602001808311610dc957829003601f168201915b5050505050905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e2333611469565b610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990612444565b60405180910390fd5b806014806101000a81548160ff02191690831515021790555050565b600080610e896114bf565b90506000610e9782866111b8565b905083811015610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390612652565b60405180910390fd5b610ee982868684036114c7565b60019250505092915050565b600080610f006114bf565b9050610f0d81858561171c565b600191505092915050565b610f2133611469565b610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790612444565b60405180910390fd5b8060088190555050565b610f733361086d565b610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa9906125c0565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61101633611469565b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90612444565b60405180910390fd5b61271081111561109a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611091906126be565b60405180910390fd5b8060078190555050565b6000600754905090565b6110b733611469565b6110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90612444565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161111c9061270f565b60006040518083038185875af1925050503d8060008114611159576040519150601f19603f3d011682016040523d82523d6000602084013e61115e565b606091505b505090508061116c57600080fd5b50565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61128e3361086d565b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4906125c0565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6113313361086d565b611370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611367906125c0565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516114389190612745565b60405180910390a150565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d906127d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90612864565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161168391906120b1565b60405180910390a3505050565b600061169c84846111b8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117165781811015611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff906128d0565b60405180910390fd5b61171584848484036114c7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178290612962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f1906129f4565b60405180910390fd5b600081036118135761180e83836000611c61565b611bf0565b60148054906101000a900460ff1615611a045761182e610df0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561189c575061186c610df0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118d55750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561190f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a0357601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119b75750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a0257600854811115611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890612a60565b60405180910390fd5b5b5b5b6000600190506000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611aad5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ab757600091505b8115611be257601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b1857506000600754115b15611b3e57606460075484611b2d9190612a80565b611b379190612af1565b9050611bbc565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b9957506000600754115b15611bbb57606460075484611bae9190612a80565b611bb89190612af1565b90505b5b60006007541115611bd357611bd2853083611c61565b5b8083611bdf9190612b22565b92505b611bed858585611c61565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790612962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906129f4565b60405180910390fd5b611d4a838383611ed7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790612bc8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ebe91906120b1565b60405180910390a3611ed1848484611edc565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f1b578082015181840152602081019050611f00565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f4382611ee1565b611f4d8185611eec565b9350611f5d818560208601611efd565b611f6681611f27565b840191505092915050565b60006020820190508181036000830152611f8b8184611f38565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fc382611f98565b9050919050565b611fd381611fb8565b8114611fde57600080fd5b50565b600081359050611ff081611fca565b92915050565b6000819050919050565b61200981611ff6565b811461201457600080fd5b50565b60008135905061202681612000565b92915050565b6000806040838503121561204357612042611f93565b5b600061205185828601611fe1565b925050602061206285828601612017565b9150509250929050565b60008115159050919050565b6120818161206c565b82525050565b600060208201905061209c6000830184612078565b92915050565b6120ab81611ff6565b82525050565b60006020820190506120c660008301846120a2565b92915050565b6120d58161206c565b81146120e057600080fd5b50565b6000813590506120f2816120cc565b92915050565b6000806040838503121561210f5761210e611f93565b5b600061211d85828601611fe1565b925050602061212e858286016120e3565b9150509250929050565b60008060006060848603121561215157612150611f93565b5b600061215f86828701611fe1565b935050602061217086828701611fe1565b925050604061218186828701612017565b9150509250925092565b6000602082840312156121a1576121a0611f93565b5b60006121af84828501611fe1565b91505092915050565b600060ff82169050919050565b6121ce816121b8565b82525050565b60006020820190506121e960008301846121c5565b92915050565b6121f881611fb8565b82525050565b600060208201905061221360008301846121ef565b92915050565b60006020828403121561222f5761222e611f93565b5b600061223d848285016120e3565b91505092915050565b60006020828403121561225c5761225b611f93565b5b600061226a84828501612017565b91505092915050565b6000806040838503121561228a57612289611f93565b5b600061229885828601611fe1565b92505060206122a985828601611fe1565b9150509250929050565b60006122be82611f98565b9050919050565b6122ce816122b3565b81146122d957600080fd5b50565b6000813590506122eb816122c5565b92915050565b60006020828403121561230757612306611f93565b5b6000612315848285016122dc565b91505092915050565b6000819050919050565b600061234361233e61233984611f98565b61231e565b611f98565b9050919050565b600061235582612328565b9050919050565b60006123678261234a565b9050919050565b6123778161235c565b82525050565b6000602082019050612392600083018461236e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806123df57607f821691505b6020821081036123f2576123f1612398565b5b50919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b600061242e600b83611eec565b9150612439826123f8565b602082019050919050565b6000602082019050818103600083015261245d81612421565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061249e82611ff6565b91506124a983611ff6565b92508282019050808211156124c1576124c0612464565b5b92915050565b6000815190506124d681612000565b92915050565b6000602082840312156124f2576124f1611f93565b5b6000612500848285016124c7565b91505092915050565b600060408201905061251e60008301856121ef565b61252b60208301846120a2565b9392505050565b600081519050612541816120cc565b92915050565b60006020828403121561255d5761255c611f93565b5b600061256b84828501612532565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006125aa600683611eec565b91506125b582612574565b602082019050919050565b600060208201905081810360008301526125d98161259d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061263c602583611eec565b9150612647826125e0565b604082019050919050565b6000602082019050818103600083015261266b8161262f565b9050919050565b7f5461782072617465206d757374206265203c3d20313030250000000000000000600082015250565b60006126a8601883611eec565b91506126b382612672565b602082019050919050565b600060208201905081810360008301526126d78161269b565b9050919050565b600081905092915050565b50565b60006126f96000836126de565b9150612704826126e9565b600082019050919050565b600061271a826126ec565b9150819050919050565b600061272f8261234a565b9050919050565b61273f81612724565b82525050565b600060208201905061275a6000830184612736565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006127bc602483611eec565b91506127c782612760565b604082019050919050565b600060208201905081810360008301526127eb816127af565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061284e602283611eec565b9150612859826127f2565b604082019050919050565b6000602082019050818103600083015261287d81612841565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006128ba601d83611eec565b91506128c582612884565b602082019050919050565b600060208201905081810360008301526128e9816128ad565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061294c602583611eec565b9150612957826128f0565b604082019050919050565b6000602082019050818103600083015261297b8161293f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006129de602383611eec565b91506129e982612982565b604082019050919050565b60006020820190508181036000830152612a0d816129d1565b9050919050565b7f4d617820616d6f756e7420697373756500000000000000000000000000000000600082015250565b6000612a4a601083611eec565b9150612a5582612a14565b602082019050919050565b60006020820190508181036000830152612a7981612a3d565b9050919050565b6000612a8b82611ff6565b9150612a9683611ff6565b9250828202612aa481611ff6565b91508282048414831517612abb57612aba612464565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612afc82611ff6565b9150612b0783611ff6565b925082612b1757612b16612ac2565b5b828204905092915050565b6000612b2d82611ff6565b9150612b3883611ff6565b9250828203905081811115612b5057612b4f612464565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612bb2602683611eec565b9150612bbd82612b56565b604082019050919050565b60006020820190508181036000830152612be181612ba5565b905091905056fea2646970667358221220fe535bf944b5ea943f2f2d9b7ce01d1a46bf67c022839534ff1094c7fd2a5cb664736f6c63430008130033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c806395d89b4111610125578063ce31a06b116100ad578063ee16c1601161007c578063ee16c16014610638578063f0b37c0414610656578063f2fde38b14610672578063f6d7eade1461068e578063fe9fbb80146106ac57610211565b8063ce31a06b1461059e578063db4e120c146105a8578063dd62ed3e146105d8578063e5e31b131461060857610211565b8063a9059cbb116100f4578063a9059cbb146104fc578063a9bf2c091461052c578063b6a5d7de14610548578063c6d69a3014610564578063cb66667f1461058057610211565b806395d89b411461047457806399799c42146104925780639da793d0146104b0578063a457c2d7146104cc57610211565b8063369f1332116101a857806369ec8e9c1161017757806369ec8e9c146103be57806370a08231146103ee578063715018a61461041e57806386a22eff146104285780638ee76fef1461044457610211565b8063369f13321461033a57806339509351146103565780634460d3cf146103865780634efa65be146103a257610211565b806323b872dd116101e457806323b872dd1461029e5780632f54bf6e146102ce578063313ce567146102fe5780633268cc561461031c57610211565b806306fdde0314610216578063095ea7b31461023457806318160ddd1461026457806319c2c40d14610282575b600080fd5b61021e6106dc565b60405161022b9190611f71565b60405180910390f35b61024e6004803603810190610249919061202c565b61076e565b60405161025b9190612087565b60405180910390f35b61026c610791565b60405161027991906120b1565b60405180910390f35b61029c600480360381019061029791906120f8565b61079b565b005b6102b860048036038101906102b39190612138565b61083e565b6040516102c59190612087565b60405180910390f35b6102e860048036038101906102e3919061218b565b61086d565b6040516102f59190612087565b60405180910390f35b6103066108c7565b60405161031391906121d4565b60405180910390f35b6103246108d0565b60405161033191906121fe565b60405180910390f35b610354600480360381019061034f91906120f8565b6108f6565b005b610370600480360381019061036b919061202c565b610999565b60405161037d9190612087565b60405180910390f35b6103a0600480360381019061039b919061218b565b6109d0565b005b6103bc60048036038101906103b7919061202c565b610b19565b005b6103d860048036038101906103d3919061218b565b610ba9565b6040516103e59190612087565b60405180910390f35b6104086004803603810190610403919061218b565b610bff565b60405161041591906120b1565b60405180910390f35b610426610c47565b005b610442600480360381019061043d91906120f8565b610c9b565b005b61045e6004803603810190610459919061218b565b610d3e565b60405161046b9190612087565b60405180910390f35b61047c610d5e565b6040516104899190611f71565b60405180910390f35b61049a610df0565b6040516104a791906121fe565b60405180910390f35b6104ca60048036038101906104c59190612219565b610e1a565b005b6104e660048036038101906104e1919061202c565b610e7e565b6040516104f39190612087565b60405180910390f35b6105166004803603810190610511919061202c565b610ef5565b6040516105239190612087565b60405180910390f35b61054660048036038101906105419190612246565b610f18565b005b610562600480360381019061055d919061218b565b610f6a565b005b61057e60048036038101906105799190612246565b61100d565b005b6105886110a4565b60405161059591906120b1565b60405180910390f35b6105a66110ae565b005b6105c260048036038101906105bd919061218b565b61116f565b6040516105cf91906120b1565b60405180910390f35b6105f260048036038101906105ed9190612273565b6111b8565b6040516105ff91906120b1565b60405180910390f35b610622600480360381019061061d919061218b565b61123f565b60405161062f9190612087565b60405180910390f35b61064061125f565b60405161064d91906121fe565b60405180910390f35b610670600480360381019061066b919061218b565b611285565b005b61068c600480360381019061068791906122f1565b611328565b005b610696611443565b6040516106a3919061237d565b60405180910390f35b6106c660048036038101906106c1919061218b565b611469565b6040516106d39190612087565b60405180910390f35b6060600380546106eb906123c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610717906123c7565b80156107645780601f1061073957610100808354040283529160200191610764565b820191906000526020600020905b81548152906001019060200180831161074757829003601f168201915b5050505050905090565b6000806107796114bf565b90506107868185856114c7565b600191505092915050565b6000600254905090565b6107a433611469565b6107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90612444565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806108496114bf565b9050610856858285611690565b61086185858561171c565b60019150509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108ff33611469565b61093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093590612444565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806109a46114bf565b90506109c58185856109b685896111b8565b6109c09190612493565b6114c7565b600191505092915050565b6109d933611469565b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f90612444565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a7391906121fe565b602060405180830381865afa158015610a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab491906124dc565b6040518363ffffffff1660e01b8152600401610ad1929190612509565b6020604051808303816000875af1158015610af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b149190612547565b505050565b610b2233611469565b610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890612444565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c503361086d565b610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906125c0565b60405180910390fd5b610c996000611bf5565b565b610ca433611469565b610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90612444565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b606060048054610d6d906123c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d99906123c7565b8015610de65780601f10610dbb57610100808354040283529160200191610de6565b820191906000526020600020905b815481529060010190602001808311610dc957829003601f168201915b5050505050905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e2333611469565b610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990612444565b60405180910390fd5b806014806101000a81548160ff02191690831515021790555050565b600080610e896114bf565b90506000610e9782866111b8565b905083811015610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390612652565b60405180910390fd5b610ee982868684036114c7565b60019250505092915050565b600080610f006114bf565b9050610f0d81858561171c565b600191505092915050565b610f2133611469565b610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790612444565b60405180910390fd5b8060088190555050565b610f733361086d565b610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa9906125c0565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61101633611469565b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90612444565b60405180910390fd5b61271081111561109a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611091906126be565b60405180910390fd5b8060078190555050565b6000600754905090565b6110b733611469565b6110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90612444565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161111c9061270f565b60006040518083038185875af1925050503d8060008114611159576040519150601f19603f3d011682016040523d82523d6000602084013e61115e565b606091505b505090508061116c57600080fd5b50565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61128e3361086d565b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4906125c0565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6113313361086d565b611370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611367906125c0565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516114389190612745565b60405180910390a150565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d906127d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90612864565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161168391906120b1565b60405180910390a3505050565b600061169c84846111b8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117165781811015611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff906128d0565b60405180910390fd5b61171584848484036114c7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178290612962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f1906129f4565b60405180910390fd5b600081036118135761180e83836000611c61565b611bf0565b60148054906101000a900460ff1615611a045761182e610df0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561189c575061186c610df0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118d55750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561190f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a0357601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119b75750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a0257600854811115611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890612a60565b60405180910390fd5b5b5b5b6000600190506000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611aad5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ab757600091505b8115611be257601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b1857506000600754115b15611b3e57606460075484611b2d9190612a80565b611b379190612af1565b9050611bbc565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b9957506000600754115b15611bbb57606460075484611bae9190612a80565b611bb89190612af1565b90505b5b60006007541115611bd357611bd2853083611c61565b5b8083611bdf9190612b22565b92505b611bed858585611c61565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790612962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906129f4565b60405180910390fd5b611d4a838383611ed7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790612bc8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ebe91906120b1565b60405180910390a3611ed1848484611edc565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f1b578082015181840152602081019050611f00565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f4382611ee1565b611f4d8185611eec565b9350611f5d818560208601611efd565b611f6681611f27565b840191505092915050565b60006020820190508181036000830152611f8b8184611f38565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fc382611f98565b9050919050565b611fd381611fb8565b8114611fde57600080fd5b50565b600081359050611ff081611fca565b92915050565b6000819050919050565b61200981611ff6565b811461201457600080fd5b50565b60008135905061202681612000565b92915050565b6000806040838503121561204357612042611f93565b5b600061205185828601611fe1565b925050602061206285828601612017565b9150509250929050565b60008115159050919050565b6120818161206c565b82525050565b600060208201905061209c6000830184612078565b92915050565b6120ab81611ff6565b82525050565b60006020820190506120c660008301846120a2565b92915050565b6120d58161206c565b81146120e057600080fd5b50565b6000813590506120f2816120cc565b92915050565b6000806040838503121561210f5761210e611f93565b5b600061211d85828601611fe1565b925050602061212e858286016120e3565b9150509250929050565b60008060006060848603121561215157612150611f93565b5b600061215f86828701611fe1565b935050602061217086828701611fe1565b925050604061218186828701612017565b9150509250925092565b6000602082840312156121a1576121a0611f93565b5b60006121af84828501611fe1565b91505092915050565b600060ff82169050919050565b6121ce816121b8565b82525050565b60006020820190506121e960008301846121c5565b92915050565b6121f881611fb8565b82525050565b600060208201905061221360008301846121ef565b92915050565b60006020828403121561222f5761222e611f93565b5b600061223d848285016120e3565b91505092915050565b60006020828403121561225c5761225b611f93565b5b600061226a84828501612017565b91505092915050565b6000806040838503121561228a57612289611f93565b5b600061229885828601611fe1565b92505060206122a985828601611fe1565b9150509250929050565b60006122be82611f98565b9050919050565b6122ce816122b3565b81146122d957600080fd5b50565b6000813590506122eb816122c5565b92915050565b60006020828403121561230757612306611f93565b5b6000612315848285016122dc565b91505092915050565b6000819050919050565b600061234361233e61233984611f98565b61231e565b611f98565b9050919050565b600061235582612328565b9050919050565b60006123678261234a565b9050919050565b6123778161235c565b82525050565b6000602082019050612392600083018461236e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806123df57607f821691505b6020821081036123f2576123f1612398565b5b50919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b600061242e600b83611eec565b9150612439826123f8565b602082019050919050565b6000602082019050818103600083015261245d81612421565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061249e82611ff6565b91506124a983611ff6565b92508282019050808211156124c1576124c0612464565b5b92915050565b6000815190506124d681612000565b92915050565b6000602082840312156124f2576124f1611f93565b5b6000612500848285016124c7565b91505092915050565b600060408201905061251e60008301856121ef565b61252b60208301846120a2565b9392505050565b600081519050612541816120cc565b92915050565b60006020828403121561255d5761255c611f93565b5b600061256b84828501612532565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006125aa600683611eec565b91506125b582612574565b602082019050919050565b600060208201905081810360008301526125d98161259d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061263c602583611eec565b9150612647826125e0565b604082019050919050565b6000602082019050818103600083015261266b8161262f565b9050919050565b7f5461782072617465206d757374206265203c3d20313030250000000000000000600082015250565b60006126a8601883611eec565b91506126b382612672565b602082019050919050565b600060208201905081810360008301526126d78161269b565b9050919050565b600081905092915050565b50565b60006126f96000836126de565b9150612704826126e9565b600082019050919050565b600061271a826126ec565b9150819050919050565b600061272f8261234a565b9050919050565b61273f81612724565b82525050565b600060208201905061275a6000830184612736565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006127bc602483611eec565b91506127c782612760565b604082019050919050565b600060208201905081810360008301526127eb816127af565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061284e602283611eec565b9150612859826127f2565b604082019050919050565b6000602082019050818103600083015261287d81612841565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006128ba601d83611eec565b91506128c582612884565b602082019050919050565b600060208201905081810360008301526128e9816128ad565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061294c602583611eec565b9150612957826128f0565b604082019050919050565b6000602082019050818103600083015261297b8161293f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006129de602383611eec565b91506129e982612982565b604082019050919050565b60006020820190508181036000830152612a0d816129d1565b9050919050565b7f4d617820616d6f756e7420697373756500000000000000000000000000000000600082015250565b6000612a4a601083611eec565b9150612a5582612a14565b602082019050919050565b60006020820190508181036000830152612a7981612a3d565b9050919050565b6000612a8b82611ff6565b9150612a9683611ff6565b9250828202612aa481611ff6565b91508282048414831517612abb57612aba612464565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612afc82611ff6565b9150612b0783611ff6565b925082612b1757612b16612ac2565b5b828204905092915050565b6000612b2d82611ff6565b9150612b3883611ff6565b9250828203905081811115612b5057612b4f612464565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612bb2602683611eec565b9150612bbd82612b56565b604082019050919050565b60006020820190508181036000830152612be181612ba5565b905091905056fea2646970667358221220fe535bf944b5ea943f2f2d9b7ce01d1a46bf67c022839534ff1094c7fd2a5cb664736f6c63430008130033

Deployed Bytecode Sourcemap

27688:5410:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16625:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18985:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17754:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30026:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19766:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1097:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17596:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28474:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30791:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20436:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32911:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30422:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30210:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17925:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:103;;;:::i;:::-;;31047:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27876:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16844:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;431:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30937:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21177:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18258:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29825:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;770:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29578:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29416:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32750:153;;;:::i;:::-;;30624:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18514:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28608:36;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28443:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;940:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1469:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28404:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1271:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16625:100;16679:13;16712:5;16705:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16625:100;:::o;18985:201::-;19068:4;19085:13;19101:12;:10;:12::i;:::-;19085:28;;19124:32;19133:5;19140:7;19149:6;19124:8;:32::i;:::-;19174:4;19167:11;;;18985:201;;;;:::o;17754:108::-;17815:7;17842:12;;17835:19;;17754:108;:::o;30026:127::-;646:24;659:10;646:12;:24::i;:::-;638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30137:8:::1;30113:12;:21;30126:7;30113:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;30026:127:::0;;:::o;19766:261::-;19863:4;19880:15;19898:12;:10;:12::i;:::-;19880:30;;19921:38;19937:4;19943:7;19952:6;19921:15;:38::i;:::-;19970:27;19980:4;19986:2;19990:6;19970:9;:27::i;:::-;20015:4;20008:11;;;19766:261;;;;;:::o;1097:103::-;1152:4;1187:5;;;;;;;;;;;1176:16;;:7;:16;;;1169:23;;1097:103;;;:::o;17596:93::-;17654:5;17679:2;17672:9;;17596:93;:::o;28474:73::-;;;;;;;;;;;;;:::o;30791:138::-;646:24;659:10;646:12;:24::i;:::-;638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30912:9:::1;30886:13;:23;30900:8;30886:23;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;30791:138:::0;;:::o;20436:238::-;20524:4;20541:13;20557:12;:10;:12::i;:::-;20541:28;;20580:64;20589:5;20596:7;20633:10;20605:25;20615:5;20622:7;20605:9;:25::i;:::-;:38;;;;:::i;:::-;20580:8;:64::i;:::-;20662:4;20655:11;;;20436:238;;;;:::o;32911:184::-;646:24;659:10;646:12;:24::i;:::-;638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;32983:12:::1;33005;32983:35;;33029:5;:14;;;33044:10;33056:5;:15;;;33080:4;33056:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33029:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32972:123;32911:184:::0;:::o;30422:154::-;646:24;659:10;646:12;:24::i;:::-;638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30563:5:::1;30540:11;:20;30552:7;30540:20;;;;;;;;;;;;;;;:28;;;;30422:154:::0;;:::o;30210:116::-;30273:4;30297:12;:21;30310:7;30297:21;;;;;;;;;;;;;;;;;;;;;;;;;30290:28;;30210:116;;;:::o;17925:127::-;17999:7;18026:9;:18;18036:7;18026:18;;;;;;;;;;;;;;;;18019:25;;17925:127;;;:::o;1650:103::-;373:19;381:10;373:7;:19::i;:::-;365:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:30:::1;1742:1;1715:18;:30::i;:::-;1650:103::o:0;31047:108::-;646:24;659:10;646:12;:24::i;:::-;638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;31140:7:::1;31124:6;:13;31131:5;31124:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;31047:108:::0;;:::o;27876:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;16844:104::-;16900:13;16933:7;16926:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16844:104;:::o;431:87::-;478:7;505:5;;;;;;;;;;;498:12;;431:87;:::o;30937:102::-;646:24;659:10;646:12;:24::i;:::-;638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;31023:8:::1;31008:12;::::0;:23:::1;;;;;;;;;;;;;;;;;;30937:102:::0;:::o;21177:436::-;21270:4;21287:13;21303:12;:10;:12::i;:::-;21287:28;;21326:24;21353:25;21363:5;21370:7;21353:9;:25::i;:::-;21326:52;;21417:15;21397:16;:35;;21389:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21510:60;21519:5;21526:7;21554:15;21535:16;:34;21510:8;:60::i;:::-;21601:4;21594:11;;;;21177:436;;;;:::o;18258:193::-;18337:4;18354:13;18370:12;:10;:12::i;:::-;18354:28;;18393;18403:5;18410:2;18414:6;18393:9;:28::i;:::-;18439:4;18432:11;;;18258:193;;;;:::o;29825:108::-;646:24;659:10;646:12;:24::i;:::-;638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29913:12:::1;29900:10;:25;;;;29825:108:::0;:::o;770:94::-;373:19;381:10;373:7;:19::i;:::-;365:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;852:4:::1;830:14;:19;845:3;830:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;770:94:::0;:::o;29578:167::-;646:24;659:10;646:12;:24::i;:::-;638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29671:5:::1;29657:10;:19;;29649:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29727:10;29716:8;:21;;;;29578:167:::0;:::o;29416:88::-;29461:7;29488:8;;29481:15;;29416:88;:::o;32750:153::-;646:24;659:10;646:12;:24::i;:::-;638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;32801:12:::1;32819:10;:15;;32842:21;32819:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32800:68;;;32887:7;32879:16;;;::::0;::::1;;32789:114;32750:153::o:0;30624:159::-;30723:7;30755:11;:20;30767:7;30755:20;;;;;;;;;;;;;;;;30748:27;;30624:159;;;:::o;18514:151::-;18603:7;18630:11;:18;18642:5;18630:18;;;;;;;;;;;;;;;:27;18649:7;18630:27;;;;;;;;;;;;;;;;18623:34;;18514:151;;;;:::o;28608:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;28443:24::-;;;;;;;;;;;;;:::o;940:97::-;373:19;381:10;373:7;:19::i;:::-;365:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1024:5:::1;1002:14;:19;1017:3;1002:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;940:97:::0;:::o;1469:173::-;373:19;381:10;373:7;:19::i;:::-;365:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1553:3:::1;1545:5;;:11;;;;;;;;;;;;;;;;;;1589:4;1567:14;:19;1582:3;1567:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;1609:25;1630:3;1609:25;;;;;;:::i;:::-;;;;;;;;1469:173:::0;:::o;28404:32::-;;;;;;;;;;;;;:::o;1271:107::-;1327:4;1351:14;:19;1366:3;1351:19;;;;;;;;;;;;;;;;;;;;;;;;;1344:26;;1271:107;;;:::o;7990:98::-;8043:7;8070:10;8063:17;;7990:98;:::o;25170:346::-;25289:1;25272:19;;:5;:19;;;25264:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25370:1;25351:21;;:7;:21;;;25343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25454:6;25424:11;:18;25436:5;25424:18;;;;;;;;;;;;;;;:27;25443:7;25424:27;;;;;;;;;;;;;;;:36;;;;25492:7;25476:32;;25485:5;25476:32;;;25501:6;25476:32;;;;;;:::i;:::-;;;;;;;;25170:346;;;:::o;25807:419::-;25908:24;25935:25;25945:5;25952:7;25935:9;:25::i;:::-;25908:52;;25995:17;25975:16;:37;25971:248;;26057:6;26037:16;:26;;26029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26141:51;26150:5;26157:7;26185:6;26166:16;:25;26141:8;:51::i;:::-;25971:248;25897:329;25807:419;;;:::o;31163:1579::-;31306:1;31290:18;;:4;:18;;;31282:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31383:1;31369:16;;:2;:16;;;31361:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31452:1;31442:6;:11;31438:93;;31470:28;31486:4;31492:2;31496:1;31470:15;:28::i;:::-;31513:7;;31438:93;31547:12;;;;;;;;;;31543:528;;;31606:8;:6;:8::i;:::-;31598:16;;:4;:16;;;;:51;;;;;31641:8;:6;:8::i;:::-;31635:14;;:2;:14;;;;31598:51;:88;;;;;31684:1;31670:16;;:2;:16;;;;31598:88;:130;;;;;31721:6;31707:21;;:2;:21;;;;31598:130;31576:484;;;31805:6;:10;31812:2;31805:10;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;31841:13;:19;31855:4;31841:19;;;;;;;;;;;;;;;;;;;;;;;;;31840:20;31805:55;31779:266;;;31947:10;;31937:6;:20;;31903:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;31779:266;31576:484;31543:528;32090:12;32105:4;32090:19;;32122:17;32160:12;:18;32173:4;32160:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;32182:12;:16;32195:2;32182:16;;;;;;;;;;;;;;;;;;;;;;;;;32160:38;32156:86;;;32225:5;32215:15;;32156:86;32258:7;32254:435;;;32288:6;:10;32295:2;32288:10;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;;32313:1;32302:8;;:12;32288:26;32284:242;;;32369:3;32357:8;;32348:6;:17;;;;:::i;:::-;32347:25;;;;:::i;:::-;32335:37;;32284:242;;;32425:6;:12;32432:4;32425:12;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;;32452:1;32441:8;;:12;32425:28;32421:105;;;32507:3;32495:8;;32486:6;:17;;;;:::i;:::-;32485:25;;;;:::i;:::-;32473:37;;32421:105;32284:242;32557:1;32546:8;;:12;32542:100;;;32579:47;32595:4;32609;32616:9;32579:15;:47::i;:::-;32542:100;32668:9;32658:19;;;;;:::i;:::-;;;32254:435;32701:33;32717:4;32723:2;32727:6;32701:15;:33::i;:::-;31276:1466;;31163:1579;;;;:::o;1761:133::-;1835:16;1854:5;;;;;;;;;;;1835:24;;1878:8;1870:5;;:16;;;;;;;;;;;;;;;;;;1824:70;1761:133;:::o;22083:806::-;22196:1;22180:18;;:4;:18;;;22172:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22273:1;22259:16;;:2;:16;;;22251:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22328:38;22349:4;22355:2;22359:6;22328:20;:38::i;:::-;22379:19;22401:9;:15;22411:4;22401:15;;;;;;;;;;;;;;;;22379:37;;22450:6;22435:11;:21;;22427:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22567:6;22553:11;:20;22535:9;:15;22545:4;22535:15;;;;;;;;;;;;;;;:38;;;;22770:6;22753:9;:13;22763:2;22753:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;22820:2;22805:26;;22814:4;22805:26;;;22824:6;22805:26;;;;;;:::i;:::-;;;;;;;;22844:37;22864:4;22870:2;22874:6;22844:19;:37::i;:::-;22161:728;22083:806;;;:::o;26826:91::-;;;;:::o;27521:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:116::-;3868:21;3883:5;3868:21;:::i;:::-;3861:5;3858:32;3848:60;;3904:1;3901;3894:12;3848:60;3798:116;:::o;3920:133::-;3963:5;4001:6;3988:20;3979:29;;4017:30;4041:5;4017:30;:::i;:::-;3920:133;;;;:::o;4059:468::-;4124:6;4132;4181:2;4169:9;4160:7;4156:23;4152:32;4149:119;;;4187:79;;:::i;:::-;4149:119;4307:1;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4278:117;4434:2;4460:50;4502:7;4493:6;4482:9;4478:22;4460:50;:::i;:::-;4450:60;;4405:115;4059:468;;;;;:::o;4533:619::-;4610:6;4618;4626;4675:2;4663:9;4654:7;4650:23;4646:32;4643:119;;;4681:79;;:::i;:::-;4643:119;4801:1;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4772:117;4928:2;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4899:118;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;4533:619;;;;;:::o;5158:329::-;5217:6;5266:2;5254:9;5245:7;5241:23;5237:32;5234:119;;;5272:79;;:::i;:::-;5234:119;5392:1;5417:53;5462:7;5453:6;5442:9;5438:22;5417:53;:::i;:::-;5407:63;;5363:117;5158:329;;;;:::o;5493:86::-;5528:7;5568:4;5561:5;5557:16;5546:27;;5493:86;;;:::o;5585:112::-;5668:22;5684:5;5668:22;:::i;:::-;5663:3;5656:35;5585:112;;:::o;5703:214::-;5792:4;5830:2;5819:9;5815:18;5807:26;;5843:67;5907:1;5896:9;5892:17;5883:6;5843:67;:::i;:::-;5703:214;;;;:::o;5923:118::-;6010:24;6028:5;6010:24;:::i;:::-;6005:3;5998:37;5923:118;;:::o;6047:222::-;6140:4;6178:2;6167:9;6163:18;6155:26;;6191:71;6259:1;6248:9;6244:17;6235:6;6191:71;:::i;:::-;6047:222;;;;:::o;6275:323::-;6331:6;6380:2;6368:9;6359:7;6355:23;6351:32;6348:119;;;6386:79;;:::i;:::-;6348:119;6506:1;6531:50;6573:7;6564:6;6553:9;6549:22;6531:50;:::i;:::-;6521:60;;6477:114;6275:323;;;;:::o;6604:329::-;6663:6;6712:2;6700:9;6691:7;6687:23;6683:32;6680:119;;;6718:79;;:::i;:::-;6680:119;6838:1;6863:53;6908:7;6899:6;6888:9;6884:22;6863:53;:::i;:::-;6853:63;;6809:117;6604:329;;;;:::o;6939:474::-;7007:6;7015;7064:2;7052:9;7043:7;7039:23;7035:32;7032:119;;;7070:79;;:::i;:::-;7032:119;7190:1;7215:53;7260:7;7251:6;7240:9;7236:22;7215:53;:::i;:::-;7205:63;;7161:117;7317:2;7343:53;7388:7;7379:6;7368:9;7364:22;7343:53;:::i;:::-;7333:63;;7288:118;6939:474;;;;;:::o;7419:104::-;7464:7;7493:24;7511:5;7493:24;:::i;:::-;7482:35;;7419:104;;;:::o;7529:138::-;7610:32;7636:5;7610:32;:::i;:::-;7603:5;7600:43;7590:71;;7657:1;7654;7647:12;7590:71;7529:138;:::o;7673:155::-;7727:5;7765:6;7752:20;7743:29;;7781:41;7816:5;7781:41;:::i;:::-;7673:155;;;;:::o;7834:345::-;7901:6;7950:2;7938:9;7929:7;7925:23;7921:32;7918:119;;;7956:79;;:::i;:::-;7918:119;8076:1;8101:61;8154:7;8145:6;8134:9;8130:22;8101:61;:::i;:::-;8091:71;;8047:125;7834:345;;;;:::o;8185:60::-;8213:3;8234:5;8227:12;;8185:60;;;:::o;8251:142::-;8301:9;8334:53;8352:34;8361:24;8379:5;8361:24;:::i;:::-;8352:34;:::i;:::-;8334:53;:::i;:::-;8321:66;;8251:142;;;:::o;8399:126::-;8449:9;8482:37;8513:5;8482:37;:::i;:::-;8469:50;;8399:126;;;:::o;8531:152::-;8607:9;8640:37;8671:5;8640:37;:::i;:::-;8627:50;;8531:152;;;:::o;8689:183::-;8802:63;8859:5;8802:63;:::i;:::-;8797:3;8790:76;8689:183;;:::o;8878:274::-;8997:4;9035:2;9024:9;9020:18;9012:26;;9048:97;9142:1;9131:9;9127:17;9118:6;9048:97;:::i;:::-;8878:274;;;;:::o;9158:180::-;9206:77;9203:1;9196:88;9303:4;9300:1;9293:15;9327:4;9324:1;9317:15;9344:320;9388:6;9425:1;9419:4;9415:12;9405:22;;9472:1;9466:4;9462:12;9493:18;9483:81;;9549:4;9541:6;9537:17;9527:27;;9483:81;9611:2;9603:6;9600:14;9580:18;9577:38;9574:84;;9630:18;;:::i;:::-;9574:84;9395:269;9344:320;;;:::o;9670:161::-;9810:13;9806:1;9798:6;9794:14;9787:37;9670:161;:::o;9837:366::-;9979:3;10000:67;10064:2;10059:3;10000:67;:::i;:::-;9993:74;;10076:93;10165:3;10076:93;:::i;:::-;10194:2;10189:3;10185:12;10178:19;;9837:366;;;:::o;10209:419::-;10375:4;10413:2;10402:9;10398:18;10390:26;;10462:9;10456:4;10452:20;10448:1;10437:9;10433:17;10426:47;10490:131;10616:4;10490:131;:::i;:::-;10482:139;;10209:419;;;:::o;10634:180::-;10682:77;10679:1;10672:88;10779:4;10776:1;10769:15;10803:4;10800:1;10793:15;10820:191;10860:3;10879:20;10897:1;10879:20;:::i;:::-;10874:25;;10913:20;10931:1;10913:20;:::i;:::-;10908:25;;10956:1;10953;10949:9;10942:16;;10977:3;10974:1;10971:10;10968:36;;;10984:18;;:::i;:::-;10968:36;10820:191;;;;:::o;11017:143::-;11074:5;11105:6;11099:13;11090:22;;11121:33;11148:5;11121:33;:::i;:::-;11017:143;;;;:::o;11166:351::-;11236:6;11285:2;11273:9;11264:7;11260:23;11256:32;11253:119;;;11291:79;;:::i;:::-;11253:119;11411:1;11436:64;11492:7;11483:6;11472:9;11468:22;11436:64;:::i;:::-;11426:74;;11382:128;11166:351;;;;:::o;11523:332::-;11644:4;11682:2;11671:9;11667:18;11659:26;;11695:71;11763:1;11752:9;11748:17;11739:6;11695:71;:::i;:::-;11776:72;11844:2;11833:9;11829:18;11820:6;11776:72;:::i;:::-;11523:332;;;;;:::o;11861:137::-;11915:5;11946:6;11940:13;11931:22;;11962:30;11986:5;11962:30;:::i;:::-;11861:137;;;;:::o;12004:345::-;12071:6;12120:2;12108:9;12099:7;12095:23;12091:32;12088:119;;;12126:79;;:::i;:::-;12088:119;12246:1;12271:61;12324:7;12315:6;12304:9;12300:22;12271:61;:::i;:::-;12261:71;;12217:125;12004:345;;;;:::o;12355:156::-;12495:8;12491:1;12483:6;12479:14;12472:32;12355:156;:::o;12517:365::-;12659:3;12680:66;12744:1;12739:3;12680:66;:::i;:::-;12673:73;;12755:93;12844:3;12755:93;:::i;:::-;12873:2;12868:3;12864:12;12857:19;;12517:365;;;:::o;12888:419::-;13054:4;13092:2;13081:9;13077:18;13069:26;;13141:9;13135:4;13131:20;13127:1;13116:9;13112:17;13105:47;13169:131;13295:4;13169:131;:::i;:::-;13161:139;;12888:419;;;:::o;13313:224::-;13453:34;13449:1;13441:6;13437:14;13430:58;13522:7;13517:2;13509:6;13505:15;13498:32;13313:224;:::o;13543:366::-;13685:3;13706:67;13770:2;13765:3;13706:67;:::i;:::-;13699:74;;13782:93;13871:3;13782:93;:::i;:::-;13900:2;13895:3;13891:12;13884:19;;13543:366;;;:::o;13915:419::-;14081:4;14119:2;14108:9;14104:18;14096:26;;14168:9;14162:4;14158:20;14154:1;14143:9;14139:17;14132:47;14196:131;14322:4;14196:131;:::i;:::-;14188:139;;13915:419;;;:::o;14340:174::-;14480:26;14476:1;14468:6;14464:14;14457:50;14340:174;:::o;14520:366::-;14662:3;14683:67;14747:2;14742:3;14683:67;:::i;:::-;14676:74;;14759:93;14848:3;14759:93;:::i;:::-;14877:2;14872:3;14868:12;14861:19;;14520:366;;;:::o;14892:419::-;15058:4;15096:2;15085:9;15081:18;15073:26;;15145:9;15139:4;15135:20;15131:1;15120:9;15116:17;15109:47;15173:131;15299:4;15173:131;:::i;:::-;15165:139;;14892:419;;;:::o;15317:147::-;15418:11;15455:3;15440:18;;15317:147;;;;:::o;15470:114::-;;:::o;15590:398::-;15749:3;15770:83;15851:1;15846:3;15770:83;:::i;:::-;15763:90;;15862:93;15951:3;15862:93;:::i;:::-;15980:1;15975:3;15971:11;15964:18;;15590:398;;;:::o;15994:379::-;16178:3;16200:147;16343:3;16200:147;:::i;:::-;16193:154;;16364:3;16357:10;;15994:379;;;:::o;16379:134::-;16437:9;16470:37;16501:5;16470:37;:::i;:::-;16457:50;;16379:134;;;:::o;16519:147::-;16614:45;16653:5;16614:45;:::i;:::-;16609:3;16602:58;16519:147;;:::o;16672:238::-;16773:4;16811:2;16800:9;16796:18;16788:26;;16824:79;16900:1;16889:9;16885:17;16876:6;16824:79;:::i;:::-;16672:238;;;;:::o;16916:223::-;17056:34;17052:1;17044:6;17040:14;17033:58;17125:6;17120:2;17112:6;17108:15;17101:31;16916:223;:::o;17145:366::-;17287:3;17308:67;17372:2;17367:3;17308:67;:::i;:::-;17301:74;;17384:93;17473:3;17384:93;:::i;:::-;17502:2;17497:3;17493:12;17486:19;;17145:366;;;:::o;17517:419::-;17683:4;17721:2;17710:9;17706:18;17698:26;;17770:9;17764:4;17760:20;17756:1;17745:9;17741:17;17734:47;17798:131;17924:4;17798:131;:::i;:::-;17790:139;;17517:419;;;:::o;17942:221::-;18082:34;18078:1;18070:6;18066:14;18059:58;18151:4;18146:2;18138:6;18134:15;18127:29;17942:221;:::o;18169:366::-;18311:3;18332:67;18396:2;18391:3;18332:67;:::i;:::-;18325:74;;18408:93;18497:3;18408:93;:::i;:::-;18526:2;18521:3;18517:12;18510:19;;18169:366;;;:::o;18541:419::-;18707:4;18745:2;18734:9;18730:18;18722:26;;18794:9;18788:4;18784:20;18780:1;18769:9;18765:17;18758:47;18822:131;18948:4;18822:131;:::i;:::-;18814:139;;18541:419;;;:::o;18966:179::-;19106:31;19102:1;19094:6;19090:14;19083:55;18966:179;:::o;19151:366::-;19293:3;19314:67;19378:2;19373:3;19314:67;:::i;:::-;19307:74;;19390:93;19479:3;19390:93;:::i;:::-;19508:2;19503:3;19499:12;19492:19;;19151:366;;;:::o;19523:419::-;19689:4;19727:2;19716:9;19712:18;19704:26;;19776:9;19770:4;19766:20;19762:1;19751:9;19747:17;19740:47;19804:131;19930:4;19804:131;:::i;:::-;19796:139;;19523:419;;;:::o;19948:224::-;20088:34;20084:1;20076:6;20072:14;20065:58;20157:7;20152:2;20144:6;20140:15;20133:32;19948:224;:::o;20178:366::-;20320:3;20341:67;20405:2;20400:3;20341:67;:::i;:::-;20334:74;;20417:93;20506:3;20417:93;:::i;:::-;20535:2;20530:3;20526:12;20519:19;;20178:366;;;:::o;20550:419::-;20716:4;20754:2;20743:9;20739:18;20731:26;;20803:9;20797:4;20793:20;20789:1;20778:9;20774:17;20767:47;20831:131;20957:4;20831:131;:::i;:::-;20823:139;;20550:419;;;:::o;20975:222::-;21115:34;21111:1;21103:6;21099:14;21092:58;21184:5;21179:2;21171:6;21167:15;21160:30;20975:222;:::o;21203:366::-;21345:3;21366:67;21430:2;21425:3;21366:67;:::i;:::-;21359:74;;21442:93;21531:3;21442:93;:::i;:::-;21560:2;21555:3;21551:12;21544:19;;21203:366;;;:::o;21575:419::-;21741:4;21779:2;21768:9;21764:18;21756:26;;21828:9;21822:4;21818:20;21814:1;21803:9;21799:17;21792:47;21856:131;21982:4;21856:131;:::i;:::-;21848:139;;21575:419;;;:::o;22000:166::-;22140:18;22136:1;22128:6;22124:14;22117:42;22000:166;:::o;22172:366::-;22314:3;22335:67;22399:2;22394:3;22335:67;:::i;:::-;22328:74;;22411:93;22500:3;22411:93;:::i;:::-;22529:2;22524:3;22520:12;22513:19;;22172:366;;;:::o;22544:419::-;22710:4;22748:2;22737:9;22733:18;22725:26;;22797:9;22791:4;22787:20;22783:1;22772:9;22768:17;22761:47;22825:131;22951:4;22825:131;:::i;:::-;22817:139;;22544:419;;;:::o;22969:410::-;23009:7;23032:20;23050:1;23032:20;:::i;:::-;23027:25;;23066:20;23084:1;23066:20;:::i;:::-;23061:25;;23121:1;23118;23114:9;23143:30;23161:11;23143:30;:::i;:::-;23132:41;;23322:1;23313:7;23309:15;23306:1;23303:22;23283:1;23276:9;23256:83;23233:139;;23352:18;;:::i;:::-;23233:139;23017:362;22969:410;;;;:::o;23385:180::-;23433:77;23430:1;23423:88;23530:4;23527:1;23520:15;23554:4;23551:1;23544:15;23571:185;23611:1;23628:20;23646:1;23628:20;:::i;:::-;23623:25;;23662:20;23680:1;23662:20;:::i;:::-;23657:25;;23701:1;23691:35;;23706:18;;:::i;:::-;23691:35;23748:1;23745;23741:9;23736:14;;23571:185;;;;:::o;23762:194::-;23802:4;23822:20;23840:1;23822:20;:::i;:::-;23817:25;;23856:20;23874:1;23856:20;:::i;:::-;23851:25;;23900:1;23897;23893:9;23885:17;;23924:1;23918:4;23915:11;23912:37;;;23929:18;;:::i;:::-;23912:37;23762:194;;;;:::o;23962:225::-;24102:34;24098:1;24090:6;24086:14;24079:58;24171:8;24166:2;24158:6;24154:15;24147:33;23962:225;:::o;24193:366::-;24335:3;24356:67;24420:2;24415:3;24356:67;:::i;:::-;24349:74;;24432:93;24521:3;24432:93;:::i;:::-;24550:2;24545:3;24541:12;24534:19;;24193:366;;;:::o;24565:419::-;24731:4;24769:2;24758:9;24754:18;24746:26;;24818:9;24812:4;24808:20;24804:1;24793:9;24789:17;24782:47;24846:131;24972:4;24846:131;:::i;:::-;24838:139;;24565:419;;;:::o

Swarm Source

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