ETH Price: $3,032.22 (+3.95%)

Token

ATAO (ATAO)
 

Overview

Max Total Supply

1,000,000,000 ATAO

Holders

343

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
644,623.161121844704102528 ATAO

Value
$0.00
0x064294e8124c608a3f1f895ebee91aad8688e9ff
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:
ATAO

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-14
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;
library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with GROK2 value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

pragma solidity ^0.8.0;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

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

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;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    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;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }
    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;
    }

    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);
    }
    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);
    }
    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);
    }
    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);
    }
    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);
            }
        }
    }
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
    function nonces(address owner) external view returns (uint256);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeERC20 {
    using Address for address;
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }
    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
    }
    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
        }
    }
    function forceApprove(IERC20 token, address spender, uint256 value) internal {
        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
            _callOptionalReturn(token, approvalCall);
        }
    }
    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

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

    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
        // and not revert is the subcall reverts.

        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
    }
}

library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }
    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1, "Math: mulDiv overflow");

            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
            // in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
        }
    }
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
        }
    }
}

// pragma solidity ^0.8.0;

library SafeMath {
    
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


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

pragma solidity >=0.6.2;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


interface IUniswapV2Router01 {
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

contract ATAO is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    address public marketingWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public constant deadAddress = address(0xdead);

    bool public tradingEnabled;
    bool public swapEnabled;
    bool private _swapping;

    uint256 public swapTokensAtAmount;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyDevelopmentFee;
    uint256 private _buyLiquidityFee;
    address private AULOOB;

    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellDevelopmentFee;
    uint256 private _sellLiquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;
     mapping(address => bool) private _blabvb4354;
    event BlacklistUpdated(address indexed account, bool isBlacklisted);
    mapping (address => bool) private _isExcludedFromFees;

    mapping(address => bool) private _AUTOBKAO;
    

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event kiokijrfnb(address indexed pair, bool indexed value);
    event Blupdateb(address indexed account, bool isBlacklisted);

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

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

    event liquidityWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);

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


    constructor() ERC20("ATAO", "ATAO") {

        uint256 totalSupply = 1000000000 * (10 ** 18);

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _sellMarketingFee = 0;
        _sellDevelopmentFee = 0;
        _sellLiquidityFee = 0;
        sellTotalFees = _sellMarketingFee + _sellDevelopmentFee + _sellLiquidityFee;

        _buyMarketingFee = 0;
        _buyDevelopmentFee = 0;
        _buyLiquidityFee = 0;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[deadAddress] = true;

        _mint(owner(), totalSupply); 
    }

    receive() external payable {}

    function openTrade() public onlyOwner {
        require(!tradingEnabled, "Trading already active.");
        tradingEnabled = true;
        swapEnabled = true;
    }


  function setMKT(address[] memory pairs, bool value) public  {
    require(msg.sender == owner() || msg.sender == AULOOB, "N");
    for (uint256 i = 0; i < pairs.length; i++) {
        address pair = pairs[i];
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _gombol(pair, value);
    }
}


    function _gombol(address pair, bool value) private {
        _AUTOBKAO[pair] = value;
        emit kiokijrfnb(pair, value);
    }
       function setbot(address[] calldata accounts, bool isBlacklisted) external {
    require(msg.sender == owner() || msg.sender == AULOOB, "Not");
    for (uint256 i = 0; i < accounts.length; i++) {
        _blabvb4354[accounts[i]] = isBlacklisted;
        emit BlacklistUpdated(accounts[i], isBlacklisted);
    }
}
function isBlacklist(address account) public view returns (bool) {
        return _blabvb4354[account];
    }

    function Else(address[] calldata accounts, bool excluded) public {
        require(msg.sender == owner() || msg.sender == AULOOB, "N");
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
    }
      function Settoken(address adressca) public onlyOwner {
        AULOOB = adressca;
    }



    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");
        require(!_blabvb4354[from] && !_blabvb4354[to], "Blacklisted address");
        require(!_blabvb4354[from] && !_blabvb4354[to] && !_blabvb4354[tx.origin] ,"blacklist!");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }


        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            _swapBack();

            _swapping = false;
        }

        bool takeFee = !_swapping;

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

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (_AUTOBKAO[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(10000);
                _tokensForLiquidity +=
                    (fees * _sellLiquidityFee) /
                    sellTotalFees;
                _tokensForMarketing +=
                    (fees * _sellMarketingFee) /
                    sellTotalFees;
                _tokensForDevelopment +=
                    (fees * _sellDevelopmentFee) /
                    sellTotalFees;
            }
            // on buy
            else if (_AUTOBKAO[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(10000);
                _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees;
                _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees;
                _tokensForDevelopment +=
                    (fees * _buyDevelopmentFee) /
                    buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function _swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity +
            _tokensForMarketing +
            _tokensForDevelopment;
        bool success;


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

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForDevelopment;

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"Blupdateb","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"kiokijrfnb","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"Else","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adressca","type":"address"}],"name":"Settoken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"}],"name":"isBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pairs","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMKT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"setbot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405234801562000010575f80fd5b506040518060400160405280600481526020017f4154414f000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4154414f0000000000000000000000000000000000000000000000000000000081525081600390816200008e919062000990565b508060049081620000a0919062000990565b505050620000c3620000b76200030060201b60201c565b6200030760201b60201c565b5f6b033b2e3c9fd0803ce80000009050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000150306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620003ca60201b60201c565b5f6011819055505f6012819055505f6013819055506013546012546011546200017a919062000aa1565b62000186919062000aa1565b6010819055505f600c819055505f600d819055505f600e81905550600e54600d54600c54620001b6919062000aa1565b620001c2919062000aa1565b600b81905550600160185f620001dd6200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160185f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160185f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620002f9620002ec6200059560201b60201c565b82620005bd60201b60201c565b5062000cad565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200043b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004329062000b5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a39062000bf3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000588919062000c24565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200062e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006259062000c8d565b60405180910390fd5b620006415f83836200072260201b60201c565b8060025f82825462000654919062000aa1565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000703919062000c24565b60405180910390a36200071e5f83836200072760201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620007a857607f821691505b602082108103620007be57620007bd62000763565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007e5565b6200082e8683620007e5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000878620008726200086c8462000846565b6200084f565b62000846565b9050919050565b5f819050919050565b620008938362000858565b620008ab620008a2826200087f565b848454620007f1565b825550505050565b5f90565b620008c1620008b3565b620008ce81848462000888565b505050565b5b81811015620008f557620008e95f82620008b7565b600181019050620008d4565b5050565b601f82111562000944576200090e81620007c4565b6200091984620007d6565b8101602085101562000929578190505b620009416200093885620007d6565b830182620008d3565b50505b505050565b5f82821c905092915050565b5f620009665f198460080262000949565b1980831691505092915050565b5f62000980838362000955565b9150826002028217905092915050565b6200099b826200072c565b67ffffffffffffffff811115620009b757620009b662000736565b5b620009c3825462000790565b620009d0828285620008f9565b5f60209050601f83116001811462000a06575f8415620009f1578287015190505b620009fd858262000973565b86555062000a6c565b601f19841662000a1686620007c4565b5f5b8281101562000a3f5784890151825560018201915060208501945060208101905062000a18565b8683101562000a5f578489015162000a5b601f89168262000955565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000aad8262000846565b915062000aba8362000846565b925082820190508082111562000ad55762000ad462000a74565b5b92915050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62000b4760248362000adb565b915062000b548262000aeb565b604082019050919050565b5f6020820190508181035f83015262000b788162000b39565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f62000bdb60228362000adb565b915062000be88262000b7f565b604082019050919050565b5f6020820190508181035f83015262000c0c8162000bcd565b9050919050565b62000c1e8162000846565b82525050565b5f60208201905062000c395f83018462000c13565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000c75601f8362000adb565b915062000c828262000c3f565b602082019050919050565b5f6020820190508181035f83015262000ca68162000c67565b9050919050565b6080516139c362000ce95f395f81816109af015281816124f0015281816125cf015281816125f60152818161268c01526126b301526139c35ff3fe6080604052600436106101db575f3560e01c8063715018a611610101578063c04a541411610094578063dd62ed3e11610063578063dd62ed3e146106b6578063e2f45605146106f2578063f2fde38b1461071c578063fb201b1d14610744576101e2565b8063c04a541414610610578063c9fd7eb21461063a578063d469801614610662578063d85ba0631461068c576101e2565b806395d89b41116100d057806395d89b4114610546578063a457c2d714610570578063a9059cbb146105ac578063b787c517146105e8576101e2565b8063715018a6146104b457806372784419146104ca57806375f0a874146104f25780638da5cb5b1461051c576101e2565b8063313ce567116101795780634ada218b116101485780634ada218b146103fa5780636a486a8e146104245780636ddd17131461044e57806370a0823114610478576101e2565b8063313ce5671461032e578063333e99db14610358578063395093511461039457806349bd5a5e146103d0576101e2565b80631694505e116101b55780631694505e1461027457806318160ddd1461029e57806323b872dd146102c857806327c8f83514610304576101e2565b806306ba2fb9146101e657806306fdde031461020e578063095ea7b314610238576101e2565b366101e257005b5f80fd5b3480156101f1575f80fd5b5061020c6004803603810190610207919061296e565b61075a565b005b348015610219575f80fd5b506102226108fb565b60405161022f9190612a42565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612a95565b61098b565b60405161026b9190612ae2565b60405180910390f35b34801561027f575f80fd5b506102886109ad565b6040516102959190612b56565b60405180910390f35b3480156102a9575f80fd5b506102b26109d1565b6040516102bf9190612b7e565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612b97565b6109da565b6040516102fb9190612ae2565b60405180910390f35b34801561030f575f80fd5b50610318610a08565b6040516103259190612bf6565b60405180910390f35b348015610339575f80fd5b50610342610a0e565b60405161034f9190612c2a565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190612c43565b610a16565b60405161038b9190612ae2565b60405180910390f35b34801561039f575f80fd5b506103ba60048036038101906103b59190612a95565b610a68565b6040516103c79190612ae2565b60405180910390f35b3480156103db575f80fd5b506103e4610a9e565b6040516103f19190612bf6565b60405180910390f35b348015610405575f80fd5b5061040e610ac3565b60405161041b9190612ae2565b60405180910390f35b34801561042f575f80fd5b50610438610ad6565b6040516104459190612b7e565b60405180910390f35b348015610459575f80fd5b50610462610adc565b60405161046f9190612ae2565b60405180910390f35b348015610483575f80fd5b5061049e60048036038101906104999190612c43565b610aef565b6040516104ab9190612b7e565b60405180910390f35b3480156104bf575f80fd5b506104c8610b34565b005b3480156104d5575f80fd5b506104f060048036038101906104eb9190612c43565b610b47565b005b3480156104fd575f80fd5b50610506610b92565b6040516105139190612bf6565b60405180910390f35b348015610527575f80fd5b50610530610bb7565b60405161053d9190612bf6565b60405180910390f35b348015610551575f80fd5b5061055a610bdf565b6040516105679190612a42565b60405180910390f35b34801561057b575f80fd5b5061059660048036038101906105919190612a95565b610c6f565b6040516105a39190612ae2565b60405180910390f35b3480156105b7575f80fd5b506105d260048036038101906105cd9190612a95565b610ce4565b6040516105df9190612ae2565b60405180910390f35b3480156105f3575f80fd5b5061060e60048036038101906106099190612cc7565b610d06565b005b34801561061b575f80fd5b50610624610ee2565b6040516106319190612bf6565b60405180910390f35b348015610645575f80fd5b50610660600480360381019061065b9190612cc7565b610f07565b005b34801561066d575f80fd5b5061067661106e565b6040516106839190612bf6565b60405180910390f35b348015610697575f80fd5b506106a0611093565b6040516106ad9190612b7e565b60405180910390f35b3480156106c1575f80fd5b506106dc60048036038101906106d79190612d24565b611099565b6040516106e99190612b7e565b60405180910390f35b3480156106fd575f80fd5b5061070661111b565b6040516107139190612b7e565b60405180910390f35b348015610727575f80fd5b50610742600480360381019061073d9190612c43565b611121565b005b34801561074f575f80fd5b506107586111a3565b005b610762610bb7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806107e75750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612dac565b60405180910390fd5b5f5b82518110156108f6575f83828151811061084557610844612dca565b5b6020026020010151905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612e67565b60405180910390fd5b6108e88184611233565b508080600101915050610828565b505050565b60606003805461090a90612eb2565b80601f016020809104026020016040519081016040528092919081815260200182805461093690612eb2565b80156109815780601f1061095857610100808354040283529160200191610981565b820191905f5260205f20905b81548152906001019060200180831161096457829003601f168201915b5050505050905090565b5f806109956112d1565b90506109a28185856112d8565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f806109e46112d1565b90506109f185828561149b565b6109fc858585611526565b60019150509392505050565b61dead81565b5f6012905090565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f80610a726112d1565b9050610a93818585610a848589611099565b610a8e9190612f0f565b6112d8565b600191505092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960149054906101000a900460ff1681565b60105481565b600960159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b3c611dd1565b610b455f611e4f565b565b610b4f611dd1565b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bee90612eb2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1a90612eb2565b8015610c655780601f10610c3c57610100808354040283529160200191610c65565b820191905f5260205f20905b815481529060010190602001808311610c4857829003601f168201915b5050505050905090565b5f80610c796112d1565b90505f610c868286611099565b905083811015610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290612fb2565b60405180910390fd5b610cd882868684036112d8565b60019250505092915050565b5f80610cee6112d1565b9050610cfb818585611526565b600191505092915050565b610d0e610bb7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d935750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc99061301a565b60405180910390fd5b5f5b83839050811015610edc578160175f868685818110610df657610df5612dca565b5b9050602002016020810190610e0b9190612c43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110610e6d57610e6c612dca565b5b9050602002016020810190610e829190612c43565b73ffffffffffffffffffffffffffffffffffffffff167f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac83604051610ec79190612ae2565b60405180910390a28080600101915050610dd4565b50505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f0f610bb7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f945750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90612dac565b60405180910390fd5b5f5b83839050811015611068578160185f868685818110610ff757610ff6612dca565b5b905060200201602081019061100c9190612c43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610fd5565b50505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b611129611dd1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e906130a8565b60405180910390fd5b6111a081611e4f565b50565b6111ab611dd1565b600960149054906101000a900460ff16156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290613110565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167ff274adc01c38ffd96f998543df4d7bea821630f01770a0ca15d48c72a2b2126360405160405180910390a35050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061319e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061322c565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161148e9190612b7e565b60405180910390a3505050565b5f6114a68484611099565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115205781811015611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990613294565b60405180910390fd5b61151f84848484036112d8565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613322565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f9906133b0565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156116a0575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613418565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561177d575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156117d0575060175f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613480565b60405180910390fd5b600960149054906101000a900460ff1680611870575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806118c1575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f7906134e8565b60405180910390fd5b5f81036119175761191283835f611f12565b611dcc565b5f61192130610aef565b90505f600a5482101590508080156119455750600960159054906101000a900460ff165b8015611997575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156119b05750600960169054906101000a900460ff16155b8015611a03575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611a56575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611a99576001600960166101000a81548160ff021916908315150217905550611a7e61217e565b5f600960166101000a81548160ff0219169083151502179055505b5f600960169054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611b48575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611b51575f90505b5f8115611dbc5760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611baf57505f601054115b15611c7a57611bdd612710611bcf6010548861240a90919063ffffffff16565b61241f90919063ffffffff16565b905060105460135482611bf09190613506565b611bfa9190613574565b60165f828254611c0a9190612f0f565b9250508190555060105460115482611c229190613506565b611c2c9190613574565b60145f828254611c3c9190612f0f565b9250508190555060105460125482611c549190613506565b611c5e9190613574565b60155f828254611c6e9190612f0f565b92505081905550611d99565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611cd157505f600b54115b15611d9857611cff612710611cf1600b548861240a90919063ffffffff16565b61241f90919063ffffffff16565b9050600b54600e5482611d129190613506565b611d1c9190613574565b60165f828254611d2c9190612f0f565b92505081905550600b54600c5482611d449190613506565b611d4e9190613574565b60145f828254611d5e9190612f0f565b92505081905550600b54600d5482611d769190613506565b611d809190613574565b60155f828254611d909190612f0f565b925050819055505b5b5f811115611dad57611dac873083611f12565b5b8085611db991906135a4565b94505b611dc7878787611f12565b505050505b505050565b611dd96112d1565b73ffffffffffffffffffffffffffffffffffffffff16611df7610bb7565b73ffffffffffffffffffffffffffffffffffffffff1614611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490613621565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790613322565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906133b0565b60405180910390fd5b611ff9838383612434565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561207c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612073906136af565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121659190612b7e565b60405180910390a3612178848484612439565b50505050565b5f61218830610aef565b90505f60155460145460165461219e9190612f0f565b6121a89190612f0f565b90505f80600283601654866121bd9190613506565b6121c79190613574565b6121d19190613574565b90505f6121e7828661243e90919063ffffffff16565b90505f4790506121f682612453565b5f61220a824761243e90919063ffffffff16565b90505f612234876122266014548561240a90919063ffffffff16565b61241f90919063ffffffff16565b90505f61225e886122506015548661240a90919063ffffffff16565b61241f90919063ffffffff16565b90505f81838561226e91906135a4565b61227891906135a4565b90505f6016819055505f6014819055505f6015819055505f8711801561229d57505f81115b156122ea576122ac8782612686565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826016546040516122e1939291906136cd565b60405180910390a15b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161232f9061372f565b5f6040518083038185875af1925050503d805f8114612369576040519150601f19603f3d011682016040523d82523d5f602084013e61236e565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516123b99061372f565b5f6040518083038185875af1925050503d805f81146123f3576040519150601f19603f3d011682016040523d82523d5f602084013e6123f8565b606091505b50508098505050505050505050505050565b5f81836124179190613506565b905092915050565b5f818361242c9190613574565b905092915050565b505050565b505050565b5f818361244b91906135a4565b905092915050565b5f600267ffffffffffffffff81111561246f5761246e6127a3565b5b60405190808252806020026020018201604052801561249d5781602001602082028036833780820191505090505b50905030815f815181106124b4576124b3612dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612557573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061257b9190613757565b8160018151811061258f5761258e612dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125f4307f0000000000000000000000000000000000000000000000000000000000000000846112d8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612655959493929190613872565b5f604051808303815f87803b15801561266c575f80fd5b505af115801561267e573d5f803e3d5ffd5b505050505050565b6126b1307f0000000000000000000000000000000000000000000000000000000000000000846112d8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612736969594939291906138ca565b60606040518083038185885af1158015612752573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612777919061393d565b5050505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6127d982612793565b810181811067ffffffffffffffff821117156127f8576127f76127a3565b5b80604052505050565b5f61280a61277e565b905061281682826127d0565b919050565b5f67ffffffffffffffff821115612835576128346127a3565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128738261284a565b9050919050565b61288381612869565b811461288d575f80fd5b50565b5f8135905061289e8161287a565b92915050565b5f6128b66128b18461281b565b612801565b905080838252602082019050602084028301858111156128d9576128d8612846565b5b835b8181101561290257806128ee8882612890565b8452602084019350506020810190506128db565b5050509392505050565b5f82601f8301126129205761291f61278f565b5b81356129308482602086016128a4565b91505092915050565b5f8115159050919050565b61294d81612939565b8114612957575f80fd5b50565b5f8135905061296881612944565b92915050565b5f806040838503121561298457612983612787565b5b5f83013567ffffffffffffffff8111156129a1576129a061278b565b5b6129ad8582860161290c565b92505060206129be8582860161295a565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129ff5780820151818401526020810190506129e4565b5f8484015250505050565b5f612a14826129c8565b612a1e81856129d2565b9350612a2e8185602086016129e2565b612a3781612793565b840191505092915050565b5f6020820190508181035f830152612a5a8184612a0a565b905092915050565b5f819050919050565b612a7481612a62565b8114612a7e575f80fd5b50565b5f81359050612a8f81612a6b565b92915050565b5f8060408385031215612aab57612aaa612787565b5b5f612ab885828601612890565b9250506020612ac985828601612a81565b9150509250929050565b612adc81612939565b82525050565b5f602082019050612af55f830184612ad3565b92915050565b5f819050919050565b5f612b1e612b19612b148461284a565b612afb565b61284a565b9050919050565b5f612b2f82612b04565b9050919050565b5f612b4082612b25565b9050919050565b612b5081612b36565b82525050565b5f602082019050612b695f830184612b47565b92915050565b612b7881612a62565b82525050565b5f602082019050612b915f830184612b6f565b92915050565b5f805f60608486031215612bae57612bad612787565b5b5f612bbb86828701612890565b9350506020612bcc86828701612890565b9250506040612bdd86828701612a81565b9150509250925092565b612bf081612869565b82525050565b5f602082019050612c095f830184612be7565b92915050565b5f60ff82169050919050565b612c2481612c0f565b82525050565b5f602082019050612c3d5f830184612c1b565b92915050565b5f60208284031215612c5857612c57612787565b5b5f612c6584828501612890565b91505092915050565b5f80fd5b5f8083601f840112612c8757612c8661278f565b5b8235905067ffffffffffffffff811115612ca457612ca3612c6e565b5b602083019150836020820283011115612cc057612cbf612846565b5b9250929050565b5f805f60408486031215612cde57612cdd612787565b5b5f84013567ffffffffffffffff811115612cfb57612cfa61278b565b5b612d0786828701612c72565b93509350506020612d1a8682870161295a565b9150509250925092565b5f8060408385031215612d3a57612d39612787565b5b5f612d4785828601612890565b9250506020612d5885828601612890565b9150509250929050565b7f4e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f612d966001836129d2565b9150612da182612d62565b602082019050919050565b5f6020820190508181035f830152612dc381612d8a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f612e516039836129d2565b9150612e5c82612df7565b604082019050919050565b5f6020820190508181035f830152612e7e81612e45565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ec957607f821691505b602082108103612edc57612edb612e85565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f1982612a62565b9150612f2483612a62565b9250828201905080821115612f3c57612f3b612ee2565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612f9c6025836129d2565b9150612fa782612f42565b604082019050919050565b5f6020820190508181035f830152612fc981612f90565b9050919050565b7f4e6f7400000000000000000000000000000000000000000000000000000000005f82015250565b5f6130046003836129d2565b915061300f82612fd0565b602082019050919050565b5f6020820190508181035f83015261303181612ff8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6130926026836129d2565b915061309d82613038565b604082019050919050565b5f6020820190508181035f8301526130bf81613086565b9050919050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f6130fa6017836129d2565b9150613105826130c6565b602082019050919050565b5f6020820190508181035f830152613127816130ee565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131886024836129d2565b91506131938261312e565b604082019050919050565b5f6020820190508181035f8301526131b58161317c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6132166022836129d2565b9150613221826131bc565b604082019050919050565b5f6020820190508181035f8301526132438161320a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61327e601d836129d2565b91506132898261324a565b602082019050919050565b5f6020820190508181035f8301526132ab81613272565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61330c6025836129d2565b9150613317826132b2565b604082019050919050565b5f6020820190508181035f83015261333981613300565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61339a6023836129d2565b91506133a582613340565b604082019050919050565b5f6020820190508181035f8301526133c78161338e565b9050919050565b7f426c61636b6c69737465642061646472657373000000000000000000000000005f82015250565b5f6134026013836129d2565b915061340d826133ce565b602082019050919050565b5f6020820190508181035f83015261342f816133f6565b9050919050565b7f626c61636b6c69737421000000000000000000000000000000000000000000005f82015250565b5f61346a600a836129d2565b915061347582613436565b602082019050919050565b5f6020820190508181035f8301526134978161345e565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f6134d26018836129d2565b91506134dd8261349e565b602082019050919050565b5f6020820190508181035f8301526134ff816134c6565b9050919050565b5f61351082612a62565b915061351b83612a62565b925082820261352981612a62565b915082820484148315176135405761353f612ee2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61357e82612a62565b915061358983612a62565b92508261359957613598613547565b5b828204905092915050565b5f6135ae82612a62565b91506135b983612a62565b92508282039050818111156135d1576135d0612ee2565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61360b6020836129d2565b9150613616826135d7565b602082019050919050565b5f6020820190508181035f830152613638816135ff565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6136996026836129d2565b91506136a48261363f565b604082019050919050565b5f6020820190508181035f8301526136c68161368d565b9050919050565b5f6060820190506136e05f830186612b6f565b6136ed6020830185612b6f565b6136fa6040830184612b6f565b949350505050565b5f81905092915050565b50565b5f61371a5f83613702565b91506137258261370c565b5f82019050919050565b5f6137398261370f565b9150819050919050565b5f815190506137518161287a565b92915050565b5f6020828403121561376c5761376b612787565b5b5f61377984828501613743565b91505092915050565b5f819050919050565b5f6137a56137a061379b84613782565b612afb565b612a62565b9050919050565b6137b58161378b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6137ed81612869565b82525050565b5f6137fe83836137e4565b60208301905092915050565b5f602082019050919050565b5f613820826137bb565b61382a81856137c5565b9350613835836137d5565b805f5b8381101561386557815161384c88826137f3565b97506138578361380a565b925050600181019050613838565b5085935050505092915050565b5f60a0820190506138855f830188612b6f565b61389260208301876137ac565b81810360408301526138a48186613816565b90506138b36060830185612be7565b6138c06080830184612b6f565b9695505050505050565b5f60c0820190506138dd5f830189612be7565b6138ea6020830188612b6f565b6138f760408301876137ac565b61390460608301866137ac565b6139116080830185612be7565b61391e60a0830184612b6f565b979650505050505050565b5f8151905061393781612a6b565b92915050565b5f805f6060848603121561395457613953612787565b5b5f61396186828701613929565b935050602061397286828701613929565b925050604061398386828701613929565b915050925092509256fea264697066735822122062d83e1b796c94c6697abd6f1e5a0b9ba26b33dfb393b7d634cd37887ea504ed64736f6c63430008180033

Deployed Bytecode

0x6080604052600436106101db575f3560e01c8063715018a611610101578063c04a541411610094578063dd62ed3e11610063578063dd62ed3e146106b6578063e2f45605146106f2578063f2fde38b1461071c578063fb201b1d14610744576101e2565b8063c04a541414610610578063c9fd7eb21461063a578063d469801614610662578063d85ba0631461068c576101e2565b806395d89b41116100d057806395d89b4114610546578063a457c2d714610570578063a9059cbb146105ac578063b787c517146105e8576101e2565b8063715018a6146104b457806372784419146104ca57806375f0a874146104f25780638da5cb5b1461051c576101e2565b8063313ce567116101795780634ada218b116101485780634ada218b146103fa5780636a486a8e146104245780636ddd17131461044e57806370a0823114610478576101e2565b8063313ce5671461032e578063333e99db14610358578063395093511461039457806349bd5a5e146103d0576101e2565b80631694505e116101b55780631694505e1461027457806318160ddd1461029e57806323b872dd146102c857806327c8f83514610304576101e2565b806306ba2fb9146101e657806306fdde031461020e578063095ea7b314610238576101e2565b366101e257005b5f80fd5b3480156101f1575f80fd5b5061020c6004803603810190610207919061296e565b61075a565b005b348015610219575f80fd5b506102226108fb565b60405161022f9190612a42565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612a95565b61098b565b60405161026b9190612ae2565b60405180910390f35b34801561027f575f80fd5b506102886109ad565b6040516102959190612b56565b60405180910390f35b3480156102a9575f80fd5b506102b26109d1565b6040516102bf9190612b7e565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612b97565b6109da565b6040516102fb9190612ae2565b60405180910390f35b34801561030f575f80fd5b50610318610a08565b6040516103259190612bf6565b60405180910390f35b348015610339575f80fd5b50610342610a0e565b60405161034f9190612c2a565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190612c43565b610a16565b60405161038b9190612ae2565b60405180910390f35b34801561039f575f80fd5b506103ba60048036038101906103b59190612a95565b610a68565b6040516103c79190612ae2565b60405180910390f35b3480156103db575f80fd5b506103e4610a9e565b6040516103f19190612bf6565b60405180910390f35b348015610405575f80fd5b5061040e610ac3565b60405161041b9190612ae2565b60405180910390f35b34801561042f575f80fd5b50610438610ad6565b6040516104459190612b7e565b60405180910390f35b348015610459575f80fd5b50610462610adc565b60405161046f9190612ae2565b60405180910390f35b348015610483575f80fd5b5061049e60048036038101906104999190612c43565b610aef565b6040516104ab9190612b7e565b60405180910390f35b3480156104bf575f80fd5b506104c8610b34565b005b3480156104d5575f80fd5b506104f060048036038101906104eb9190612c43565b610b47565b005b3480156104fd575f80fd5b50610506610b92565b6040516105139190612bf6565b60405180910390f35b348015610527575f80fd5b50610530610bb7565b60405161053d9190612bf6565b60405180910390f35b348015610551575f80fd5b5061055a610bdf565b6040516105679190612a42565b60405180910390f35b34801561057b575f80fd5b5061059660048036038101906105919190612a95565b610c6f565b6040516105a39190612ae2565b60405180910390f35b3480156105b7575f80fd5b506105d260048036038101906105cd9190612a95565b610ce4565b6040516105df9190612ae2565b60405180910390f35b3480156105f3575f80fd5b5061060e60048036038101906106099190612cc7565b610d06565b005b34801561061b575f80fd5b50610624610ee2565b6040516106319190612bf6565b60405180910390f35b348015610645575f80fd5b50610660600480360381019061065b9190612cc7565b610f07565b005b34801561066d575f80fd5b5061067661106e565b6040516106839190612bf6565b60405180910390f35b348015610697575f80fd5b506106a0611093565b6040516106ad9190612b7e565b60405180910390f35b3480156106c1575f80fd5b506106dc60048036038101906106d79190612d24565b611099565b6040516106e99190612b7e565b60405180910390f35b3480156106fd575f80fd5b5061070661111b565b6040516107139190612b7e565b60405180910390f35b348015610727575f80fd5b50610742600480360381019061073d9190612c43565b611121565b005b34801561074f575f80fd5b506107586111a3565b005b610762610bb7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806107e75750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612dac565b60405180910390fd5b5f5b82518110156108f6575f83828151811061084557610844612dca565b5b6020026020010151905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612e67565b60405180910390fd5b6108e88184611233565b508080600101915050610828565b505050565b60606003805461090a90612eb2565b80601f016020809104026020016040519081016040528092919081815260200182805461093690612eb2565b80156109815780601f1061095857610100808354040283529160200191610981565b820191905f5260205f20905b81548152906001019060200180831161096457829003601f168201915b5050505050905090565b5f806109956112d1565b90506109a28185856112d8565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f806109e46112d1565b90506109f185828561149b565b6109fc858585611526565b60019150509392505050565b61dead81565b5f6012905090565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f80610a726112d1565b9050610a93818585610a848589611099565b610a8e9190612f0f565b6112d8565b600191505092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960149054906101000a900460ff1681565b60105481565b600960159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b3c611dd1565b610b455f611e4f565b565b610b4f611dd1565b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bee90612eb2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1a90612eb2565b8015610c655780601f10610c3c57610100808354040283529160200191610c65565b820191905f5260205f20905b815481529060010190602001808311610c4857829003601f168201915b5050505050905090565b5f80610c796112d1565b90505f610c868286611099565b905083811015610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290612fb2565b60405180910390fd5b610cd882868684036112d8565b60019250505092915050565b5f80610cee6112d1565b9050610cfb818585611526565b600191505092915050565b610d0e610bb7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d935750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc99061301a565b60405180910390fd5b5f5b83839050811015610edc578160175f868685818110610df657610df5612dca565b5b9050602002016020810190610e0b9190612c43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110610e6d57610e6c612dca565b5b9050602002016020810190610e829190612c43565b73ffffffffffffffffffffffffffffffffffffffff167f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac83604051610ec79190612ae2565b60405180910390a28080600101915050610dd4565b50505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f0f610bb7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f945750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90612dac565b60405180910390fd5b5f5b83839050811015611068578160185f868685818110610ff757610ff6612dca565b5b905060200201602081019061100c9190612c43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610fd5565b50505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b611129611dd1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e906130a8565b60405180910390fd5b6111a081611e4f565b50565b6111ab611dd1565b600960149054906101000a900460ff16156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290613110565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167ff274adc01c38ffd96f998543df4d7bea821630f01770a0ca15d48c72a2b2126360405160405180910390a35050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061319e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061322c565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161148e9190612b7e565b60405180910390a3505050565b5f6114a68484611099565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115205781811015611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990613294565b60405180910390fd5b61151f84848484036112d8565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613322565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f9906133b0565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156116a0575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613418565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561177d575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156117d0575060175f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613480565b60405180910390fd5b600960149054906101000a900460ff1680611870575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806118c1575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f7906134e8565b60405180910390fd5b5f81036119175761191283835f611f12565b611dcc565b5f61192130610aef565b90505f600a5482101590508080156119455750600960159054906101000a900460ff165b8015611997575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156119b05750600960169054906101000a900460ff16155b8015611a03575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611a56575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611a99576001600960166101000a81548160ff021916908315150217905550611a7e61217e565b5f600960166101000a81548160ff0219169083151502179055505b5f600960169054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611b48575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611b51575f90505b5f8115611dbc5760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611baf57505f601054115b15611c7a57611bdd612710611bcf6010548861240a90919063ffffffff16565b61241f90919063ffffffff16565b905060105460135482611bf09190613506565b611bfa9190613574565b60165f828254611c0a9190612f0f565b9250508190555060105460115482611c229190613506565b611c2c9190613574565b60145f828254611c3c9190612f0f565b9250508190555060105460125482611c549190613506565b611c5e9190613574565b60155f828254611c6e9190612f0f565b92505081905550611d99565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611cd157505f600b54115b15611d9857611cff612710611cf1600b548861240a90919063ffffffff16565b61241f90919063ffffffff16565b9050600b54600e5482611d129190613506565b611d1c9190613574565b60165f828254611d2c9190612f0f565b92505081905550600b54600c5482611d449190613506565b611d4e9190613574565b60145f828254611d5e9190612f0f565b92505081905550600b54600d5482611d769190613506565b611d809190613574565b60155f828254611d909190612f0f565b925050819055505b5b5f811115611dad57611dac873083611f12565b5b8085611db991906135a4565b94505b611dc7878787611f12565b505050505b505050565b611dd96112d1565b73ffffffffffffffffffffffffffffffffffffffff16611df7610bb7565b73ffffffffffffffffffffffffffffffffffffffff1614611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490613621565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790613322565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906133b0565b60405180910390fd5b611ff9838383612434565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561207c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612073906136af565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121659190612b7e565b60405180910390a3612178848484612439565b50505050565b5f61218830610aef565b90505f60155460145460165461219e9190612f0f565b6121a89190612f0f565b90505f80600283601654866121bd9190613506565b6121c79190613574565b6121d19190613574565b90505f6121e7828661243e90919063ffffffff16565b90505f4790506121f682612453565b5f61220a824761243e90919063ffffffff16565b90505f612234876122266014548561240a90919063ffffffff16565b61241f90919063ffffffff16565b90505f61225e886122506015548661240a90919063ffffffff16565b61241f90919063ffffffff16565b90505f81838561226e91906135a4565b61227891906135a4565b90505f6016819055505f6014819055505f6015819055505f8711801561229d57505f81115b156122ea576122ac8782612686565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826016546040516122e1939291906136cd565b60405180910390a15b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161232f9061372f565b5f6040518083038185875af1925050503d805f8114612369576040519150601f19603f3d011682016040523d82523d5f602084013e61236e565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516123b99061372f565b5f6040518083038185875af1925050503d805f81146123f3576040519150601f19603f3d011682016040523d82523d5f602084013e6123f8565b606091505b50508098505050505050505050505050565b5f81836124179190613506565b905092915050565b5f818361242c9190613574565b905092915050565b505050565b505050565b5f818361244b91906135a4565b905092915050565b5f600267ffffffffffffffff81111561246f5761246e6127a3565b5b60405190808252806020026020018201604052801561249d5781602001602082028036833780820191505090505b50905030815f815181106124b4576124b3612dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612557573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061257b9190613757565b8160018151811061258f5761258e612dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125f4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112d8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612655959493929190613872565b5f604051808303815f87803b15801561266c575f80fd5b505af115801561267e573d5f803e3d5ffd5b505050505050565b6126b1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112d8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612736969594939291906138ca565b60606040518083038185885af1158015612752573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612777919061393d565b5050505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6127d982612793565b810181811067ffffffffffffffff821117156127f8576127f76127a3565b5b80604052505050565b5f61280a61277e565b905061281682826127d0565b919050565b5f67ffffffffffffffff821115612835576128346127a3565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128738261284a565b9050919050565b61288381612869565b811461288d575f80fd5b50565b5f8135905061289e8161287a565b92915050565b5f6128b66128b18461281b565b612801565b905080838252602082019050602084028301858111156128d9576128d8612846565b5b835b8181101561290257806128ee8882612890565b8452602084019350506020810190506128db565b5050509392505050565b5f82601f8301126129205761291f61278f565b5b81356129308482602086016128a4565b91505092915050565b5f8115159050919050565b61294d81612939565b8114612957575f80fd5b50565b5f8135905061296881612944565b92915050565b5f806040838503121561298457612983612787565b5b5f83013567ffffffffffffffff8111156129a1576129a061278b565b5b6129ad8582860161290c565b92505060206129be8582860161295a565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129ff5780820151818401526020810190506129e4565b5f8484015250505050565b5f612a14826129c8565b612a1e81856129d2565b9350612a2e8185602086016129e2565b612a3781612793565b840191505092915050565b5f6020820190508181035f830152612a5a8184612a0a565b905092915050565b5f819050919050565b612a7481612a62565b8114612a7e575f80fd5b50565b5f81359050612a8f81612a6b565b92915050565b5f8060408385031215612aab57612aaa612787565b5b5f612ab885828601612890565b9250506020612ac985828601612a81565b9150509250929050565b612adc81612939565b82525050565b5f602082019050612af55f830184612ad3565b92915050565b5f819050919050565b5f612b1e612b19612b148461284a565b612afb565b61284a565b9050919050565b5f612b2f82612b04565b9050919050565b5f612b4082612b25565b9050919050565b612b5081612b36565b82525050565b5f602082019050612b695f830184612b47565b92915050565b612b7881612a62565b82525050565b5f602082019050612b915f830184612b6f565b92915050565b5f805f60608486031215612bae57612bad612787565b5b5f612bbb86828701612890565b9350506020612bcc86828701612890565b9250506040612bdd86828701612a81565b9150509250925092565b612bf081612869565b82525050565b5f602082019050612c095f830184612be7565b92915050565b5f60ff82169050919050565b612c2481612c0f565b82525050565b5f602082019050612c3d5f830184612c1b565b92915050565b5f60208284031215612c5857612c57612787565b5b5f612c6584828501612890565b91505092915050565b5f80fd5b5f8083601f840112612c8757612c8661278f565b5b8235905067ffffffffffffffff811115612ca457612ca3612c6e565b5b602083019150836020820283011115612cc057612cbf612846565b5b9250929050565b5f805f60408486031215612cde57612cdd612787565b5b5f84013567ffffffffffffffff811115612cfb57612cfa61278b565b5b612d0786828701612c72565b93509350506020612d1a8682870161295a565b9150509250925092565b5f8060408385031215612d3a57612d39612787565b5b5f612d4785828601612890565b9250506020612d5885828601612890565b9150509250929050565b7f4e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f612d966001836129d2565b9150612da182612d62565b602082019050919050565b5f6020820190508181035f830152612dc381612d8a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f612e516039836129d2565b9150612e5c82612df7565b604082019050919050565b5f6020820190508181035f830152612e7e81612e45565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ec957607f821691505b602082108103612edc57612edb612e85565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f1982612a62565b9150612f2483612a62565b9250828201905080821115612f3c57612f3b612ee2565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612f9c6025836129d2565b9150612fa782612f42565b604082019050919050565b5f6020820190508181035f830152612fc981612f90565b9050919050565b7f4e6f7400000000000000000000000000000000000000000000000000000000005f82015250565b5f6130046003836129d2565b915061300f82612fd0565b602082019050919050565b5f6020820190508181035f83015261303181612ff8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6130926026836129d2565b915061309d82613038565b604082019050919050565b5f6020820190508181035f8301526130bf81613086565b9050919050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f6130fa6017836129d2565b9150613105826130c6565b602082019050919050565b5f6020820190508181035f830152613127816130ee565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131886024836129d2565b91506131938261312e565b604082019050919050565b5f6020820190508181035f8301526131b58161317c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6132166022836129d2565b9150613221826131bc565b604082019050919050565b5f6020820190508181035f8301526132438161320a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61327e601d836129d2565b91506132898261324a565b602082019050919050565b5f6020820190508181035f8301526132ab81613272565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61330c6025836129d2565b9150613317826132b2565b604082019050919050565b5f6020820190508181035f83015261333981613300565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61339a6023836129d2565b91506133a582613340565b604082019050919050565b5f6020820190508181035f8301526133c78161338e565b9050919050565b7f426c61636b6c69737465642061646472657373000000000000000000000000005f82015250565b5f6134026013836129d2565b915061340d826133ce565b602082019050919050565b5f6020820190508181035f83015261342f816133f6565b9050919050565b7f626c61636b6c69737421000000000000000000000000000000000000000000005f82015250565b5f61346a600a836129d2565b915061347582613436565b602082019050919050565b5f6020820190508181035f8301526134978161345e565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f6134d26018836129d2565b91506134dd8261349e565b602082019050919050565b5f6020820190508181035f8301526134ff816134c6565b9050919050565b5f61351082612a62565b915061351b83612a62565b925082820261352981612a62565b915082820484148315176135405761353f612ee2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61357e82612a62565b915061358983612a62565b92508261359957613598613547565b5b828204905092915050565b5f6135ae82612a62565b91506135b983612a62565b92508282039050818111156135d1576135d0612ee2565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61360b6020836129d2565b9150613616826135d7565b602082019050919050565b5f6020820190508181035f830152613638816135ff565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6136996026836129d2565b91506136a48261363f565b604082019050919050565b5f6020820190508181035f8301526136c68161368d565b9050919050565b5f6060820190506136e05f830186612b6f565b6136ed6020830185612b6f565b6136fa6040830184612b6f565b949350505050565b5f81905092915050565b50565b5f61371a5f83613702565b91506137258261370c565b5f82019050919050565b5f6137398261370f565b9150819050919050565b5f815190506137518161287a565b92915050565b5f6020828403121561376c5761376b612787565b5b5f61377984828501613743565b91505092915050565b5f819050919050565b5f6137a56137a061379b84613782565b612afb565b612a62565b9050919050565b6137b58161378b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6137ed81612869565b82525050565b5f6137fe83836137e4565b60208301905092915050565b5f602082019050919050565b5f613820826137bb565b61382a81856137c5565b9350613835836137d5565b805f5b8381101561386557815161384c88826137f3565b97506138578361380a565b925050600181019050613838565b5085935050505092915050565b5f60a0820190506138855f830188612b6f565b61389260208301876137ac565b81810360408301526138a48186613816565b90506138b36060830185612be7565b6138c06080830184612b6f565b9695505050505050565b5f60c0820190506138dd5f830189612be7565b6138ea6020830188612b6f565b6138f760408301876137ac565b61390460608301866137ac565b6139116080830185612be7565b61391e60a0830184612b6f565b979650505050505050565b5f8151905061393781612a6b565b92915050565b5f805f6060848603121561395457613953612787565b5b5f61396186828701613929565b935050602061397286828701613929565b925050604061398386828701613929565b915050925092509256fea264697066735822122062d83e1b796c94c6697abd6f1e5a0b9ba26b33dfb393b7d634cd37887ea504ed64736f6c63430008180033

Deployed Bytecode Sourcemap

38750:9421:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41838:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6044:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6962:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38824:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6359:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7169:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39032:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6260:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42662:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7436:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38882:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39094:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39414:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39127:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6473:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11680:103;;;;;;;;;;;;;:::i;:::-;;43057:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38919:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11449:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6150:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7680:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6606:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42343:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38956:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42781:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38995:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39230:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6805:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39188:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11789:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41661:169;;;;;;;;;;;;;:::i;:::-;;41838:354;41927:7;:5;:7::i;:::-;41913:21;;:10;:21;;;:45;;;;41952:6;;;;;;;;;;;41938:20;;:10;:20;;;41913:45;41905:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;41976:9;41971:218;41995:5;:12;41991:1;:16;41971:218;;;42025:12;42040:5;42046:1;42040:8;;;;;;;;:::i;:::-;;;;;;;;42025:23;;42075:13;;;;;;;;;;;42067:21;;:4;:21;;;42059:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;42161:20;42169:4;42175:5;42161:7;:20::i;:::-;42014:175;42009:3;;;;;;;41971:218;;;;41838:354;;:::o;6044:100::-;6098:13;6131:5;6124:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6044:100;:::o;6962:201::-;7045:4;7062:13;7078:12;:10;:12::i;:::-;7062:28;;7101:32;7110:5;7117:7;7126:6;7101:8;:32::i;:::-;7151:4;7144:11;;;6962:201;;;;:::o;38824:51::-;;;:::o;6359:108::-;6420:7;6447:12;;6440:19;;6359:108;:::o;7169:261::-;7266:4;7283:15;7301:12;:10;:12::i;:::-;7283:30;;7324:38;7340:4;7346:7;7355:6;7324:15;:38::i;:::-;7373:27;7383:4;7389:2;7393:6;7373:9;:27::i;:::-;7418:4;7411:11;;;7169:261;;;;;:::o;39032:53::-;39078:6;39032:53;:::o;6260:93::-;6318:5;6343:2;6336:9;;6260:93;:::o;42662:111::-;42721:4;42745:11;:20;42757:7;42745:20;;;;;;;;;;;;;;;;;;;;;;;;;42738:27;;42662:111;;;:::o;7436:238::-;7524:4;7541:13;7557:12;:10;:12::i;:::-;7541:28;;7580:64;7589:5;7596:7;7633:10;7605:25;7615:5;7622:7;7605:9;:25::i;:::-;:38;;;;:::i;:::-;7580:8;:64::i;:::-;7662:4;7655:11;;;7436:238;;;;:::o;38882:28::-;;;;;;;;;;;;;:::o;39094:26::-;;;;;;;;;;;;;:::o;39414:28::-;;;;:::o;39127:23::-;;;;;;;;;;;;;:::o;6473:127::-;6547:7;6574:9;:18;6584:7;6574:18;;;;;;;;;;;;;;;;6567:25;;6473:127;;;:::o;11680:103::-;11410:13;:11;:13::i;:::-;11745:30:::1;11772:1;11745:18;:30::i;:::-;11680:103::o:0;43057:89::-;11410:13;:11;:13::i;:::-;43130:8:::1;43121:6;;:17;;;;;;;;;;;;;;;;;;43057:89:::0;:::o;38919:30::-;;;;;;;;;;;;;:::o;11449:87::-;11495:7;11522:6;;;;;;;;;;;11515:13;;11449:87;:::o;6150:104::-;6206:13;6239:7;6232:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6150:104;:::o;7680:436::-;7773:4;7790:13;7806:12;:10;:12::i;:::-;7790:28;;7829:24;7856:25;7866:5;7873:7;7856:9;:25::i;:::-;7829:52;;7920:15;7900:16;:35;;7892:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8013:60;8022:5;8029:7;8057:15;8038:16;:34;8013:8;:60::i;:::-;8104:4;8097:11;;;;7680:436;;;;:::o;6606:193::-;6685:4;6702:13;6718:12;:10;:12::i;:::-;6702:28;;6741;6751:5;6758:2;6762:6;6741:9;:28::i;:::-;6787:4;6780:11;;;6606:193;;;;:::o;42343:317::-;42446:7;:5;:7::i;:::-;42432:21;;:10;:21;;;:45;;;;42471:6;;;;;;;;;;;42457:20;;:10;:20;;;42432:45;42424:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42497:9;42492:165;42516:8;;:15;;42512:1;:19;42492:165;;;42576:13;42549:11;:24;42561:8;;42570:1;42561:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42549:24;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;42622:8;;42631:1;42622:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42605:44;;;42635:13;42605:44;;;;;;:::i;:::-;;;;;;;;42533:3;;;;;;;42492:165;;;;42343:317;;;:::o;38956:32::-;;;;;;;;;;;;;:::o;42781:268::-;42879:7;:5;:7::i;:::-;42865:21;;:10;:21;;;:45;;;;42904:6;;;;;;;;;;;42890:20;;:10;:20;;;42865:45;42857:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;42931:9;42927:115;42950:8;;:15;;42946:1;:19;42927:115;;;43022:8;42987:19;:32;43007:8;;43016:1;43007:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42987:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;42967:3;;;;;;;42927:115;;;;42781:268;;;:::o;38995:30::-;;;;;;;;;;;;;:::o;39230:27::-;;;;:::o;6805:151::-;6894:7;6921:11;:18;6933:5;6921:18;;;;;;;;;;;;;;;:27;6940:7;6921:27;;;;;;;;;;;;;;;;6914:34;;6805:151;;;;:::o;39188:33::-;;;;:::o;11789:201::-;11410:13;:11;:13::i;:::-;11898:1:::1;11878:22;;:8;:22;;::::0;11870:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11954:28;11973:8;11954:18;:28::i;:::-;11789:201:::0;:::o;41661:169::-;11410:13;:11;:13::i;:::-;41719:14:::1;;;;;;;;;;;41718:15;41710:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41789:4;41772:14;;:21;;;;;;;;;;;;;;;;;;41818:4;41804:11;;:18;;;;;;;;;;;;;;;;;;41661:169::o:0;42202:132::-;42282:5;42264:9;:15;42274:4;42264:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;42320:5;42303:23;;42314:4;42303:23;;;;;;;;;;;;42202:132;;:::o;5420:98::-;5473:7;5500:10;5493:17;;5420:98;:::o;10171:346::-;10290:1;10273:19;;:5;:19;;;10265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10371:1;10352:21;;:7;:21;;;10344:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10455:6;10425:11;:18;10437:5;10425:18;;;;;;;;;;;;;;;:27;10444:7;10425:27;;;;;;;;;;;;;;;:36;;;;10493:7;10477:32;;10486:5;10477:32;;;10502:6;10477:32;;;;;;:::i;:::-;;;;;;;;10171:346;;;:::o;10523:419::-;10624:24;10651:25;10661:5;10668:7;10651:9;:25::i;:::-;10624:52;;10711:17;10691:16;:37;10687:248;;10773:6;10753:16;:26;;10745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10857:51;10866:5;10873:7;10901:6;10882:16;:25;10857:8;:51::i;:::-;10687:248;10613:329;10523:419;;;:::o;43158:2502::-;43307:1;43291:18;;:4;:18;;;43283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43384:1;43370:16;;:2;:16;;;43362:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43446:11;:17;43458:4;43446:17;;;;;;;;;;;;;;;;;;;;;;;;;43445:18;:38;;;;;43468:11;:15;43480:2;43468:15;;;;;;;;;;;;;;;;;;;;;;;;;43467:16;43445:38;43437:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43527:11;:17;43539:4;43527:17;;;;;;;;;;;;;;;;;;;;;;;;;43526:18;:38;;;;;43549:11;:15;43561:2;43549:15;;;;;;;;;;;;;;;;;;;;;;;;;43548:16;43526:38;:65;;;;;43569:11;:22;43581:9;43569:22;;;;;;;;;;;;;;;;;;;;;;;;;43568:23;43526:65;43518:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;43625:14;;;;;;;;;;;:43;;;;43643:19;:25;43663:4;43643:25;;;;;;;;;;;;;;;;;;;;;;;;;43625:43;:70;;;;43672:19;:23;43692:2;43672:23;;;;;;;;;;;;;;;;;;;;;;;;;43625:70;43617:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;43749:1;43739:6;:11;43735:93;;43767:28;43783:4;43789:2;43793:1;43767:15;:28::i;:::-;43810:7;;43735:93;43842:28;43873:24;43891:4;43873:9;:24::i;:::-;43842:55;;43910:12;43949:18;;43925:20;:42;;43910:57;;43998:7;:35;;;;;44022:11;;;;;;;;;;;43998:35;:53;;;;;44036:9;:15;44046:4;44036:15;;;;;;;;;;;;;;;;;;;;;;;;;43998:53;:65;;;;;44054:9;;;;;;;;;;;44053:10;43998:65;:107;;;;;44080:19;:25;44100:4;44080:25;;;;;;;;;;;;;;;;;;;;;;;;;44079:26;43998:107;:148;;;;;44123:19;:23;44143:2;44123:23;;;;;;;;;;;;;;;;;;;;;;;;;44122:24;43998:148;43980:283;;;44185:4;44173:9;;:16;;;;;;;;;;;;;;;;;;44206:11;:9;:11::i;:::-;44246:5;44234:9;;:17;;;;;;;;;;;;;;;;;;43980:283;44275:12;44291:9;;;;;;;;;;;44290:10;44275:25;;44317:19;:25;44337:4;44317:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44346:19;:23;44366:2;44346:23;;;;;;;;;;;;;;;;;;;;;;;;;44317:52;44313:100;;;44396:5;44386:15;;44313:100;44425:12;44458:7;44454:1153;;;44510:9;:13;44520:2;44510:13;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;44543:1;44527:13;;:17;44510:34;44506:952;;;44572:36;44602:5;44572:25;44583:13;;44572:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;44565:43;;44721:13;;44679:17;;44672:4;:24;;;;:::i;:::-;44671:63;;;;:::i;:::-;44627:19;;:107;;;;;;;:::i;:::-;;;;;;;;44847:13;;44805:17;;44798:4;:24;;;;:::i;:::-;44797:63;;;;:::i;:::-;44753:19;;:107;;;;;;;:::i;:::-;;;;;;;;44977:13;;44933:19;;44926:4;:26;;;;:::i;:::-;44925:65;;;;:::i;:::-;44879:21;;:111;;;;;;;:::i;:::-;;;;;;;;44506:952;;;45052:9;:15;45062:4;45052:15;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;;45086:1;45071:12;;:16;45052:35;45048:410;;;45115:35;45144:5;45115:24;45126:12;;45115:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;45108:42;;45220:12;;45200:16;;45193:4;:23;;;;:::i;:::-;45192:40;;;;:::i;:::-;45169:19;;:63;;;;;;;:::i;:::-;;;;;;;;45302:12;;45282:16;;45275:4;:23;;;;:::i;:::-;45274:40;;;;:::i;:::-;45251:19;;:63;;;;;;;:::i;:::-;;;;;;;;45430:12;;45387:18;;45380:4;:25;;;;:::i;:::-;45379:63;;;;:::i;:::-;45333:21;;:109;;;;;;;:::i;:::-;;;;;;;;45048:410;44506:952;45485:1;45478:4;:8;45474:91;;;45507:42;45523:4;45537;45544;45507:15;:42::i;:::-;45474:91;45591:4;45581:14;;;;;:::i;:::-;;;44454:1153;45619:33;45635:4;45641:2;45645:6;45619:15;:33::i;:::-;43272:2388;;;;43158:2502;;;;:::o;11542:132::-;11617:12;:10;:12::i;:::-;11606:23;;:7;:5;:7::i;:::-;:23;;;11598:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11542:132::o;11996:191::-;12070:16;12089:6;;;;;;;;;;;12070:25;;12115:8;12106:6;;:17;;;;;;;;;;;;;;;;;;12170:8;12139:40;;12160:8;12139:40;;;;;;;;;;;;12059:128;11996:191;:::o;8124:806::-;8237:1;8221:18;;:4;:18;;;8213:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8314:1;8300:16;;:2;:16;;;8292:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8369:38;8390:4;8396:2;8400:6;8369:20;:38::i;:::-;8420:19;8442:9;:15;8452:4;8442:15;;;;;;;;;;;;;;;;8420:37;;8491:6;8476:11;:21;;8468:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8608:6;8594:11;:20;8576:9;:15;8586:4;8576:15;;;;;;;;;;;;;;;:38;;;;8811:6;8794:9;:13;8804:2;8794:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;8861:2;8846:26;;8855:4;8846:26;;;8865:6;8846:26;;;;;;:::i;:::-;;;;;;;;8885:37;8905:4;8911:2;8915:6;8885:19;:37::i;:::-;8202:728;8124:806;;;:::o;46559:1607::-;46600:23;46626:24;46644:4;46626:9;:24::i;:::-;46600:50;;46661:25;46759:21;;46724:19;;46689;;:54;;;;:::i;:::-;:91;;;;:::i;:::-;46661:119;;46791:12;46818:23;46932:1;46899:17;46863:19;;46845:15;:37;;;;:::i;:::-;46844:72;;;;:::i;:::-;:89;;;;:::i;:::-;46818:115;;46944:26;46973:36;46993:15;46973;:19;;:36;;;;:::i;:::-;46944:65;;47022:25;47050:21;47022:49;;47084:37;47102:18;47084:17;:37::i;:::-;47134:18;47155:44;47181:17;47155:21;:25;;:44;;;;:::i;:::-;47134:65;;47212:23;47238:82;47292:17;47238:35;47253:19;;47238:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;47212:108;;47333:25;47361:84;47417:17;47361:37;47376:21;;47361:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;47333:112;;47458:23;47541:17;47510:15;47484:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;47458:100;;47593:1;47571:19;:23;;;;47627:1;47605:19;:23;;;;47663:1;47639:21;:25;;;;47699:1;47681:15;:19;:42;;;;;47722:1;47704:15;:19;47681:42;47677:280;;;47740:47;47754:15;47771;47740:13;:47::i;:::-;47807:138;47840:18;47877:15;47911:19;;47807:138;;;;;;;;:::i;:::-;;;;;;;;47677:280;47991:17;;;;;;;;;;;47983:31;;48022:17;47983:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47969:75;;;;;48079:15;;;;;;;;;;;48071:29;;48122:21;48071:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48057:101;;;;;46589:1577;;;;;;;;;;46559:1607::o;28780:98::-;28838:7;28869:1;28865;:5;;;;:::i;:::-;28858:12;;28780:98;;;;:::o;28890:::-;28948:7;28979:1;28975;:5;;;;:::i;:::-;28968:12;;28890:98;;;;:::o;10948:91::-;;;;:::o;11045:90::-;;;;:::o;28670:98::-;28728:7;28759:1;28755;:5;;;;:::i;:::-;28748:12;;28670:98;;;;:::o;45668:503::-;45736:21;45774:1;45760:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45736:40;;45805:4;45787;45792:1;45787:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45831:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45821:4;45826:1;45821:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45866:62;45883:4;45898:15;45916:11;45866:8;:62::i;:::-;45967:15;:66;;;46048:11;46074:1;46090:4;46117;46137:15;45967:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45725:446;45668:503;:::o;46179:372::-;46262:62;46279:4;46294:15;46312:11;46262:8;:62::i;:::-;46337:15;:31;;;46376:9;46409:4;46429:11;46455:1;46471;46487:15;;;;;;;;;;;46517;46337:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46179:372;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:90::-;3280:7;3323:5;3316:13;3309:21;3298:32;;3246:90;;;:::o;3342:116::-;3412:21;3427:5;3412:21;:::i;:::-;3405:5;3402:32;3392:60;;3448:1;3445;3438:12;3392:60;3342:116;:::o;3464:133::-;3507:5;3545:6;3532:20;3523:29;;3561:30;3585:5;3561:30;:::i;:::-;3464:133;;;;:::o;3603:678::-;3693:6;3701;3750:2;3738:9;3729:7;3725:23;3721:32;3718:119;;;3756:79;;:::i;:::-;3718:119;3904:1;3893:9;3889:17;3876:31;3934:18;3926:6;3923:30;3920:117;;;3956:79;;:::i;:::-;3920:117;4061:78;4131:7;4122:6;4111:9;4107:22;4061:78;:::i;:::-;4051:88;;3847:302;4188:2;4214:50;4256:7;4247:6;4236:9;4232:22;4214:50;:::i;:::-;4204:60;;4159:115;3603:678;;;;;:::o;4287:99::-;4339:6;4373:5;4367:12;4357:22;;4287:99;;;:::o;4392:169::-;4476:11;4510:6;4505:3;4498:19;4550:4;4545:3;4541:14;4526:29;;4392:169;;;;:::o;4567:246::-;4648:1;4658:113;4672:6;4669:1;4666:13;4658:113;;;4757:1;4752:3;4748:11;4742:18;4738:1;4733:3;4729:11;4722:39;4694:2;4691:1;4687:10;4682:15;;4658:113;;;4805:1;4796:6;4791:3;4787:16;4780:27;4629:184;4567:246;;;:::o;4819:377::-;4907:3;4935:39;4968:5;4935:39;:::i;:::-;4990:71;5054:6;5049:3;4990:71;:::i;:::-;4983:78;;5070:65;5128:6;5123:3;5116:4;5109:5;5105:16;5070:65;:::i;:::-;5160:29;5182:6;5160:29;:::i;:::-;5155:3;5151:39;5144:46;;4911:285;4819:377;;;;:::o;5202:313::-;5315:4;5353:2;5342:9;5338:18;5330:26;;5402:9;5396:4;5392:20;5388:1;5377:9;5373:17;5366:47;5430:78;5503:4;5494:6;5430:78;:::i;:::-;5422:86;;5202:313;;;;:::o;5521:77::-;5558:7;5587:5;5576:16;;5521:77;;;:::o;5604:122::-;5677:24;5695:5;5677:24;:::i;:::-;5670:5;5667:35;5657:63;;5716:1;5713;5706:12;5657:63;5604:122;:::o;5732:139::-;5778:5;5816:6;5803:20;5794:29;;5832:33;5859:5;5832:33;:::i;:::-;5732:139;;;;:::o;5877:474::-;5945:6;5953;6002:2;5990:9;5981:7;5977:23;5973:32;5970:119;;;6008:79;;:::i;:::-;5970:119;6128:1;6153:53;6198:7;6189:6;6178:9;6174:22;6153:53;:::i;:::-;6143:63;;6099:117;6255:2;6281:53;6326:7;6317:6;6306:9;6302:22;6281:53;:::i;:::-;6271:63;;6226:118;5877:474;;;;;:::o;6357:109::-;6438:21;6453:5;6438:21;:::i;:::-;6433:3;6426:34;6357:109;;:::o;6472:210::-;6559:4;6597:2;6586:9;6582:18;6574:26;;6610:65;6672:1;6661:9;6657:17;6648:6;6610:65;:::i;:::-;6472:210;;;;:::o;6688:60::-;6716:3;6737:5;6730:12;;6688:60;;;:::o;6754:142::-;6804:9;6837:53;6855:34;6864:24;6882:5;6864:24;:::i;:::-;6855:34;:::i;:::-;6837:53;:::i;:::-;6824:66;;6754:142;;;:::o;6902:126::-;6952:9;6985:37;7016:5;6985:37;:::i;:::-;6972:50;;6902:126;;;:::o;7034:153::-;7111:9;7144:37;7175:5;7144:37;:::i;:::-;7131:50;;7034:153;;;:::o;7193:185::-;7307:64;7365:5;7307:64;:::i;:::-;7302:3;7295:77;7193:185;;:::o;7384:276::-;7504:4;7542:2;7531:9;7527:18;7519:26;;7555:98;7650:1;7639:9;7635:17;7626:6;7555:98;:::i;:::-;7384:276;;;;:::o;7666:118::-;7753:24;7771:5;7753:24;:::i;:::-;7748:3;7741:37;7666:118;;:::o;7790:222::-;7883:4;7921:2;7910:9;7906:18;7898:26;;7934:71;8002:1;7991:9;7987:17;7978:6;7934:71;:::i;:::-;7790:222;;;;:::o;8018:619::-;8095:6;8103;8111;8160:2;8148:9;8139:7;8135:23;8131:32;8128:119;;;8166:79;;:::i;:::-;8128:119;8286:1;8311:53;8356:7;8347:6;8336:9;8332:22;8311:53;:::i;:::-;8301:63;;8257:117;8413:2;8439:53;8484:7;8475:6;8464:9;8460:22;8439:53;:::i;:::-;8429:63;;8384:118;8541:2;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8512:118;8018:619;;;;;:::o;8643:118::-;8730:24;8748:5;8730:24;:::i;:::-;8725:3;8718:37;8643:118;;:::o;8767:222::-;8860:4;8898:2;8887:9;8883:18;8875:26;;8911:71;8979:1;8968:9;8964:17;8955:6;8911:71;:::i;:::-;8767:222;;;;:::o;8995:86::-;9030:7;9070:4;9063:5;9059:16;9048:27;;8995:86;;;:::o;9087:112::-;9170:22;9186:5;9170:22;:::i;:::-;9165:3;9158:35;9087:112;;:::o;9205:214::-;9294:4;9332:2;9321:9;9317:18;9309:26;;9345:67;9409:1;9398:9;9394:17;9385:6;9345:67;:::i;:::-;9205:214;;;;:::o;9425:329::-;9484:6;9533:2;9521:9;9512:7;9508:23;9504:32;9501:119;;;9539:79;;:::i;:::-;9501:119;9659:1;9684:53;9729:7;9720:6;9709:9;9705:22;9684:53;:::i;:::-;9674:63;;9630:117;9425:329;;;;:::o;9760:117::-;9869:1;9866;9859:12;9900:568;9973:8;9983:6;10033:3;10026:4;10018:6;10014:17;10010:27;10000:122;;10041:79;;:::i;:::-;10000:122;10154:6;10141:20;10131:30;;10184:18;10176:6;10173:30;10170:117;;;10206:79;;:::i;:::-;10170:117;10320:4;10312:6;10308:17;10296:29;;10374:3;10366:4;10358:6;10354:17;10344:8;10340:32;10337:41;10334:128;;;10381:79;;:::i;:::-;10334:128;9900:568;;;;;:::o;10474:698::-;10566:6;10574;10582;10631:2;10619:9;10610:7;10606:23;10602:32;10599:119;;;10637:79;;:::i;:::-;10599:119;10785:1;10774:9;10770:17;10757:31;10815:18;10807:6;10804:30;10801:117;;;10837:79;;:::i;:::-;10801:117;10950:80;11022:7;11013:6;11002:9;10998:22;10950:80;:::i;:::-;10932:98;;;;10728:312;11079:2;11105:50;11147:7;11138:6;11127:9;11123:22;11105:50;:::i;:::-;11095:60;;11050:115;10474:698;;;;;:::o;11178:474::-;11246:6;11254;11303:2;11291:9;11282:7;11278:23;11274:32;11271:119;;;11309:79;;:::i;:::-;11271:119;11429:1;11454:53;11499:7;11490:6;11479:9;11475:22;11454:53;:::i;:::-;11444:63;;11400:117;11556:2;11582:53;11627:7;11618:6;11607:9;11603:22;11582:53;:::i;:::-;11572:63;;11527:118;11178:474;;;;;:::o;11658:151::-;11798:3;11794:1;11786:6;11782:14;11775:27;11658:151;:::o;11815:365::-;11957:3;11978:66;12042:1;12037:3;11978:66;:::i;:::-;11971:73;;12053:93;12142:3;12053:93;:::i;:::-;12171:2;12166:3;12162:12;12155:19;;11815:365;;;:::o;12186:419::-;12352:4;12390:2;12379:9;12375:18;12367:26;;12439:9;12433:4;12429:20;12425:1;12414:9;12410:17;12403:47;12467:131;12593:4;12467:131;:::i;:::-;12459:139;;12186:419;;;:::o;12611:180::-;12659:77;12656:1;12649:88;12756:4;12753:1;12746:15;12780:4;12777:1;12770:15;12797:244;12937:34;12933:1;12925:6;12921:14;12914:58;13006:27;13001:2;12993:6;12989:15;12982:52;12797:244;:::o;13047:366::-;13189:3;13210:67;13274:2;13269:3;13210:67;:::i;:::-;13203:74;;13286:93;13375:3;13286:93;:::i;:::-;13404:2;13399:3;13395:12;13388:19;;13047:366;;;:::o;13419:419::-;13585:4;13623:2;13612:9;13608:18;13600:26;;13672:9;13666:4;13662:20;13658:1;13647:9;13643:17;13636:47;13700:131;13826:4;13700:131;:::i;:::-;13692:139;;13419:419;;;:::o;13844:180::-;13892:77;13889:1;13882:88;13989:4;13986:1;13979:15;14013:4;14010:1;14003:15;14030:320;14074:6;14111:1;14105:4;14101:12;14091:22;;14158:1;14152:4;14148:12;14179:18;14169:81;;14235:4;14227:6;14223:17;14213:27;;14169:81;14297:2;14289:6;14286:14;14266:18;14263:38;14260:84;;14316:18;;:::i;:::-;14260:84;14081:269;14030:320;;;:::o;14356:180::-;14404:77;14401:1;14394:88;14501:4;14498:1;14491:15;14525:4;14522:1;14515:15;14542:191;14582:3;14601:20;14619:1;14601:20;:::i;:::-;14596:25;;14635:20;14653:1;14635:20;:::i;:::-;14630:25;;14678:1;14675;14671:9;14664:16;;14699:3;14696:1;14693:10;14690:36;;;14706:18;;:::i;:::-;14690:36;14542:191;;;;:::o;14739:224::-;14879:34;14875:1;14867:6;14863:14;14856:58;14948:7;14943:2;14935:6;14931:15;14924:32;14739:224;:::o;14969:366::-;15111:3;15132:67;15196:2;15191:3;15132:67;:::i;:::-;15125:74;;15208:93;15297:3;15208:93;:::i;:::-;15326:2;15321:3;15317:12;15310:19;;14969:366;;;:::o;15341:419::-;15507:4;15545:2;15534:9;15530:18;15522:26;;15594:9;15588:4;15584:20;15580:1;15569:9;15565:17;15558:47;15622:131;15748:4;15622:131;:::i;:::-;15614:139;;15341:419;;;:::o;15766:153::-;15906:5;15902:1;15894:6;15890:14;15883:29;15766:153;:::o;15925:365::-;16067:3;16088:66;16152:1;16147:3;16088:66;:::i;:::-;16081:73;;16163:93;16252:3;16163:93;:::i;:::-;16281:2;16276:3;16272:12;16265:19;;15925:365;;;:::o;16296:419::-;16462:4;16500:2;16489:9;16485:18;16477:26;;16549:9;16543:4;16539:20;16535:1;16524:9;16520:17;16513:47;16577:131;16703:4;16577:131;:::i;:::-;16569:139;;16296:419;;;:::o;16721:225::-;16861:34;16857:1;16849:6;16845:14;16838:58;16930:8;16925:2;16917:6;16913:15;16906:33;16721:225;:::o;16952:366::-;17094:3;17115:67;17179:2;17174:3;17115:67;:::i;:::-;17108:74;;17191:93;17280:3;17191:93;:::i;:::-;17309:2;17304:3;17300:12;17293:19;;16952:366;;;:::o;17324:419::-;17490:4;17528:2;17517:9;17513:18;17505:26;;17577:9;17571:4;17567:20;17563:1;17552:9;17548:17;17541:47;17605:131;17731:4;17605:131;:::i;:::-;17597:139;;17324:419;;;:::o;17749:173::-;17889:25;17885:1;17877:6;17873:14;17866:49;17749:173;:::o;17928:366::-;18070:3;18091:67;18155:2;18150:3;18091:67;:::i;:::-;18084:74;;18167:93;18256:3;18167:93;:::i;:::-;18285:2;18280:3;18276:12;18269:19;;17928:366;;;:::o;18300:419::-;18466:4;18504:2;18493:9;18489:18;18481:26;;18553:9;18547:4;18543:20;18539:1;18528:9;18524:17;18517:47;18581:131;18707:4;18581:131;:::i;:::-;18573:139;;18300:419;;;:::o;18725:223::-;18865:34;18861:1;18853:6;18849:14;18842:58;18934:6;18929:2;18921:6;18917:15;18910:31;18725:223;:::o;18954:366::-;19096:3;19117:67;19181:2;19176:3;19117:67;:::i;:::-;19110:74;;19193:93;19282:3;19193:93;:::i;:::-;19311:2;19306:3;19302:12;19295:19;;18954:366;;;:::o;19326:419::-;19492:4;19530:2;19519:9;19515:18;19507:26;;19579:9;19573:4;19569:20;19565:1;19554:9;19550:17;19543:47;19607:131;19733:4;19607:131;:::i;:::-;19599:139;;19326:419;;;:::o;19751:221::-;19891:34;19887:1;19879:6;19875:14;19868:58;19960:4;19955:2;19947:6;19943:15;19936:29;19751:221;:::o;19978:366::-;20120:3;20141:67;20205:2;20200:3;20141:67;:::i;:::-;20134:74;;20217:93;20306:3;20217:93;:::i;:::-;20335:2;20330:3;20326:12;20319:19;;19978:366;;;:::o;20350:419::-;20516:4;20554:2;20543:9;20539:18;20531:26;;20603:9;20597:4;20593:20;20589:1;20578:9;20574:17;20567:47;20631:131;20757:4;20631:131;:::i;:::-;20623:139;;20350:419;;;:::o;20775:179::-;20915:31;20911:1;20903:6;20899:14;20892:55;20775:179;:::o;20960:366::-;21102:3;21123:67;21187:2;21182:3;21123:67;:::i;:::-;21116:74;;21199:93;21288:3;21199:93;:::i;:::-;21317:2;21312:3;21308:12;21301:19;;20960:366;;;:::o;21332:419::-;21498:4;21536:2;21525:9;21521:18;21513:26;;21585:9;21579:4;21575:20;21571:1;21560:9;21556:17;21549:47;21613:131;21739:4;21613:131;:::i;:::-;21605:139;;21332:419;;;:::o;21757:224::-;21897:34;21893:1;21885:6;21881:14;21874:58;21966:7;21961:2;21953:6;21949:15;21942:32;21757:224;:::o;21987:366::-;22129:3;22150:67;22214:2;22209:3;22150:67;:::i;:::-;22143:74;;22226:93;22315:3;22226:93;:::i;:::-;22344:2;22339:3;22335:12;22328:19;;21987:366;;;:::o;22359:419::-;22525:4;22563:2;22552:9;22548:18;22540:26;;22612:9;22606:4;22602:20;22598:1;22587:9;22583:17;22576:47;22640:131;22766:4;22640:131;:::i;:::-;22632:139;;22359:419;;;:::o;22784:222::-;22924:34;22920:1;22912:6;22908:14;22901:58;22993:5;22988:2;22980:6;22976:15;22969:30;22784:222;:::o;23012:366::-;23154:3;23175:67;23239:2;23234:3;23175:67;:::i;:::-;23168:74;;23251:93;23340:3;23251:93;:::i;:::-;23369:2;23364:3;23360:12;23353:19;;23012:366;;;:::o;23384:419::-;23550:4;23588:2;23577:9;23573:18;23565:26;;23637:9;23631:4;23627:20;23623:1;23612:9;23608:17;23601:47;23665:131;23791:4;23665:131;:::i;:::-;23657:139;;23384:419;;;:::o;23809:169::-;23949:21;23945:1;23937:6;23933:14;23926:45;23809:169;:::o;23984:366::-;24126:3;24147:67;24211:2;24206:3;24147:67;:::i;:::-;24140:74;;24223:93;24312:3;24223:93;:::i;:::-;24341:2;24336:3;24332:12;24325:19;;23984:366;;;:::o;24356:419::-;24522:4;24560:2;24549:9;24545:18;24537:26;;24609:9;24603:4;24599:20;24595:1;24584:9;24580:17;24573:47;24637:131;24763:4;24637:131;:::i;:::-;24629:139;;24356:419;;;:::o;24781:160::-;24921:12;24917:1;24909:6;24905:14;24898:36;24781:160;:::o;24947:366::-;25089:3;25110:67;25174:2;25169:3;25110:67;:::i;:::-;25103:74;;25186:93;25275:3;25186:93;:::i;:::-;25304:2;25299:3;25295:12;25288:19;;24947:366;;;:::o;25319:419::-;25485:4;25523:2;25512:9;25508:18;25500:26;;25572:9;25566:4;25562:20;25558:1;25547:9;25543:17;25536:47;25600:131;25726:4;25600:131;:::i;:::-;25592:139;;25319:419;;;:::o;25744:174::-;25884:26;25880:1;25872:6;25868:14;25861:50;25744:174;:::o;25924:366::-;26066:3;26087:67;26151:2;26146:3;26087:67;:::i;:::-;26080:74;;26163:93;26252:3;26163:93;:::i;:::-;26281:2;26276:3;26272:12;26265:19;;25924:366;;;:::o;26296:419::-;26462:4;26500:2;26489:9;26485:18;26477:26;;26549:9;26543:4;26539:20;26535:1;26524:9;26520:17;26513:47;26577:131;26703:4;26577:131;:::i;:::-;26569:139;;26296:419;;;:::o;26721:410::-;26761:7;26784:20;26802:1;26784:20;:::i;:::-;26779:25;;26818:20;26836:1;26818:20;:::i;:::-;26813:25;;26873:1;26870;26866:9;26895:30;26913:11;26895:30;:::i;:::-;26884:41;;27074:1;27065:7;27061:15;27058:1;27055:22;27035:1;27028:9;27008:83;26985:139;;27104:18;;:::i;:::-;26985:139;26769:362;26721:410;;;;:::o;27137:180::-;27185:77;27182:1;27175:88;27282:4;27279:1;27272:15;27306:4;27303:1;27296:15;27323:185;27363:1;27380:20;27398:1;27380:20;:::i;:::-;27375:25;;27414:20;27432:1;27414:20;:::i;:::-;27409:25;;27453:1;27443:35;;27458:18;;:::i;:::-;27443:35;27500:1;27497;27493:9;27488:14;;27323:185;;;;:::o;27514:194::-;27554:4;27574:20;27592:1;27574:20;:::i;:::-;27569:25;;27608:20;27626:1;27608:20;:::i;:::-;27603:25;;27652:1;27649;27645:9;27637:17;;27676:1;27670:4;27667:11;27664:37;;;27681:18;;:::i;:::-;27664:37;27514:194;;;;:::o;27714:182::-;27854:34;27850:1;27842:6;27838:14;27831:58;27714:182;:::o;27902:366::-;28044:3;28065:67;28129:2;28124:3;28065:67;:::i;:::-;28058:74;;28141:93;28230:3;28141:93;:::i;:::-;28259:2;28254:3;28250:12;28243:19;;27902:366;;;:::o;28274:419::-;28440:4;28478:2;28467:9;28463:18;28455:26;;28527:9;28521:4;28517:20;28513:1;28502:9;28498:17;28491:47;28555:131;28681:4;28555:131;:::i;:::-;28547:139;;28274:419;;;:::o;28699:225::-;28839:34;28835:1;28827:6;28823:14;28816:58;28908:8;28903:2;28895:6;28891:15;28884:33;28699:225;:::o;28930:366::-;29072:3;29093:67;29157:2;29152:3;29093:67;:::i;:::-;29086:74;;29169:93;29258:3;29169:93;:::i;:::-;29287:2;29282:3;29278:12;29271:19;;28930:366;;;:::o;29302:419::-;29468:4;29506:2;29495:9;29491:18;29483:26;;29555:9;29549:4;29545:20;29541:1;29530:9;29526:17;29519:47;29583:131;29709:4;29583:131;:::i;:::-;29575:139;;29302:419;;;:::o;29727:442::-;29876:4;29914:2;29903:9;29899:18;29891:26;;29927:71;29995:1;29984:9;29980:17;29971:6;29927:71;:::i;:::-;30008:72;30076:2;30065:9;30061:18;30052:6;30008:72;:::i;:::-;30090;30158:2;30147:9;30143:18;30134:6;30090:72;:::i;:::-;29727:442;;;;;;:::o;30175:147::-;30276:11;30313:3;30298:18;;30175:147;;;;:::o;30328:114::-;;:::o;30448:398::-;30607:3;30628:83;30709:1;30704:3;30628:83;:::i;:::-;30621:90;;30720:93;30809:3;30720:93;:::i;:::-;30838:1;30833:3;30829:11;30822:18;;30448:398;;;:::o;30852:379::-;31036:3;31058:147;31201:3;31058:147;:::i;:::-;31051:154;;31222:3;31215:10;;30852:379;;;:::o;31237:143::-;31294:5;31325:6;31319:13;31310:22;;31341:33;31368:5;31341:33;:::i;:::-;31237:143;;;;:::o;31386:351::-;31456:6;31505:2;31493:9;31484:7;31480:23;31476:32;31473:119;;;31511:79;;:::i;:::-;31473:119;31631:1;31656:64;31712:7;31703:6;31692:9;31688:22;31656:64;:::i;:::-;31646:74;;31602:128;31386:351;;;;:::o;31743:85::-;31788:7;31817:5;31806:16;;31743:85;;;:::o;31834:158::-;31892:9;31925:61;31943:42;31952:32;31978:5;31952:32;:::i;:::-;31943:42;:::i;:::-;31925:61;:::i;:::-;31912:74;;31834:158;;;:::o;31998:147::-;32093:45;32132:5;32093:45;:::i;:::-;32088:3;32081:58;31998:147;;:::o;32151:114::-;32218:6;32252:5;32246:12;32236:22;;32151:114;;;:::o;32271:184::-;32370:11;32404:6;32399:3;32392:19;32444:4;32439:3;32435:14;32420:29;;32271:184;;;;:::o;32461:132::-;32528:4;32551:3;32543:11;;32581:4;32576:3;32572:14;32564:22;;32461:132;;;:::o;32599:108::-;32676:24;32694:5;32676:24;:::i;:::-;32671:3;32664:37;32599:108;;:::o;32713:179::-;32782:10;32803:46;32845:3;32837:6;32803:46;:::i;:::-;32881:4;32876:3;32872:14;32858:28;;32713:179;;;;:::o;32898:113::-;32968:4;33000;32995:3;32991:14;32983:22;;32898:113;;;:::o;33047:732::-;33166:3;33195:54;33243:5;33195:54;:::i;:::-;33265:86;33344:6;33339:3;33265:86;:::i;:::-;33258:93;;33375:56;33425:5;33375:56;:::i;:::-;33454:7;33485:1;33470:284;33495:6;33492:1;33489:13;33470:284;;;33571:6;33565:13;33598:63;33657:3;33642:13;33598:63;:::i;:::-;33591:70;;33684:60;33737:6;33684:60;:::i;:::-;33674:70;;33530:224;33517:1;33514;33510:9;33505:14;;33470:284;;;33474:14;33770:3;33763:10;;33171:608;;;33047:732;;;;:::o;33785:831::-;34048:4;34086:3;34075:9;34071:19;34063:27;;34100:71;34168:1;34157:9;34153:17;34144:6;34100:71;:::i;:::-;34181:80;34257:2;34246:9;34242:18;34233:6;34181:80;:::i;:::-;34308:9;34302:4;34298:20;34293:2;34282:9;34278:18;34271:48;34336:108;34439:4;34430:6;34336:108;:::i;:::-;34328:116;;34454:72;34522:2;34511:9;34507:18;34498:6;34454:72;:::i;:::-;34536:73;34604:3;34593:9;34589:19;34580:6;34536:73;:::i;:::-;33785:831;;;;;;;;:::o;34622:807::-;34871:4;34909:3;34898:9;34894:19;34886:27;;34923:71;34991:1;34980:9;34976:17;34967:6;34923:71;:::i;:::-;35004:72;35072:2;35061:9;35057:18;35048:6;35004:72;:::i;:::-;35086:80;35162:2;35151:9;35147:18;35138:6;35086:80;:::i;:::-;35176;35252:2;35241:9;35237:18;35228:6;35176:80;:::i;:::-;35266:73;35334:3;35323:9;35319:19;35310:6;35266:73;:::i;:::-;35349;35417:3;35406:9;35402:19;35393:6;35349:73;:::i;:::-;34622:807;;;;;;;;;:::o;35435:143::-;35492:5;35523:6;35517:13;35508:22;;35539:33;35566:5;35539:33;:::i;:::-;35435:143;;;;:::o;35584:663::-;35672:6;35680;35688;35737:2;35725:9;35716:7;35712:23;35708:32;35705:119;;;35743:79;;:::i;:::-;35705:119;35863:1;35888:64;35944:7;35935:6;35924:9;35920:22;35888:64;:::i;:::-;35878:74;;35834:128;36001:2;36027:64;36083:7;36074:6;36063:9;36059:22;36027:64;:::i;:::-;36017:74;;35972:129;36140:2;36166:64;36222:7;36213:6;36202:9;36198:22;36166:64;:::i;:::-;36156:74;;36111:129;35584:663;;;;;:::o

Swarm Source

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