ETH Price: $2,854.28 (-2.87%)
 

Overview

Max Total Supply

10,000,000,000 CROW

Holders

1,973

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
40,000 CROW

Value
$0.00
0xE6DFa108641c5263739Ea2d7a238D399Ad22BF9e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
BaseCrow

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-05-06
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// File: contracts/BaseCrowToken.sol



pragma solidity 0.8.25;
pragma experimental ABIEncoderV2;



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

// pragma solidity ^0.8.0;

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

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

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

// pragma solidity ^0.8.0;

// import "../utils/Context.sol";

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

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

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

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

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

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

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

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

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

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

// pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

// pragma solidity ^0.8.0;

// import "../IERC20.sol";

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

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

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

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

// pragma solidity ^0.8.0;

// import "./IERC20.sol";
// import "./extensions/IERC20Metadata.sol";
// import "../../utils/Context.sol";

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


// pragma solidity >=0.5.0;
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 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);
}

// pragma solidity >=0.6.2;
// import './IUniswapV2Router01.sol';
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 BaseCrow is ERC20, Ownable, ReentrancyGuard {
    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 tradingActive;
    bool public swapEnabled;
    bool public limited = true;
    bool private _swapping;

    uint256 public maxTransaction;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

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

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

    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;
    uint256 private _previousFee;
    uint256 private _previousFee2;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTransaction;
    mapping(address => bool) private _automatedMarketMakerPairs;
    //mapping(address => bool) private _isCrow;

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);

    constructor() ERC20("BaseCrow", "CROW") {

         // 10 billions
        uint256 totalSupply = 10_000_000_000 * (10 ** 18);

        // MAINNET - production
        address crowMultisig = 0x4B0b351c6B161392Cd47319CD365DA9BFf9CAe77;  
        uniswapV2Router = IUniswapV2Router02(
            0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
        );

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        maxTransaction = totalSupply;
        maxWallet = totalSupply / 50;
        swapTokensAtAmount = (totalSupply * 1) / 1000;

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

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

        marketingWallet = crowMultisig;
        developmentWallet = crowMultisig;
        liquidityWallet = crowMultisig;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(crowMultisig, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(crowMultisig, true);

        _mint(owner(), (totalSupply / 100) * 15); 
        _mint(crowMultisig, (totalSupply / 100) * 50); 
        _mint(address(this), (totalSupply / 100) * 35); 

        //setCrow(_crows, true);
    }

    receive() external payable {}

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

    function addLiquidity() public onlyOwner {
        require(!tradingActive, "Trading already active.");

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Pair), type(uint256).max);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
    }

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

    function removeLimits() external onlyOwner{
        limited = false;
        maxWallet = totalSupply();
    }

    /**
    function setCrow(address[] memory _crows, bool set) internal {
        for(uint256 i = 0; i < _crows.length; i++){
            _isCrow[_crows[i]] = set;
        }
    } */

    function setSwapEnabled(bool value) public onlyOwner {
        swapEnabled = value;
    }

    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
        require(
            amount >= (totalSupply() * 1) / 100000,
            "ERC20: Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            amount <= (totalSupply() * 5) / 1000,
            "ERC20: Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = amount;
    }

    function setMaxWalletAndMaxTransaction(
        uint256 _maxTransaction,
        uint256 _maxWallet
    ) public onlyOwner {
        require(
            _maxTransaction >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxTxn lower than 0.5%"
        );
        require(
            _maxWallet >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxWallet lower than 0.5%"
        );
        maxTransaction = _maxTransaction;
        maxWallet = _maxWallet;
    }

    function setBuyFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        require(
            _marketingFee + _developmentFee + _liquidityFee <= 300,
            "ERC20: Must keep fees at 3% or less"
        );
        _buyMarketingFee = _marketingFee;
        _buyDevelopmentFee = _developmentFee;
        _buyLiquidityFee = _liquidityFee;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;
    }

    function setSellFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        require(
            _marketingFee + _developmentFee + _liquidityFee <= 300,
            "ERC20: Must keep fees at 3% or less"
        );
        _sellMarketingFee = _marketingFee;
        _sellDevelopmentFee = _developmentFee;
        _sellLiquidityFee = _liquidityFee;
        sellTotalFees =
            _sellMarketingFee +
            _sellDevelopmentFee +
            _sellLiquidityFee;
        _previousFee = sellTotalFees;
    }

    function setMarketingWallet(address _marketingWallet) public onlyOwner {
        require(_marketingWallet != address(0), "ERC20: Address 0");
        address oldWallet = marketingWallet;
        marketingWallet = _marketingWallet;
        emit marketingWalletUpdated(marketingWallet, oldWallet);
    }

    function setDevelopmentWallet(address _developmentWallet) public onlyOwner {
        require(_developmentWallet != address(0), "ERC20: Address 0");
        address oldWallet = developmentWallet;
        developmentWallet = _developmentWallet;
        emit developmentWalletUpdated(developmentWallet, oldWallet);
    }

    function setLiquidityWallet(address _liquidityWallet) public onlyOwner {
        require(_liquidityWallet != address(0), "ERC20: Address 0");
        address oldWallet = liquidityWallet;
        liquidityWallet = _liquidityWallet;
        emit liquidityWalletUpdated(liquidityWallet, oldWallet);
    }

    function excludeFromMaxTransaction(address account, bool value)
        public
        onlyOwner
    {
        _isExcludedFromMaxTransaction[account] = value;
        emit ExcludeFromLimits(account, value);
    }

    function bulkExcludeFromMaxTransaction(
        address[] calldata accounts,
        bool value
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromMaxTransaction[accounts[i]] = value;
            emit ExcludeFromLimits(accounts[i], value);
        }
    }

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

    function bulkExcludeFromFees(address[] calldata accounts, bool value)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = value;
            emit ExcludeFromFees(accounts[i], value);
        }
    }

    function withdrawStuckTokens(address tkn) public onlyOwner {
        bool success;
        if (tkn == address(0))
            (success, ) = address(msg.sender).call{
                value: address(this).balance
            }("");
        else {
            require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
            uint256 amount = IERC20(tkn).balanceOf(address(this));
            IERC20(tkn).transfer(msg.sender, amount);
        }
    }

    function isExcludedFromMaxTransaction(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxTransaction[account];
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) internal {
        _automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != deadAddress &&
            !_swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "ERC20: Trading is not active."
                );
            }

            if (limited && from == address(uniswapV2Pair)) {  // has to be the LP 
                require(balanceOf(to) + amount <= maxWallet, "Forbid");
                //require(_isCrow[from] || _isCrow[to], "Forbid");
            }

            //when buy
            if (
                _automatedMarketMakerPairs[from] &&
                !_isExcludedFromMaxTransaction[to]
            ) {
                require(
                    amount <= maxTransaction,
                    "ERC20: Buy transfer amount exceeds the maxTransaction."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
            //when sell
            else if (
                _automatedMarketMakerPairs[to] &&
                !_isExcludedFromMaxTransaction[from]
            ) {
                require(
                    amount <= maxTransaction,
                    "ERC20: Sell transfer amount exceeds the maxTransaction."
                );
            } else if (!_isExcludedFromMaxTransaction[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !_swapping &&
            !_automatedMarketMakerPairs[from] &&
            !_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 (_automatedMarketMakerPairs[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 (_automatedMarketMakerPairs[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);
        sellTotalFees = _previousFee;
    }

    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;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 10) {
            contractBalance = swapTokensAtAmount * 10;
        }

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

    function airdrop(address[] calldata addresses, uint256[] calldata tokenAmounts) external onlyOwner {
        require(addresses.length <= 250,"More than 250 wallets");
        require(addresses.length == tokenAmounts.length,"List length mismatch");

        uint256 airdropTotal = 0;
        for(uint i=0; i < addresses.length; i++){
            airdropTotal += tokenAmounts[i];
        }
        //require(_balances[msg.sender] >= airdropTotal, "Token balance too low");
        require(balanceOf(msg.sender) >= airdropTotal, "Token balance too low");

        for(uint i=0; i < addresses.length; i++){
            //_balances[msg.sender] -= tokenAmounts[i];
            //_balances[addresses[i]] += tokenAmounts[i];
            super._transfer(msg.sender, addresses[i], tokenAmounts[i]);

            //emit Transfer(msg.sender, addresses[i], tokenAmounts[i] );       
        }

        emit TokensAirdropped(addresses.length, airdropTotal);
    }
}

Contract Security Audit

Contract ABI

API
[{"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":"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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"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":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","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":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransaction","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWalletAndMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600a60166101000a81548160ff02191690831515021790555034801561002a575f80fd5b506040518060400160405280600881526020017f4261736543726f770000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43524f570000000000000000000000000000000000000000000000000000000081525081600390816100a69190610c7d565b5080600490816100b69190610c7d565b5050506100d56100ca61043860201b60201c565b61043f60201b60201c565b60016006819055505f6b204fce5e3e2502611000000090505f734b0b351c6b161392cd47319cd365da9bff9cae779050734752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050610180306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61050260201b60201c565b81600b819055506032826101949190610da6565b600c819055506103e86001836101aa9190610dd6565b6101b49190610da6565b600d819055505f600f819055505f6010819055505f601181905550601154601054600f546101e29190610e17565b6101ec9190610e17565b600e819055505f6013819055505f6014819055505f60158190555060155460145460135461021a9190610e17565b6102249190610e17565b6012819055506012546019819055508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103116103046106c560201b60201c565b60016106ed60201b60201c565b6103223060016106ed60201b60201c565b61033561dead60016106ed60201b60201c565b6103468160016106ed60201b60201c565b6103646103576106c560201b60201c565b60016107a160201b60201c565b6103753060016107a160201b60201c565b61038861dead60016107a160201b60201c565b61039b60805160016107a160201b60201c565b6103ac8160016107a160201b60201c565b6103e16103bd6106c560201b60201c565b600f6064856103cc9190610da6565b6103d69190610dd6565b61085560201b60201c565b6104098160326064856103f49190610da6565b6103fe9190610dd6565b61085560201b60201c565b61043130602360648561041c9190610da6565b6104269190610dd6565b61085560201b60201c565b50506110a1565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790610eca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d590610f58565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516106b89190610f85565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106fb6109af60201b60201c565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107959190610fb8565b60405180910390a25050565b6107af6109af60201b60201c565b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516108499190610fb8565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba9061101b565b60405180910390fd5b6108d45f8383610a3960201b60201c565b8060025f8282546108e59190610e17565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109929190610f85565b60405180910390a36109ab5f8383610a3e60201b60201c565b5050565b6109bd61043860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166109e16106c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90611083565b60405180910390fd5b565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610abe57607f821691505b602082108103610ad157610ad0610a7a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610af8565b610b3d8683610af8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610b81610b7c610b7784610b55565b610b5e565b610b55565b9050919050565b5f819050919050565b610b9a83610b67565b610bae610ba682610b88565b848454610b04565b825550505050565b5f90565b610bc2610bb6565b610bcd818484610b91565b505050565b5b81811015610bf057610be55f82610bba565b600181019050610bd3565b5050565b601f821115610c3557610c0681610ad7565b610c0f84610ae9565b81016020851015610c1e578190505b610c32610c2a85610ae9565b830182610bd2565b50505b505050565b5f82821c905092915050565b5f610c555f1984600802610c3a565b1980831691505092915050565b5f610c6d8383610c46565b9150826002028217905092915050565b610c8682610a43565b67ffffffffffffffff811115610c9f57610c9e610a4d565b5b610ca98254610aa7565b610cb4828285610bf4565b5f60209050601f831160018114610ce5575f8415610cd3578287015190505b610cdd8582610c62565b865550610d44565b601f198416610cf386610ad7565b5f5b82811015610d1a57848901518255600182019150602085019450602081019050610cf5565b86831015610d375784890151610d33601f891682610c46565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610db082610b55565b9150610dbb83610b55565b925082610dcb57610dca610d4c565b5b828204905092915050565b5f610de082610b55565b9150610deb83610b55565b9250828202610df981610b55565b91508282048414831517610e1057610e0f610d79565b5b5092915050565b5f610e2182610b55565b9150610e2c83610b55565b9250828201905080821115610e4457610e43610d79565b5b92915050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f610eb4602483610e4a565b9150610ebf82610e5a565b604082019050919050565b5f6020820190508181035f830152610ee181610ea8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f610f42602283610e4a565b9150610f4d82610ee8565b604082019050919050565b5f6020820190508181035f830152610f6f81610f36565b9050919050565b610f7f81610b55565b82525050565b5f602082019050610f985f830184610f76565b92915050565b5f8115159050919050565b610fb281610f9e565b82525050565b5f602082019050610fcb5f830184610fa9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611005601f83610e4a565b915061101082610fd1565b602082019050919050565b5f6020820190508181035f83015261103281610ff9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61106d602083610e4a565b915061107882611039565b602082019050919050565b5f6020820190508181035f83015261109a81611061565b9050919050565b60805161578b6110f85f395f8181610dc801528181611fce01528181612077015281816122290152818161232101528181613bc401528181613ca301528181613cca01528181613d600152613d87015261578b5ff3fe608060405260043610610296575f3560e01c80637571336a11610159578063c24a7a8c116100c0578063dd62ed3e11610079578063dd62ed3e146109bd578063e01af92c146109f9578063e2f4560514610a21578063e8078d9414610a4b578063f2fde38b14610a61578063f8b45b0514610a895761029d565b8063c24a7a8c146108c7578063c3f70b52146108ef578063cb96372814610919578063d469801614610941578063d7d1d10e1461096b578063d85ba063146109935761029d565b8063a457c2d711610112578063a457c2d7146107ab578063a9059cbb146107e7578063afa4f3b214610823578063bbc0c7421461084b578063c024666814610875578063c04a54141461089d5761029d565b80637571336a146106c557806375f0a874146106ed578063860a32ec146107175780638a8c523c146107415780638da5cb5b1461075757806395d89b41146107815761029d565b806339509351116101fd5780636a486a8e116101b65780636a486a8e146105e15780636ddd17131461060b57806370a0823114610635578063715018a61461067157806372ac248614610687578063751039fc146106af5761029d565b806339509351146104c757806342966c681461050357806349bd5a5e1461052b5780634fbee193146105555780635d098b381461059157806367243482146105b95761029d565b806318160ddd1161024f57806318160ddd146103a957806318d9ceae146103d357806323b872dd1461040f57806327c8f8351461044b578063296f0a0c14610475578063313ce5671461049d5761029d565b806306fdde03146102a1578063095ea7b3146102cb5780630d075d9c146103075780630f683e901461032f578063155ca7c1146103575780631694505e1461037f5761029d565b3661029d57005b5f80fd5b3480156102ac575f80fd5b506102b5610ab3565b6040516102c29190613ec2565b60405180910390f35b3480156102d6575f80fd5b506102f160048036038101906102ec9190613f77565b610b43565b6040516102fe9190613fcf565b60405180910390f35b348015610312575f80fd5b5061032d60048036038101906103289190613fe8565b610b65565b005b34801561033a575f80fd5b5061035560048036038101906103509190613fe8565b610c05565b005b348015610362575f80fd5b5061037d600480360381019061037891906140c3565b610cae565b005b34801561038a575f80fd5b50610393610dc6565b6040516103a0919061417b565b60405180910390f35b3480156103b4575f80fd5b506103bd610dea565b6040516103ca91906141a3565b60405180910390f35b3480156103de575f80fd5b506103f960048036038101906103f491906141bc565b610df3565b6040516104069190613fcf565b60405180910390f35b34801561041a575f80fd5b50610435600480360381019061043091906141e7565b610e45565b6040516104429190613fcf565b60405180910390f35b348015610456575f80fd5b5061045f610e73565b60405161046c9190614246565b60405180910390f35b348015610480575f80fd5b5061049b600480360381019061049691906141bc565b610e79565b005b3480156104a8575f80fd5b506104b1610fd3565b6040516104be919061427a565b60405180910390f35b3480156104d2575f80fd5b506104ed60048036038101906104e89190613f77565b610fdb565b6040516104fa9190613fcf565b60405180910390f35b34801561050e575f80fd5b5061052960048036038101906105249190614293565b611011565b005b348015610536575f80fd5b5061053f61101e565b60405161054c9190614246565b60405180910390f35b348015610560575f80fd5b5061057b600480360381019061057691906141bc565b611043565b6040516105889190613fcf565b60405180910390f35b34801561059c575f80fd5b506105b760048036038101906105b291906141bc565b611095565b005b3480156105c4575f80fd5b506105df60048036038101906105da9190614313565b6111ef565b005b3480156105ec575f80fd5b506105f56113bd565b60405161060291906141a3565b60405180910390f35b348015610616575f80fd5b5061061f6113c3565b60405161062c9190613fcf565b60405180910390f35b348015610640575f80fd5b5061065b600480360381019061065691906141bc565b6113d6565b60405161066891906141a3565b60405180910390f35b34801561067c575f80fd5b5061068561141b565b005b348015610692575f80fd5b506106ad60048036038101906106a891906141bc565b61142e565b005b3480156106ba575f80fd5b506106c3611588565b005b3480156106d0575f80fd5b506106eb60048036038101906106e69190614391565b6115ba565b005b3480156106f8575f80fd5b50610701611668565b60405161070e9190614246565b60405180910390f35b348015610722575f80fd5b5061072b61168d565b6040516107389190613fcf565b60405180910390f35b34801561074c575f80fd5b506107556116a0565b005b348015610762575f80fd5b5061076b611730565b6040516107789190614246565b60405180910390f35b34801561078c575f80fd5b50610795611758565b6040516107a29190613ec2565b60405180910390f35b3480156107b6575f80fd5b506107d160048036038101906107cc9190613f77565b6117e8565b6040516107de9190613fcf565b60405180910390f35b3480156107f2575f80fd5b5061080d60048036038101906108089190613f77565b61185d565b60405161081a9190613fcf565b60405180910390f35b34801561082e575f80fd5b5061084960048036038101906108449190614293565b61187f565b005b348015610856575f80fd5b5061085f611958565b60405161086c9190613fcf565b60405180910390f35b348015610880575f80fd5b5061089b60048036038101906108969190614391565b61196b565b005b3480156108a8575f80fd5b506108b1611a19565b6040516108be9190614246565b60405180910390f35b3480156108d2575f80fd5b506108ed60048036038101906108e891906143cf565b611a3e565b005b3480156108fa575f80fd5b50610903611b1e565b60405161091091906141a3565b60405180910390f35b348015610924575f80fd5b5061093f600480360381019061093a91906141bc565b611b24565b005b34801561094c575f80fd5b50610955611d84565b6040516109629190614246565b60405180910390f35b348015610976575f80fd5b50610991600480360381019061098c91906140c3565b611da9565b005b34801561099e575f80fd5b506109a7611ec1565b6040516109b491906141a3565b60405180910390f35b3480156109c8575f80fd5b506109e360048036038101906109de919061440d565b611ec7565b6040516109f091906141a3565b60405180910390f35b348015610a04575f80fd5b50610a1f6004803603810190610a1a919061444b565b611f49565b005b348015610a2c575f80fd5b50610a35611f6e565b604051610a4291906141a3565b60405180910390f35b348015610a56575f80fd5b50610a5f611f74565b005b348015610a6c575f80fd5b50610a876004803603810190610a8291906141bc565b6123d8565b005b348015610a94575f80fd5b50610a9d61245a565b604051610aaa91906141a3565b60405180910390f35b606060038054610ac2906144a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610aee906144a3565b8015610b395780601f10610b1057610100808354040283529160200191610b39565b820191905f5260205f20905b815481529060010190602001808311610b1c57829003601f168201915b5050505050905090565b5f80610b4d612460565b9050610b5a818585612467565b600191505092915050565b610b6d61262a565b61012c818385610b7d9190614500565b610b879190614500565b1115610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906145a3565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f54610bf09190614500565b610bfa9190614500565b600e81905550505050565b610c0d61262a565b61012c818385610c1d9190614500565b610c279190614500565b1115610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f906145a3565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354610c909190614500565b610c9a9190614500565b601281905550601254601981905550505050565b610cb661262a565b5f5b83839050811015610dc05781601b5f868685818110610cda57610cd96145c1565b5b9050602002016020810190610cef91906141bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110610d5157610d506145c1565b5b9050602002016020810190610d6691906141bc565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610dab9190613fcf565b60405180910390a28080600101915050610cb8565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f80610e4f612460565b9050610e5c8582856126a8565b610e67858585612733565b60019150509392505050565b61dead81565b610e8161262a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee690614638565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a35050565b5f6012905090565b5f80610fe5612460565b9050611006818585610ff78589611ec7565b6110019190614500565b612467565b600191505092915050565b61101b338261327f565b50565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61109d61262a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614638565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b6111f761262a565b60fa84849050111561123e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611235906146a0565b60405180910390fd5b818190508484905014611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90614708565b60405180910390fd5b5f805b858590508110156112c8578383828181106112a7576112a66145c1565b5b90506020020135826112b99190614500565b91508080600101915050611289565b50806112d3336113d6565b1015611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90614770565b60405180910390fd5b5f5b858590508110156113795761136c33878784818110611338576113376145c1565b5b905060200201602081019061134d91906141bc565b8686858181106113605761135f6145c1565b5b90506020020135613442565b8080600101915050611316565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba9546485859050826040516113ae92919061478e565b60405180910390a15050505050565b60125481565b600a60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61142361262a565b61142c5f6136ae565b565b61143661262a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90614638565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a35050565b61159061262a565b5f600a60166101000a81548160ff0219169083151502179055506115b2610dea565b600c81905550565b6115c261262a565b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928260405161165c9190613fcf565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60169054906101000a900460ff1681565b6116a861262a565b600a60149054906101000a900460ff16156116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef906147ff565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611767906144a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611793906144a3565b80156117de5780601f106117b5576101008083540402835291602001916117de565b820191905f5260205f20905b8154815290600101906020018083116117c157829003601f168201915b5050505050905090565b5f806117f2612460565b90505f6117ff8286611ec7565b905083811015611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b9061488d565b60405180910390fd5b6118518286868403612467565b60019250505092915050565b5f80611867612460565b9050611874818585612733565b600191505092915050565b61188761262a565b620186a06001611895610dea565b61189f91906148ab565b6118a99190614919565b8110156118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e2906149b9565b60405180910390fd5b6103e860056118f8610dea565b61190291906148ab565b61190c9190614919565b81111561194e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194590614a47565b60405180910390fd5b80600d8190555050565b600a60149054906101000a900460ff1681565b61197361262a565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0d9190613fcf565b60405180910390a25050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a4661262a565b6103e86005611a53610dea565b611a5d91906148ab565b611a679190614919565b821015611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa090614ad5565b60405180910390fd5b6103e86005611ab6610dea565b611ac091906148ab565b611aca9190614919565b811015611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614b63565b60405180910390fd5b81600b8190555080600c819055505050565b600b5481565b611b2c61262a565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bce573373ffffffffffffffffffffffffffffffffffffffff1647604051611b8490614bae565b5f6040518083038185875af1925050503d805f8114611bbe576040519150601f19603f3d011682016040523d82523d5f602084013e611bc3565b606091505b505080915050611d80565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c089190614246565b602060405180830381865afa158015611c23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c479190614bd6565b11611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e90614c4b565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cc19190614246565b602060405180830381865afa158015611cdc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d009190614bd6565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611d3d929190614c69565b6020604051808303815f875af1158015611d59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d7d9190614ca4565b50505b5050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611db161262a565b5f5b83839050811015611ebb5781601c5f868685818110611dd557611dd46145c1565b5b9050602002016020810190611dea91906141bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110611e4c57611e4b6145c1565b5b9050602002016020810190611e6191906141bc565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9283604051611ea69190613fcf565b60405180910390a28080600101915050611db3565b50505050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611f5161262a565b80600a60156101000a81548160ff02191690831515021790555050565b600d5481565b611f7c61262a565b600a60149054906101000a900460ff1615611fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc3906147ff565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612035573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120599190614ce3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121029190614ce3565b6040518363ffffffff1660e01b815260040161211f929190614d0e565b6020604051808303815f875af115801561213b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215f9190614ce3565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506121ea3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612467565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612286929190614c69565b6020604051808303815f875af11580156122a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c69190614ca4565b506122f360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613771565b61231f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016115ba565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7194730612366306113d6565b5f80612370611730565b426040518863ffffffff1660e01b815260040161239296959493929190614d6e565b60606040518083038185885af11580156123ae573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906123d39190614dcd565b505050565b6123e061262a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361244e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244590614e8d565b60405180910390fd5b612457816136ae565b50565b600c5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc90614f1b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90614fa9565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261d91906141a3565b60405180910390a3505050565b612632612460565b73ffffffffffffffffffffffffffffffffffffffff16612650611730565b73ffffffffffffffffffffffffffffffffffffffff16146126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90615011565b60405180910390fd5b565b5f6126b38484611ec7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461272d578181101561271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690615079565b60405180910390fd5b61272c8484848403612467565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890615107565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690615195565b60405180910390fd5b5f81036128265761282183835f613442565b61327a565b61282e611730565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561289c575061286c611730565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128d457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129275750600a60179054906101000a900460ff16155b15612dbb57600a60149054906101000a900460ff16612a1b57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129db5750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a11906151fd565b60405180910390fd5b5b600a60169054906101000a900460ff168015612a83575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612ae157600c5481612a95846113d6565b612a9f9190614500565b1115612ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad790615265565b60405180910390fd5b5b601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b7e5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c2557600b54811115612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf906152f3565b60405180910390fd5b600c54612bd4836113d6565b82612bdf9190614500565b1115612c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c179061535b565b60405180910390fd5b612dba565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612cc25750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d1157600b54811115612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d03906153e9565b60405180910390fd5b612db9565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612db857600c54612d6b836113d6565b82612d769190614500565b1115612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae9061535b565b60405180910390fd5b5b5b5b5b5f612dc5306113d6565b90505f600d548210159050808015612de95750600a60159054906101000a900460ff165b8015612e025750600a60179054906101000a900460ff16155b8015612e555750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ea85750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612efb5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f3e576001600a60176101000a81548160ff021916908315150217905550612f2361380f565b5f600a60176101000a81548160ff0219169083151502179055505b5f600a60179054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612fed5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612ff6575f90505b5f811561326157601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561305457505f601254115b1561311f5761308261271061307460125488613ade90919063ffffffff16565b613af390919063ffffffff16565b90506012546015548261309591906148ab565b61309f9190614919565b60185f8282546130af9190614500565b92505081905550601254601354826130c791906148ab565b6130d19190614919565b60165f8282546130e19190614500565b92505081905550601254601454826130f991906148ab565b6131039190614919565b60175f8282546131139190614500565b9250508190555061323e565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561317657505f600e54115b1561323d576131a4612710613196600e5488613ade90919063ffffffff16565b613af390919063ffffffff16565b9050600e54601154826131b791906148ab565b6131c19190614919565b60185f8282546131d19190614500565b92505081905550600e54600f54826131e991906148ab565b6131f39190614919565b60165f8282546132039190614500565b92505081905550600e546010548261321b91906148ab565b6132259190614919565b60175f8282546132359190614500565b925050819055505b5b5f81111561325257613251873083613442565b5b808561325e9190615407565b94505b61326c878787613442565b601954601281905550505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e4906154aa565b60405180910390fd5b6132f8825f83613b08565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561337b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337290615538565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161342a91906141a3565b60405180910390a361343d835f84613b0d565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a790615107565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361351e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351590615195565b60405180910390fd5b613529838383613b08565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156135ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a3906155c6565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161369591906141a3565b60405180910390a36136a8848484613b0d565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f613819306113d6565b90505f60175460165460185461382f9190614500565b6138399190614500565b90505f8083148061384957505f82145b1561385657505050613adc565b600a600d5461386591906148ab565b83111561387e57600a600d5461387b91906148ab565b92505b5f6002836018548661389091906148ab565b61389a9190614919565b6138a49190614919565b90505f6138ba8286613b1290919063ffffffff16565b90505f4790506138c982613b27565b5f6138dd8247613b1290919063ffffffff16565b90505f613907876138f960165485613ade90919063ffffffff16565b613af390919063ffffffff16565b90505f6139318861392360175486613ade90919063ffffffff16565b613af390919063ffffffff16565b90505f8183856139419190615407565b61394b9190615407565b90505f6018819055505f6016819055505f6017819055505f8711801561397057505f81115b156139bd5761397f8782613d5a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516139b4939291906155e4565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a0290614bae565b5f6040518083038185875af1925050503d805f8114613a3c576040519150601f19603f3d011682016040523d82523d5f602084013e613a41565b606091505b50508098505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a8c90614bae565b5f6040518083038185875af1925050503d805f8114613ac6576040519150601f19603f3d011682016040523d82523d5f602084013e613acb565b606091505b505080985050505050505050505050505b565b5f8183613aeb91906148ab565b905092915050565b5f8183613b009190614919565b905092915050565b505050565b505050565b5f8183613b1f9190615407565b905092915050565b5f600267ffffffffffffffff811115613b4357613b42615619565b5b604051908082528060200260200182016040528015613b715781602001602082028036833780820191505090505b50905030815f81518110613b8857613b876145c1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c4f9190614ce3565b81600181518110613c6357613c626145c1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cc8307f000000000000000000000000000000000000000000000000000000000000000084612467565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613d299594939291906156fd565b5f604051808303815f87803b158015613d40575f80fd5b505af1158015613d52573d5f803e3d5ffd5b505050505050565b613d85307f000000000000000000000000000000000000000000000000000000000000000084612467565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613e0a96959493929190614d6e565b60606040518083038185885af1158015613e26573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613e4b9190614dcd565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613e9482613e52565b613e9e8185613e5c565b9350613eae818560208601613e6c565b613eb781613e7a565b840191505092915050565b5f6020820190508181035f830152613eda8184613e8a565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f1382613eea565b9050919050565b613f2381613f09565b8114613f2d575f80fd5b50565b5f81359050613f3e81613f1a565b92915050565b5f819050919050565b613f5681613f44565b8114613f60575f80fd5b50565b5f81359050613f7181613f4d565b92915050565b5f8060408385031215613f8d57613f8c613ee2565b5b5f613f9a85828601613f30565b9250506020613fab85828601613f63565b9150509250929050565b5f8115159050919050565b613fc981613fb5565b82525050565b5f602082019050613fe25f830184613fc0565b92915050565b5f805f60608486031215613fff57613ffe613ee2565b5b5f61400c86828701613f63565b935050602061401d86828701613f63565b925050604061402e86828701613f63565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261405957614058614038565b5b8235905067ffffffffffffffff8111156140765761407561403c565b5b60208301915083602082028301111561409257614091614040565b5b9250929050565b6140a281613fb5565b81146140ac575f80fd5b50565b5f813590506140bd81614099565b92915050565b5f805f604084860312156140da576140d9613ee2565b5b5f84013567ffffffffffffffff8111156140f7576140f6613ee6565b5b61410386828701614044565b93509350506020614116868287016140af565b9150509250925092565b5f819050919050565b5f61414361413e61413984613eea565b614120565b613eea565b9050919050565b5f61415482614129565b9050919050565b5f6141658261414a565b9050919050565b6141758161415b565b82525050565b5f60208201905061418e5f83018461416c565b92915050565b61419d81613f44565b82525050565b5f6020820190506141b65f830184614194565b92915050565b5f602082840312156141d1576141d0613ee2565b5b5f6141de84828501613f30565b91505092915050565b5f805f606084860312156141fe576141fd613ee2565b5b5f61420b86828701613f30565b935050602061421c86828701613f30565b925050604061422d86828701613f63565b9150509250925092565b61424081613f09565b82525050565b5f6020820190506142595f830184614237565b92915050565b5f60ff82169050919050565b6142748161425f565b82525050565b5f60208201905061428d5f83018461426b565b92915050565b5f602082840312156142a8576142a7613ee2565b5b5f6142b584828501613f63565b91505092915050565b5f8083601f8401126142d3576142d2614038565b5b8235905067ffffffffffffffff8111156142f0576142ef61403c565b5b60208301915083602082028301111561430c5761430b614040565b5b9250929050565b5f805f806040858703121561432b5761432a613ee2565b5b5f85013567ffffffffffffffff81111561434857614347613ee6565b5b61435487828801614044565b9450945050602085013567ffffffffffffffff81111561437757614376613ee6565b5b614383878288016142be565b925092505092959194509250565b5f80604083850312156143a7576143a6613ee2565b5b5f6143b485828601613f30565b92505060206143c5858286016140af565b9150509250929050565b5f80604083850312156143e5576143e4613ee2565b5b5f6143f285828601613f63565b925050602061440385828601613f63565b9150509250929050565b5f806040838503121561442357614422613ee2565b5b5f61443085828601613f30565b925050602061444185828601613f30565b9150509250929050565b5f602082840312156144605761445f613ee2565b5b5f61446d848285016140af565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806144ba57607f821691505b6020821081036144cd576144cc614476565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61450a82613f44565b915061451583613f44565b925082820190508082111561452d5761452c6144d3565b5b92915050565b7f45524332303a204d757374206b6565702066656573206174203325206f72206c5f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458d602383613e5c565b915061459882614533565b604082019050919050565b5f6020820190508181035f8301526145ba81614581565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a20416464726573732030000000000000000000000000000000005f82015250565b5f614622601083613e5c565b915061462d826145ee565b602082019050919050565b5f6020820190508181035f83015261464f81614616565b9050919050565b7f4d6f7265207468616e203235302077616c6c65747300000000000000000000005f82015250565b5f61468a601583613e5c565b915061469582614656565b602082019050919050565b5f6020820190508181035f8301526146b78161467e565b9050919050565b7f4c697374206c656e677468206d69736d617463680000000000000000000000005f82015250565b5f6146f2601483613e5c565b91506146fd826146be565b602082019050919050565b5f6020820190508181035f83015261471f816146e6565b9050919050565b7f546f6b656e2062616c616e636520746f6f206c6f7700000000000000000000005f82015250565b5f61475a601583613e5c565b915061476582614726565b602082019050919050565b5f6020820190508181035f8301526147878161474e565b9050919050565b5f6040820190506147a15f830185614194565b6147ae6020830184614194565b9392505050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f6147e9601783613e5c565b91506147f4826147b5565b602082019050919050565b5f6020820190508181035f830152614816816147dd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614877602583613e5c565b91506148828261481d565b604082019050919050565b5f6020820190508181035f8301526148a48161486b565b9050919050565b5f6148b582613f44565b91506148c083613f44565b92508282026148ce81613f44565b915082820484148315176148e5576148e46144d3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61492382613f44565b915061492e83613f44565b92508261493e5761493d6148ec565b5b828204905092915050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f775f8201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b5f6149a3603c83613e5c565b91506149ae82614949565b604082019050919050565b5f6020820190508181035f8301526149d081614997565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206869675f8201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000602082015250565b5f614a31603b83613e5c565b9150614a3c826149d7565b604082019050919050565b5f6020820190508181035f830152614a5e81614a25565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f77657220745f8201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b5f614abf602883613e5c565b9150614aca82614a65565b604082019050919050565b5f6020820190508181035f830152614aec81614ab3565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f77655f8201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b5f614b4d602b83613e5c565b9150614b5882614af3565b604082019050919050565b5f6020820190508181035f830152614b7a81614b41565b9050919050565b5f81905092915050565b50565b5f614b995f83614b81565b9150614ba482614b8b565b5f82019050919050565b5f614bb882614b8e565b9150819050919050565b5f81519050614bd081613f4d565b92915050565b5f60208284031215614beb57614bea613ee2565b5b5f614bf884828501614bc2565b91505092915050565b7f4e6f20746f6b656e7300000000000000000000000000000000000000000000005f82015250565b5f614c35600983613e5c565b9150614c4082614c01565b602082019050919050565b5f6020820190508181035f830152614c6281614c29565b9050919050565b5f604082019050614c7c5f830185614237565b614c896020830184614194565b9392505050565b5f81519050614c9e81614099565b92915050565b5f60208284031215614cb957614cb8613ee2565b5b5f614cc684828501614c90565b91505092915050565b5f81519050614cdd81613f1a565b92915050565b5f60208284031215614cf857614cf7613ee2565b5b5f614d0584828501614ccf565b91505092915050565b5f604082019050614d215f830185614237565b614d2e6020830184614237565b9392505050565b5f819050919050565b5f614d58614d53614d4e84614d35565b614120565b613f44565b9050919050565b614d6881614d3e565b82525050565b5f60c082019050614d815f830189614237565b614d8e6020830188614194565b614d9b6040830187614d5f565b614da86060830186614d5f565b614db56080830185614237565b614dc260a0830184614194565b979650505050505050565b5f805f60608486031215614de457614de3613ee2565b5b5f614df186828701614bc2565b9350506020614e0286828701614bc2565b9250506040614e1386828701614bc2565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614e77602683613e5c565b9150614e8282614e1d565b604082019050919050565b5f6020820190508181035f830152614ea481614e6b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614f05602483613e5c565b9150614f1082614eab565b604082019050919050565b5f6020820190508181035f830152614f3281614ef9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614f93602283613e5c565b9150614f9e82614f39565b604082019050919050565b5f6020820190508181035f830152614fc081614f87565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614ffb602083613e5c565b915061500682614fc7565b602082019050919050565b5f6020820190508181035f83015261502881614fef565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f615063601d83613e5c565b915061506e8261502f565b602082019050919050565b5f6020820190508181035f83015261509081615057565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6150f1602583613e5c565b91506150fc82615097565b604082019050919050565b5f6020820190508181035f83015261511e816150e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61517f602383613e5c565b915061518a82615125565b604082019050919050565b5f6020820190508181035f8301526151ac81615173565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e0000005f82015250565b5f6151e7601d83613e5c565b91506151f2826151b3565b602082019050919050565b5f6020820190508181035f830152615214816151db565b9050919050565b7f466f7262696400000000000000000000000000000000000000000000000000005f82015250565b5f61524f600683613e5c565b915061525a8261521b565b602082019050919050565b5f6020820190508181035f83015261527c81615243565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b5f6152dd603683613e5c565b91506152e882615283565b604082019050919050565b5f6020820190508181035f83015261530a816152d1565b9050919050565b7f45524332303a204d61782077616c6c65742065786365656465640000000000005f82015250565b5f615345601a83613e5c565b915061535082615311565b602082019050919050565b5f6020820190508181035f83015261537281615339565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e7420657863655f8201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b5f6153d3603783613e5c565b91506153de82615379565b604082019050919050565b5f6020820190508181035f830152615400816153c7565b9050919050565b5f61541182613f44565b915061541c83613f44565b9250828203905081811115615434576154336144d3565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f615494602183613e5c565b915061549f8261543a565b604082019050919050565b5f6020820190508181035f8301526154c181615488565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f615522602283613e5c565b915061552d826154c8565b604082019050919050565b5f6020820190508181035f83015261554f81615516565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6155b0602683613e5c565b91506155bb82615556565b604082019050919050565b5f6020820190508181035f8301526155dd816155a4565b9050919050565b5f6060820190506155f75f830186614194565b6156046020830185614194565b6156116040830184614194565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61567881613f09565b82525050565b5f615689838361566f565b60208301905092915050565b5f602082019050919050565b5f6156ab82615646565b6156b58185615650565b93506156c083615660565b805f5b838110156156f05781516156d7888261567e565b97506156e283615695565b9250506001810190506156c3565b5085935050505092915050565b5f60a0820190506157105f830188614194565b61571d6020830187614d5f565b818103604083015261572f81866156a1565b905061573e6060830185614237565b61574b6080830184614194565b969550505050505056fea26469706673582212205953aa96eac48adb7896636bd97ab537a0e74821d553da64dc90f614e799d1d864736f6c63430008190033

Deployed Bytecode

0x608060405260043610610296575f3560e01c80637571336a11610159578063c24a7a8c116100c0578063dd62ed3e11610079578063dd62ed3e146109bd578063e01af92c146109f9578063e2f4560514610a21578063e8078d9414610a4b578063f2fde38b14610a61578063f8b45b0514610a895761029d565b8063c24a7a8c146108c7578063c3f70b52146108ef578063cb96372814610919578063d469801614610941578063d7d1d10e1461096b578063d85ba063146109935761029d565b8063a457c2d711610112578063a457c2d7146107ab578063a9059cbb146107e7578063afa4f3b214610823578063bbc0c7421461084b578063c024666814610875578063c04a54141461089d5761029d565b80637571336a146106c557806375f0a874146106ed578063860a32ec146107175780638a8c523c146107415780638da5cb5b1461075757806395d89b41146107815761029d565b806339509351116101fd5780636a486a8e116101b65780636a486a8e146105e15780636ddd17131461060b57806370a0823114610635578063715018a61461067157806372ac248614610687578063751039fc146106af5761029d565b806339509351146104c757806342966c681461050357806349bd5a5e1461052b5780634fbee193146105555780635d098b381461059157806367243482146105b95761029d565b806318160ddd1161024f57806318160ddd146103a957806318d9ceae146103d357806323b872dd1461040f57806327c8f8351461044b578063296f0a0c14610475578063313ce5671461049d5761029d565b806306fdde03146102a1578063095ea7b3146102cb5780630d075d9c146103075780630f683e901461032f578063155ca7c1146103575780631694505e1461037f5761029d565b3661029d57005b5f80fd5b3480156102ac575f80fd5b506102b5610ab3565b6040516102c29190613ec2565b60405180910390f35b3480156102d6575f80fd5b506102f160048036038101906102ec9190613f77565b610b43565b6040516102fe9190613fcf565b60405180910390f35b348015610312575f80fd5b5061032d60048036038101906103289190613fe8565b610b65565b005b34801561033a575f80fd5b5061035560048036038101906103509190613fe8565b610c05565b005b348015610362575f80fd5b5061037d600480360381019061037891906140c3565b610cae565b005b34801561038a575f80fd5b50610393610dc6565b6040516103a0919061417b565b60405180910390f35b3480156103b4575f80fd5b506103bd610dea565b6040516103ca91906141a3565b60405180910390f35b3480156103de575f80fd5b506103f960048036038101906103f491906141bc565b610df3565b6040516104069190613fcf565b60405180910390f35b34801561041a575f80fd5b50610435600480360381019061043091906141e7565b610e45565b6040516104429190613fcf565b60405180910390f35b348015610456575f80fd5b5061045f610e73565b60405161046c9190614246565b60405180910390f35b348015610480575f80fd5b5061049b600480360381019061049691906141bc565b610e79565b005b3480156104a8575f80fd5b506104b1610fd3565b6040516104be919061427a565b60405180910390f35b3480156104d2575f80fd5b506104ed60048036038101906104e89190613f77565b610fdb565b6040516104fa9190613fcf565b60405180910390f35b34801561050e575f80fd5b5061052960048036038101906105249190614293565b611011565b005b348015610536575f80fd5b5061053f61101e565b60405161054c9190614246565b60405180910390f35b348015610560575f80fd5b5061057b600480360381019061057691906141bc565b611043565b6040516105889190613fcf565b60405180910390f35b34801561059c575f80fd5b506105b760048036038101906105b291906141bc565b611095565b005b3480156105c4575f80fd5b506105df60048036038101906105da9190614313565b6111ef565b005b3480156105ec575f80fd5b506105f56113bd565b60405161060291906141a3565b60405180910390f35b348015610616575f80fd5b5061061f6113c3565b60405161062c9190613fcf565b60405180910390f35b348015610640575f80fd5b5061065b600480360381019061065691906141bc565b6113d6565b60405161066891906141a3565b60405180910390f35b34801561067c575f80fd5b5061068561141b565b005b348015610692575f80fd5b506106ad60048036038101906106a891906141bc565b61142e565b005b3480156106ba575f80fd5b506106c3611588565b005b3480156106d0575f80fd5b506106eb60048036038101906106e69190614391565b6115ba565b005b3480156106f8575f80fd5b50610701611668565b60405161070e9190614246565b60405180910390f35b348015610722575f80fd5b5061072b61168d565b6040516107389190613fcf565b60405180910390f35b34801561074c575f80fd5b506107556116a0565b005b348015610762575f80fd5b5061076b611730565b6040516107789190614246565b60405180910390f35b34801561078c575f80fd5b50610795611758565b6040516107a29190613ec2565b60405180910390f35b3480156107b6575f80fd5b506107d160048036038101906107cc9190613f77565b6117e8565b6040516107de9190613fcf565b60405180910390f35b3480156107f2575f80fd5b5061080d60048036038101906108089190613f77565b61185d565b60405161081a9190613fcf565b60405180910390f35b34801561082e575f80fd5b5061084960048036038101906108449190614293565b61187f565b005b348015610856575f80fd5b5061085f611958565b60405161086c9190613fcf565b60405180910390f35b348015610880575f80fd5b5061089b60048036038101906108969190614391565b61196b565b005b3480156108a8575f80fd5b506108b1611a19565b6040516108be9190614246565b60405180910390f35b3480156108d2575f80fd5b506108ed60048036038101906108e891906143cf565b611a3e565b005b3480156108fa575f80fd5b50610903611b1e565b60405161091091906141a3565b60405180910390f35b348015610924575f80fd5b5061093f600480360381019061093a91906141bc565b611b24565b005b34801561094c575f80fd5b50610955611d84565b6040516109629190614246565b60405180910390f35b348015610976575f80fd5b50610991600480360381019061098c91906140c3565b611da9565b005b34801561099e575f80fd5b506109a7611ec1565b6040516109b491906141a3565b60405180910390f35b3480156109c8575f80fd5b506109e360048036038101906109de919061440d565b611ec7565b6040516109f091906141a3565b60405180910390f35b348015610a04575f80fd5b50610a1f6004803603810190610a1a919061444b565b611f49565b005b348015610a2c575f80fd5b50610a35611f6e565b604051610a4291906141a3565b60405180910390f35b348015610a56575f80fd5b50610a5f611f74565b005b348015610a6c575f80fd5b50610a876004803603810190610a8291906141bc565b6123d8565b005b348015610a94575f80fd5b50610a9d61245a565b604051610aaa91906141a3565b60405180910390f35b606060038054610ac2906144a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610aee906144a3565b8015610b395780601f10610b1057610100808354040283529160200191610b39565b820191905f5260205f20905b815481529060010190602001808311610b1c57829003601f168201915b5050505050905090565b5f80610b4d612460565b9050610b5a818585612467565b600191505092915050565b610b6d61262a565b61012c818385610b7d9190614500565b610b879190614500565b1115610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906145a3565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f54610bf09190614500565b610bfa9190614500565b600e81905550505050565b610c0d61262a565b61012c818385610c1d9190614500565b610c279190614500565b1115610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f906145a3565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354610c909190614500565b610c9a9190614500565b601281905550601254601981905550505050565b610cb661262a565b5f5b83839050811015610dc05781601b5f868685818110610cda57610cd96145c1565b5b9050602002016020810190610cef91906141bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110610d5157610d506145c1565b5b9050602002016020810190610d6691906141bc565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610dab9190613fcf565b60405180910390a28080600101915050610cb8565b50505050565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2481565b5f600254905090565b5f601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f80610e4f612460565b9050610e5c8582856126a8565b610e67858585612733565b60019150509392505050565b61dead81565b610e8161262a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee690614638565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a35050565b5f6012905090565b5f80610fe5612460565b9050611006818585610ff78589611ec7565b6110019190614500565b612467565b600191505092915050565b61101b338261327f565b50565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61109d61262a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614638565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b6111f761262a565b60fa84849050111561123e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611235906146a0565b60405180910390fd5b818190508484905014611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90614708565b60405180910390fd5b5f805b858590508110156112c8578383828181106112a7576112a66145c1565b5b90506020020135826112b99190614500565b91508080600101915050611289565b50806112d3336113d6565b1015611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90614770565b60405180910390fd5b5f5b858590508110156113795761136c33878784818110611338576113376145c1565b5b905060200201602081019061134d91906141bc565b8686858181106113605761135f6145c1565b5b90506020020135613442565b8080600101915050611316565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba9546485859050826040516113ae92919061478e565b60405180910390a15050505050565b60125481565b600a60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61142361262a565b61142c5f6136ae565b565b61143661262a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90614638565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a35050565b61159061262a565b5f600a60166101000a81548160ff0219169083151502179055506115b2610dea565b600c81905550565b6115c261262a565b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928260405161165c9190613fcf565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60169054906101000a900460ff1681565b6116a861262a565b600a60149054906101000a900460ff16156116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef906147ff565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611767906144a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611793906144a3565b80156117de5780601f106117b5576101008083540402835291602001916117de565b820191905f5260205f20905b8154815290600101906020018083116117c157829003601f168201915b5050505050905090565b5f806117f2612460565b90505f6117ff8286611ec7565b905083811015611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b9061488d565b60405180910390fd5b6118518286868403612467565b60019250505092915050565b5f80611867612460565b9050611874818585612733565b600191505092915050565b61188761262a565b620186a06001611895610dea565b61189f91906148ab565b6118a99190614919565b8110156118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e2906149b9565b60405180910390fd5b6103e860056118f8610dea565b61190291906148ab565b61190c9190614919565b81111561194e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194590614a47565b60405180910390fd5b80600d8190555050565b600a60149054906101000a900460ff1681565b61197361262a565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0d9190613fcf565b60405180910390a25050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a4661262a565b6103e86005611a53610dea565b611a5d91906148ab565b611a679190614919565b821015611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa090614ad5565b60405180910390fd5b6103e86005611ab6610dea565b611ac091906148ab565b611aca9190614919565b811015611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614b63565b60405180910390fd5b81600b8190555080600c819055505050565b600b5481565b611b2c61262a565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bce573373ffffffffffffffffffffffffffffffffffffffff1647604051611b8490614bae565b5f6040518083038185875af1925050503d805f8114611bbe576040519150601f19603f3d011682016040523d82523d5f602084013e611bc3565b606091505b505080915050611d80565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c089190614246565b602060405180830381865afa158015611c23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c479190614bd6565b11611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e90614c4b565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cc19190614246565b602060405180830381865afa158015611cdc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d009190614bd6565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611d3d929190614c69565b6020604051808303815f875af1158015611d59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d7d9190614ca4565b50505b5050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611db161262a565b5f5b83839050811015611ebb5781601c5f868685818110611dd557611dd46145c1565b5b9050602002016020810190611dea91906141bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110611e4c57611e4b6145c1565b5b9050602002016020810190611e6191906141bc565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9283604051611ea69190613fcf565b60405180910390a28080600101915050611db3565b50505050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611f5161262a565b80600a60156101000a81548160ff02191690831515021790555050565b600d5481565b611f7c61262a565b600a60149054906101000a900460ff1615611fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc3906147ff565b60405180910390fd5b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612035573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120599190614ce3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121029190614ce3565b6040518363ffffffff1660e01b815260040161211f929190614d0e565b6020604051808303815f875af115801561213b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215f9190614ce3565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506121ea3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612467565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612286929190614c69565b6020604051808303815f875af11580156122a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c69190614ca4565b506122f360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613771565b61231f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016115ba565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663f305d7194730612366306113d6565b5f80612370611730565b426040518863ffffffff1660e01b815260040161239296959493929190614d6e565b60606040518083038185885af11580156123ae573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906123d39190614dcd565b505050565b6123e061262a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361244e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244590614e8d565b60405180910390fd5b612457816136ae565b50565b600c5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc90614f1b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90614fa9565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261d91906141a3565b60405180910390a3505050565b612632612460565b73ffffffffffffffffffffffffffffffffffffffff16612650611730565b73ffffffffffffffffffffffffffffffffffffffff16146126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90615011565b60405180910390fd5b565b5f6126b38484611ec7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461272d578181101561271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690615079565b60405180910390fd5b61272c8484848403612467565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890615107565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690615195565b60405180910390fd5b5f81036128265761282183835f613442565b61327a565b61282e611730565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561289c575061286c611730565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128d457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129275750600a60179054906101000a900460ff16155b15612dbb57600a60149054906101000a900460ff16612a1b57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129db5750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a11906151fd565b60405180910390fd5b5b600a60169054906101000a900460ff168015612a83575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612ae157600c5481612a95846113d6565b612a9f9190614500565b1115612ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad790615265565b60405180910390fd5b5b601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b7e5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c2557600b54811115612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf906152f3565b60405180910390fd5b600c54612bd4836113d6565b82612bdf9190614500565b1115612c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c179061535b565b60405180910390fd5b612dba565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612cc25750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d1157600b54811115612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d03906153e9565b60405180910390fd5b612db9565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612db857600c54612d6b836113d6565b82612d769190614500565b1115612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae9061535b565b60405180910390fd5b5b5b5b5b5f612dc5306113d6565b90505f600d548210159050808015612de95750600a60159054906101000a900460ff165b8015612e025750600a60179054906101000a900460ff16155b8015612e555750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ea85750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612efb5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f3e576001600a60176101000a81548160ff021916908315150217905550612f2361380f565b5f600a60176101000a81548160ff0219169083151502179055505b5f600a60179054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612fed5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612ff6575f90505b5f811561326157601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561305457505f601254115b1561311f5761308261271061307460125488613ade90919063ffffffff16565b613af390919063ffffffff16565b90506012546015548261309591906148ab565b61309f9190614919565b60185f8282546130af9190614500565b92505081905550601254601354826130c791906148ab565b6130d19190614919565b60165f8282546130e19190614500565b92505081905550601254601454826130f991906148ab565b6131039190614919565b60175f8282546131139190614500565b9250508190555061323e565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561317657505f600e54115b1561323d576131a4612710613196600e5488613ade90919063ffffffff16565b613af390919063ffffffff16565b9050600e54601154826131b791906148ab565b6131c19190614919565b60185f8282546131d19190614500565b92505081905550600e54600f54826131e991906148ab565b6131f39190614919565b60165f8282546132039190614500565b92505081905550600e546010548261321b91906148ab565b6132259190614919565b60175f8282546132359190614500565b925050819055505b5b5f81111561325257613251873083613442565b5b808561325e9190615407565b94505b61326c878787613442565b601954601281905550505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e4906154aa565b60405180910390fd5b6132f8825f83613b08565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561337b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337290615538565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161342a91906141a3565b60405180910390a361343d835f84613b0d565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a790615107565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361351e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351590615195565b60405180910390fd5b613529838383613b08565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156135ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a3906155c6565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161369591906141a3565b60405180910390a36136a8848484613b0d565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f613819306113d6565b90505f60175460165460185461382f9190614500565b6138399190614500565b90505f8083148061384957505f82145b1561385657505050613adc565b600a600d5461386591906148ab565b83111561387e57600a600d5461387b91906148ab565b92505b5f6002836018548661389091906148ab565b61389a9190614919565b6138a49190614919565b90505f6138ba8286613b1290919063ffffffff16565b90505f4790506138c982613b27565b5f6138dd8247613b1290919063ffffffff16565b90505f613907876138f960165485613ade90919063ffffffff16565b613af390919063ffffffff16565b90505f6139318861392360175486613ade90919063ffffffff16565b613af390919063ffffffff16565b90505f8183856139419190615407565b61394b9190615407565b90505f6018819055505f6016819055505f6017819055505f8711801561397057505f81115b156139bd5761397f8782613d5a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516139b4939291906155e4565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a0290614bae565b5f6040518083038185875af1925050503d805f8114613a3c576040519150601f19603f3d011682016040523d82523d5f602084013e613a41565b606091505b50508098505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a8c90614bae565b5f6040518083038185875af1925050503d805f8114613ac6576040519150601f19603f3d011682016040523d82523d5f602084013e613acb565b606091505b505080985050505050505050505050505b565b5f8183613aeb91906148ab565b905092915050565b5f8183613b009190614919565b905092915050565b505050565b505050565b5f8183613b1f9190615407565b905092915050565b5f600267ffffffffffffffff811115613b4357613b42615619565b5b604051908082528060200260200182016040528015613b715781602001602082028036833780820191505090505b50905030815f81518110613b8857613b876145c1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c4f9190614ce3565b81600181518110613c6357613c626145c1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cc8307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2484612467565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613d299594939291906156fd565b5f604051808303815f87803b158015613d40575f80fd5b505af1158015613d52573d5f803e3d5ffd5b505050505050565b613d85307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2484612467565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613e0a96959493929190614d6e565b60606040518083038185885af1158015613e26573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613e4b9190614dcd565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613e9482613e52565b613e9e8185613e5c565b9350613eae818560208601613e6c565b613eb781613e7a565b840191505092915050565b5f6020820190508181035f830152613eda8184613e8a565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f1382613eea565b9050919050565b613f2381613f09565b8114613f2d575f80fd5b50565b5f81359050613f3e81613f1a565b92915050565b5f819050919050565b613f5681613f44565b8114613f60575f80fd5b50565b5f81359050613f7181613f4d565b92915050565b5f8060408385031215613f8d57613f8c613ee2565b5b5f613f9a85828601613f30565b9250506020613fab85828601613f63565b9150509250929050565b5f8115159050919050565b613fc981613fb5565b82525050565b5f602082019050613fe25f830184613fc0565b92915050565b5f805f60608486031215613fff57613ffe613ee2565b5b5f61400c86828701613f63565b935050602061401d86828701613f63565b925050604061402e86828701613f63565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261405957614058614038565b5b8235905067ffffffffffffffff8111156140765761407561403c565b5b60208301915083602082028301111561409257614091614040565b5b9250929050565b6140a281613fb5565b81146140ac575f80fd5b50565b5f813590506140bd81614099565b92915050565b5f805f604084860312156140da576140d9613ee2565b5b5f84013567ffffffffffffffff8111156140f7576140f6613ee6565b5b61410386828701614044565b93509350506020614116868287016140af565b9150509250925092565b5f819050919050565b5f61414361413e61413984613eea565b614120565b613eea565b9050919050565b5f61415482614129565b9050919050565b5f6141658261414a565b9050919050565b6141758161415b565b82525050565b5f60208201905061418e5f83018461416c565b92915050565b61419d81613f44565b82525050565b5f6020820190506141b65f830184614194565b92915050565b5f602082840312156141d1576141d0613ee2565b5b5f6141de84828501613f30565b91505092915050565b5f805f606084860312156141fe576141fd613ee2565b5b5f61420b86828701613f30565b935050602061421c86828701613f30565b925050604061422d86828701613f63565b9150509250925092565b61424081613f09565b82525050565b5f6020820190506142595f830184614237565b92915050565b5f60ff82169050919050565b6142748161425f565b82525050565b5f60208201905061428d5f83018461426b565b92915050565b5f602082840312156142a8576142a7613ee2565b5b5f6142b584828501613f63565b91505092915050565b5f8083601f8401126142d3576142d2614038565b5b8235905067ffffffffffffffff8111156142f0576142ef61403c565b5b60208301915083602082028301111561430c5761430b614040565b5b9250929050565b5f805f806040858703121561432b5761432a613ee2565b5b5f85013567ffffffffffffffff81111561434857614347613ee6565b5b61435487828801614044565b9450945050602085013567ffffffffffffffff81111561437757614376613ee6565b5b614383878288016142be565b925092505092959194509250565b5f80604083850312156143a7576143a6613ee2565b5b5f6143b485828601613f30565b92505060206143c5858286016140af565b9150509250929050565b5f80604083850312156143e5576143e4613ee2565b5b5f6143f285828601613f63565b925050602061440385828601613f63565b9150509250929050565b5f806040838503121561442357614422613ee2565b5b5f61443085828601613f30565b925050602061444185828601613f30565b9150509250929050565b5f602082840312156144605761445f613ee2565b5b5f61446d848285016140af565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806144ba57607f821691505b6020821081036144cd576144cc614476565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61450a82613f44565b915061451583613f44565b925082820190508082111561452d5761452c6144d3565b5b92915050565b7f45524332303a204d757374206b6565702066656573206174203325206f72206c5f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458d602383613e5c565b915061459882614533565b604082019050919050565b5f6020820190508181035f8301526145ba81614581565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a20416464726573732030000000000000000000000000000000005f82015250565b5f614622601083613e5c565b915061462d826145ee565b602082019050919050565b5f6020820190508181035f83015261464f81614616565b9050919050565b7f4d6f7265207468616e203235302077616c6c65747300000000000000000000005f82015250565b5f61468a601583613e5c565b915061469582614656565b602082019050919050565b5f6020820190508181035f8301526146b78161467e565b9050919050565b7f4c697374206c656e677468206d69736d617463680000000000000000000000005f82015250565b5f6146f2601483613e5c565b91506146fd826146be565b602082019050919050565b5f6020820190508181035f83015261471f816146e6565b9050919050565b7f546f6b656e2062616c616e636520746f6f206c6f7700000000000000000000005f82015250565b5f61475a601583613e5c565b915061476582614726565b602082019050919050565b5f6020820190508181035f8301526147878161474e565b9050919050565b5f6040820190506147a15f830185614194565b6147ae6020830184614194565b9392505050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f6147e9601783613e5c565b91506147f4826147b5565b602082019050919050565b5f6020820190508181035f830152614816816147dd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614877602583613e5c565b91506148828261481d565b604082019050919050565b5f6020820190508181035f8301526148a48161486b565b9050919050565b5f6148b582613f44565b91506148c083613f44565b92508282026148ce81613f44565b915082820484148315176148e5576148e46144d3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61492382613f44565b915061492e83613f44565b92508261493e5761493d6148ec565b5b828204905092915050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f775f8201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b5f6149a3603c83613e5c565b91506149ae82614949565b604082019050919050565b5f6020820190508181035f8301526149d081614997565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206869675f8201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000602082015250565b5f614a31603b83613e5c565b9150614a3c826149d7565b604082019050919050565b5f6020820190508181035f830152614a5e81614a25565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f77657220745f8201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b5f614abf602883613e5c565b9150614aca82614a65565b604082019050919050565b5f6020820190508181035f830152614aec81614ab3565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f77655f8201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b5f614b4d602b83613e5c565b9150614b5882614af3565b604082019050919050565b5f6020820190508181035f830152614b7a81614b41565b9050919050565b5f81905092915050565b50565b5f614b995f83614b81565b9150614ba482614b8b565b5f82019050919050565b5f614bb882614b8e565b9150819050919050565b5f81519050614bd081613f4d565b92915050565b5f60208284031215614beb57614bea613ee2565b5b5f614bf884828501614bc2565b91505092915050565b7f4e6f20746f6b656e7300000000000000000000000000000000000000000000005f82015250565b5f614c35600983613e5c565b9150614c4082614c01565b602082019050919050565b5f6020820190508181035f830152614c6281614c29565b9050919050565b5f604082019050614c7c5f830185614237565b614c896020830184614194565b9392505050565b5f81519050614c9e81614099565b92915050565b5f60208284031215614cb957614cb8613ee2565b5b5f614cc684828501614c90565b91505092915050565b5f81519050614cdd81613f1a565b92915050565b5f60208284031215614cf857614cf7613ee2565b5b5f614d0584828501614ccf565b91505092915050565b5f604082019050614d215f830185614237565b614d2e6020830184614237565b9392505050565b5f819050919050565b5f614d58614d53614d4e84614d35565b614120565b613f44565b9050919050565b614d6881614d3e565b82525050565b5f60c082019050614d815f830189614237565b614d8e6020830188614194565b614d9b6040830187614d5f565b614da86060830186614d5f565b614db56080830185614237565b614dc260a0830184614194565b979650505050505050565b5f805f60608486031215614de457614de3613ee2565b5b5f614df186828701614bc2565b9350506020614e0286828701614bc2565b9250506040614e1386828701614bc2565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614e77602683613e5c565b9150614e8282614e1d565b604082019050919050565b5f6020820190508181035f830152614ea481614e6b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614f05602483613e5c565b9150614f1082614eab565b604082019050919050565b5f6020820190508181035f830152614f3281614ef9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614f93602283613e5c565b9150614f9e82614f39565b604082019050919050565b5f6020820190508181035f830152614fc081614f87565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614ffb602083613e5c565b915061500682614fc7565b602082019050919050565b5f6020820190508181035f83015261502881614fef565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f615063601d83613e5c565b915061506e8261502f565b602082019050919050565b5f6020820190508181035f83015261509081615057565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6150f1602583613e5c565b91506150fc82615097565b604082019050919050565b5f6020820190508181035f83015261511e816150e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61517f602383613e5c565b915061518a82615125565b604082019050919050565b5f6020820190508181035f8301526151ac81615173565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e0000005f82015250565b5f6151e7601d83613e5c565b91506151f2826151b3565b602082019050919050565b5f6020820190508181035f830152615214816151db565b9050919050565b7f466f7262696400000000000000000000000000000000000000000000000000005f82015250565b5f61524f600683613e5c565b915061525a8261521b565b602082019050919050565b5f6020820190508181035f83015261527c81615243565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b5f6152dd603683613e5c565b91506152e882615283565b604082019050919050565b5f6020820190508181035f83015261530a816152d1565b9050919050565b7f45524332303a204d61782077616c6c65742065786365656465640000000000005f82015250565b5f615345601a83613e5c565b915061535082615311565b602082019050919050565b5f6020820190508181035f83015261537281615339565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e7420657863655f8201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b5f6153d3603783613e5c565b91506153de82615379565b604082019050919050565b5f6020820190508181035f830152615400816153c7565b9050919050565b5f61541182613f44565b915061541c83613f44565b9250828203905081811115615434576154336144d3565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f615494602183613e5c565b915061549f8261543a565b604082019050919050565b5f6020820190508181035f8301526154c181615488565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f615522602283613e5c565b915061552d826154c8565b604082019050919050565b5f6020820190508181035f83015261554f81615516565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6155b0602683613e5c565b91506155bb82615556565b604082019050919050565b5f6020820190508181035f8301526155dd816155a4565b9050919050565b5f6060820190506155f75f830186614194565b6156046020830185614194565b6156116040830184614194565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61567881613f09565b82525050565b5f615689838361566f565b60208301905092915050565b5f602082019050919050565b5f6156ab82615646565b6156b58185615650565b93506156c083615660565b805f5b838110156156f05781516156d7888261567e565b97506156e283615695565b9250506001810190506156c3565b5085935050505092915050565b5f60a0820190506157105f830188614194565b61571d6020830187614d5f565b818103604083015261572f81866156a1565b905061573e6060830185614237565b61574b6080830184614194565b969550505050505056fea26469706673582212205953aa96eac48adb7896636bd97ab537a0e74821d553da64dc90f614e799d1d864736f6c63430008190033

Deployed Bytecode Sourcemap

37748:18352:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19631:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22132:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44207:515;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44730:601;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47032:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37847:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20760:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47812:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22954:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38055:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45983:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20602:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23658:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41733:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37905:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47998:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45339:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55128:969;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38507:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38149:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20931:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13011:103;;;;;;;;;;;;;:::i;:::-;;45653:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42851:112;;;;;;;;;;;;;:::i;:::-;;46297:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37942:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38179:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42672:171;;;;;;;;;;;;;:::i;:::-;;12370:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19850:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24431:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21314:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43262:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38117:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46851:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37979:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43695:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38243:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47336:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38018:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46523:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38352:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21611:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43163:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38310:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41822:842;;;;;;;;;;;;;:::i;:::-;;13269:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38279:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19631:100;19685:13;19718:5;19711:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19631:100;:::o;22132:242::-;22251:4;22273:13;22289:12;:10;:12::i;:::-;22273:28;;22312:32;22321:5;22328:7;22337:6;22312:8;:32::i;:::-;22362:4;22355:11;;;22132:242;;;;:::o;44207:515::-;12256:13;:11;:13::i;:::-;44433:3:::1;44416:13;44398:15;44382:13;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:54;;44360:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;44529:13;44510:16;:32;;;;44574:15;44553:18;:36;;;;44619:13;44600:16;:32;;;;44698:16;;44677:18;;44658:16;;:37;;;;:::i;:::-;:56;;;;:::i;:::-;44643:12;:71;;;;44207:515:::0;;;:::o;44730:601::-;12256:13;:11;:13::i;:::-;44957:3:::1;44940:13;44922:15;44906:13;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:54;;44884:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;45054:13;45034:17;:33;;;;45100:15;45078:19;:37;;;;45146:13;45126:17;:33;;;;45267:17;;45232:19;;45199:17;;:52;;;;:::i;:::-;:85;;;;:::i;:::-;45170:13;:114;;;;45310:13;;45295:12;:28;;;;44730:601:::0;;;:::o;47032:296::-;12256:13;:11;:13::i;:::-;47158:9:::1;47153:168;47177:8;;:15;;47173:1;:19;47153:168;;;47249:5;47214:19;:32;47234:8;;47243:1;47234:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47214:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;47290:8;;47299:1;47290:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47274:35;;;47303:5;47274:35;;;;;;:::i;:::-;;;;;;;;47194:3;;;;;;;47153:168;;;;47032:296:::0;;;:::o;37847:51::-;;;:::o;20760:108::-;20821:7;20848:12;;20841:19;;20760:108;:::o;47812:178::-;47915:4;47944:29;:38;47974:7;47944:38;;;;;;;;;;;;;;;;;;;;;;;;;47937:45;;47812:178;;;:::o;22954:295::-;23085:4;23102:15;23120:12;:10;:12::i;:::-;23102:30;;23143:38;23159:4;23165:7;23174:6;23143:15;:38::i;:::-;23192:27;23202:4;23208:2;23212:6;23192:9;:27::i;:::-;23237:4;23230:11;;;22954:295;;;;;:::o;38055:53::-;38101:6;38055:53;:::o;45983:306::-;12256:13;:11;:13::i;:::-;46101:1:::1;46073:30;;:16;:30;;::::0;46065:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46135:17;46155:15;;;;;;;;;;;46135:35;;46199:16;46181:15;;:34;;;;;;;;;;;;;;;;;;46271:9;46231:50;;46254:15;;;;;;;;;;;46231:50;;;;;;;;;;;;46054:235;45983:306:::0;:::o;20602:93::-;20660:5;20685:2;20678:9;;20602:93;:::o;23658:270::-;23773:4;23795:13;23811:12;:10;:12::i;:::-;23795:28;;23834:64;23843:5;23850:7;23887:10;23859:25;23869:5;23876:7;23859:9;:25::i;:::-;:38;;;;:::i;:::-;23834:8;:64::i;:::-;23916:4;23909:11;;;23658:270;;;;:::o;41733:81::-;41781:25;41787:10;41799:6;41781:5;:25::i;:::-;41733:81;:::o;37905:28::-;;;;;;;;;;;;;:::o;47998:126::-;48064:4;48088:19;:28;48108:7;48088:28;;;;;;;;;;;;;;;;;;;;;;;;;48081:35;;47998:126;;;:::o;45339:306::-;12256:13;:11;:13::i;:::-;45457:1:::1;45429:30;;:16;:30;;::::0;45421:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45491:17;45511:15;;;;;;;;;;;45491:35;;45555:16;45537:15;;:34;;;;;;;;;;;;;;;;;;45627:9;45587:50;;45610:15;;;;;;;;;;;45587:50;;;;;;;;;;;;45410:235;45339:306:::0;:::o;55128:969::-;12256:13;:11;:13::i;:::-;55266:3:::1;55246:9;;:16;;:23;;55238:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;55333:12;;:19;;55313:9;;:16;;:39;55305:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;55389:20;55428:6:::0;55424:98:::1;55442:9;;:16;;55438:1;:20;55424:98;;;55495:12;;55508:1;55495:15;;;;;;;:::i;:::-;;;;;;;;55479:31;;;;;:::i;:::-;;;55460:3;;;;;;;55424:98;;;;55649:12;55624:21;55634:10;55624:9;:21::i;:::-;:37;;55616:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;55704:6;55700:324;55718:9;;:16;;55714:1;:20;55700:324;;;55871:58;55887:10;55899:9;;55909:1;55899:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;55913;;55926:1;55913:15;;;;;;;:::i;:::-;;;;;;;;55871;:58::i;:::-;55736:3;;;;;;;55700:324;;;;56041:48;56058:9;;:16;;56076:12;56041:48;;;;;;;:::i;:::-;;;;;;;;55227:870;55128:969:::0;;;;:::o;38507:28::-;;;;:::o;38149:23::-;;;;;;;;;;;;;:::o;20931:177::-;21050:7;21082:9;:18;21092:7;21082:18;;;;;;;;;;;;;;;;21075:25;;20931:177;;;:::o;13011:103::-;12256:13;:11;:13::i;:::-;13076:30:::1;13103:1;13076:18;:30::i;:::-;13011:103::o:0;45653:322::-;12256:13;:11;:13::i;:::-;45777:1:::1;45747:32;;:18;:32;;::::0;45739:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45811:17;45831;;;;;;;;;;;45811:37;;45879:18;45859:17;;:38;;;;;;;;;;;;;;;;;;45957:9;45913:54;;45938:17;;;;;;;;;;;45913:54;;;;;;;;;;;;45728:247;45653:322:::0;:::o;42851:112::-;12256:13;:11;:13::i;:::-;42914:5:::1;42904:7;;:15;;;;;;;;;;;;;;;;;;42942:13;:11;:13::i;:::-;42930:9;:25;;;;42851:112::o:0;46297:218::-;12256:13;:11;:13::i;:::-;46453:5:::1;46412:29;:38;46442:7;46412:38;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;46492:7;46474:33;;;46501:5;46474:33;;;;;;:::i;:::-;;;;;;;;46297:218:::0;;:::o;37942:30::-;;;;;;;;;;;;;:::o;38179:26::-;;;;;;;;;;;;;:::o;42672:171::-;12256:13;:11;:13::i;:::-;42734::::1;;;;;;;;;;;42733:14;42725:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;42802:4;42786:13;;:20;;;;;;;;;;;;;;;;;;42831:4;42817:11;;:18;;;;;;;;;;;;;;;;;;42672:171::o:0;12370:87::-;12416:7;12443:6;;;;;;;;;;;12436:13;;12370:87;:::o;19850:104::-;19906:13;19939:7;19932:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19850:104;:::o;24431:505::-;24551:4;24573:13;24589:12;:10;:12::i;:::-;24573:28;;24612:24;24639:25;24649:5;24656:7;24639:9;:25::i;:::-;24612:52;;24717:15;24697:16;:35;;24675:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;24833:60;24842:5;24849:7;24877:15;24858:16;:34;24833:8;:60::i;:::-;24924:4;24917:11;;;;24431:505;;;;:::o;21314:234::-;21429:4;21451:13;21467:12;:10;:12::i;:::-;21451:28;;21490;21500:5;21507:2;21511:6;21490:9;:28::i;:::-;21536:4;21529:11;;;21314:234;;;;:::o;43262:425::-;12256:13;:11;:13::i;:::-;43391:6:::1;43386:1;43370:13;:11;:13::i;:::-;:17;;;;:::i;:::-;43369:28;;;;:::i;:::-;43359:6;:38;;43337:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;43550:4;43545:1;43529:13;:11;:13::i;:::-;:17;;;;:::i;:::-;43528:26;;;;:::i;:::-;43518:6;:36;;43496:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;43673:6;43652:18;:27;;;;43262:425:::0;:::o;38117:25::-;;;;;;;;;;;;;:::o;46851:173::-;12256:13;:11;:13::i;:::-;46964:5:::1;46933:19;:28;46953:7;46933:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;47001:7;46985:31;;;47010:5;46985:31;;;;;;:::i;:::-;;;;;;;;46851:173:::0;;:::o;37979:32::-;;;;;;;;;;;;;:::o;43695:504::-;12256:13;:11;:13::i;:::-;43896:4:::1;43891:1;43875:13;:11;:13::i;:::-;:17;;;;:::i;:::-;43874:26;;;;:::i;:::-;43854:15;:47;;43832:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;44039:4;44034:1;44018:13;:11;:13::i;:::-;:17;;;;:::i;:::-;44017:26;;;;:::i;:::-;44002:10;:42;;43980:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;44143:15;44126:14;:32;;;;44181:10;44169:9;:22;;;;43695:504:::0;;:::o;38243:29::-;;;;:::o;47336:468::-;12256:13;:11;:13::i;:::-;47406:12:::1;47448:1:::0;47433:17:::1;;:3;:17;;::::0;47429:368:::1;;47487:10;47479:24;;47529:21;47479:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47465:104;;;;;47429:368;;;47647:1;47615:3;47608:21;;;47638:4;47608:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;47600:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47677:14;47701:3;47694:21;;;47724:4;47694:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47677:53;;47752:3;47745:20;;;47766:10;47778:6;47745:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47585:212;47429:368;47395:409;47336:468:::0;:::o;38018:30::-;;;;;;;;;;;;;:::o;46523:320::-;12256:13;:11;:13::i;:::-;46661:9:::1;46656:180;46680:8;;:15;;46676:1;:19;46656:180;;;46762:5;46717:29;:42;46747:8;;46756:1;46747:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46717:42;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;46805:8;;46814:1;46805:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46787:37;;;46818:5;46787:37;;;;;;:::i;:::-;;;;;;;;46697:3;;;;;;;46656:180;;;;46523:320:::0;;;:::o;38352:27::-;;;;:::o;21611:201::-;21745:7;21777:11;:18;21789:5;21777:18;;;;;;;;;;;;;;;:27;21796:7;21777:27;;;;;;;;;;;;;;;;21770:34;;21611:201;;;;:::o;43163:91::-;12256:13;:11;:13::i;:::-;43241:5:::1;43227:11;;:19;;;;;;;;;;;;;;;;;;43163:91:::0;:::o;38310:33::-;;;;:::o;41822:842::-;12256:13;:11;:13::i;:::-;41883::::1;;;;;;;;;;;41882:14;41874:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;41971:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41953:55;;;42031:4;42051:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41953:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41937:13;;:147;;;;;;;;;;;;;;;;;;42095:66;42112:4;42127:13;;;;;;;;;;;42143:17;42095:8;:66::i;:::-;42179:13;;;;;;;;;;;42172:29;;;42224:15;42255:17;42172:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42296:58;42333:13;;;;;;;;;;;42349:4;42296:28;:58::i;:::-;42365:55;42399:13;;;;;;;;;;;42415:4;42365:25;:55::i;:::-;42433:15;:31;;;42472:21;42517:4;42537:24;42555:4;42537:9;:24::i;:::-;42576:1;42592::::0;42608:7:::1;:5;:7::i;:::-;42630:15;42433:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41822:842::o:0;13269:238::-;12256:13;:11;:13::i;:::-;13392:1:::1;13372:22;;:8;:22;;::::0;13350:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13471:28;13490:8;13471:18;:28::i;:::-;13269:238:::0;:::o;38279:24::-;;;;:::o;10915:98::-;10968:7;10995:10;10988:17;;10915:98;:::o;28564:380::-;28717:1;28700:19;;:5;:19;;;28692:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28798:1;28779:21;;:7;:21;;;28771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28882:6;28852:11;:18;28864:5;28852:18;;;;;;;;;;;;;;;:27;28871:7;28852:27;;;;;;;;;;;;;;;:36;;;;28920:7;28904:32;;28913:5;28904:32;;;28929:6;28904:32;;;;;;:::i;:::-;;;;;;;;28564:380;;;:::o;12535:132::-;12610:12;:10;:12::i;:::-;12599:23;;:7;:5;:7::i;:::-;:23;;;12591:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12535:132::o;29235:502::-;29370:24;29397:25;29407:5;29414:7;29397:9;:25::i;:::-;29370:52;;29457:17;29437:16;:37;29433:297;;29537:6;29517:16;:26;;29491:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;29652:51;29661:5;29668:7;29696:6;29677:16;:25;29652:8;:51::i;:::-;29433:297;29359:378;29235:502;;;:::o;48330:4062::-;48478:1;48462:18;;:4;:18;;;48454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48555:1;48541:16;;:2;:16;;;48533:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48624:1;48614:6;:11;48610:93;;48642:28;48658:4;48664:2;48668:1;48642:15;:28::i;:::-;48685:7;;48610:93;48741:7;:5;:7::i;:::-;48733:15;;:4;:15;;;;:45;;;;;48771:7;:5;:7::i;:::-;48765:13;;:2;:13;;;;48733:45;:78;;;;;48809:1;48795:16;;:2;:16;;;;48733:78;:112;;;;;38101:6;48828:17;;:2;:17;;;;48733:112;:139;;;;;48863:9;;;;;;;;;;;48862:10;48733:139;48715:1726;;;48904:13;;;;;;;;;;;48899:210;;48968:19;:25;48988:4;48968:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;48997:19;:23;49017:2;48997:23;;;;;;;;;;;;;;;;;;;;;;;;;48968:52;48938:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;48899:210;49129:7;;;;;;;;;;;:41;;;;;49156:13;;;;;;;;;;;49140:30;;:4;:30;;;49129:41;49125:226;;;49247:9;;49237:6;49221:13;49231:2;49221:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;49213:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;49125:226;49413:26;:32;49440:4;49413:32;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;49467:29;:33;49497:2;49467:33;;;;;;;;;;;;;;;;;;;;;;;;;49466:34;49413:87;49391:1039;;;49575:14;;49565:6;:24;;49535:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;49762:9;;49745:13;49755:2;49745:9;:13::i;:::-;49736:6;:22;;;;:::i;:::-;:35;;49706:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;49391:1039;;;49923:26;:30;49950:2;49923:30;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;49975:29;:35;50005:4;49975:35;;;;;;;;;;;;;;;;;;;;;;;;;49974:36;49923:87;49901:529;;;50085:14;;50075:6;:24;;50045:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;49901:529;;;50225:29;:33;50255:2;50225:33;;;;;;;;;;;;;;;;;;;;;;;;;50220:210;;50335:9;;50318:13;50328:2;50318:9;:13::i;:::-;50309:6;:22;;;;:::i;:::-;:35;;50279:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;50220:210;49901:529;49391:1039;48715:1726;50453:28;50484:24;50502:4;50484:9;:24::i;:::-;50453:55;;50521:12;50560:18;;50536:20;:42;;50521:57;;50609:7;:35;;;;;50633:11;;;;;;;;;;;50609:35;:62;;;;;50662:9;;;;;;;;;;;50661:10;50609:62;:112;;;;;50689:26;:32;50716:4;50689:32;;;;;;;;;;;;;;;;;;;;;;;;;50688:33;50609:112;:155;;;;;50739:19;:25;50759:4;50739:25;;;;;;;;;;;;;;;;;;;;;;;;;50738:26;50609:155;:196;;;;;50782:19;:23;50802:2;50782:23;;;;;;;;;;;;;;;;;;;;;;;;;50781:24;50609:196;50591:331;;;50844:4;50832:9;;:16;;;;;;;;;;;;;;;;;;50865:11;:9;:11::i;:::-;50905:5;50893:9;;:17;;;;;;;;;;;;;;;;;;50591:331;50934:12;50950:9;;;;;;;;;;;50949:10;50934:25;;50976:19;:25;50996:4;50976:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;51005:19;:23;51025:2;51005:23;;;;;;;;;;;;;;;;;;;;;;;;;50976:52;50972:100;;;51055:5;51045:15;;50972:100;51084:12;51117:7;51113:1187;;;51169:26;:30;51196:2;51169:30;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;51219:1;51203:13;;:17;51169:51;51165:986;;;51248:36;51278:5;51248:25;51259:13;;51248:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;51241:43;;51397:13;;51355:17;;51348:4;:24;;;;:::i;:::-;51347:63;;;;:::i;:::-;51303:19;;:107;;;;;;;:::i;:::-;;;;;;;;51523:13;;51481:17;;51474:4;:24;;;;:::i;:::-;51473:63;;;;:::i;:::-;51429:19;;:107;;;;;;;:::i;:::-;;;;;;;;51653:13;;51609:19;;51602:4;:26;;;;:::i;:::-;51601:65;;;;:::i;:::-;51555:21;;:111;;;;;;;:::i;:::-;;;;;;;;51165:986;;;51728:26;:32;51755:4;51728:32;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;51779:1;51764:12;;:16;51728:52;51724:427;;;51808:35;51837:5;51808:24;51819:12;;51808:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;51801:42;;51913:12;;51893:16;;51886:4;:23;;;;:::i;:::-;51885:40;;;;:::i;:::-;51862:19;;:63;;;;;;;:::i;:::-;;;;;;;;51995:12;;51975:16;;51968:4;:23;;;;:::i;:::-;51967:40;;;;:::i;:::-;51944:19;;:63;;;;;;;:::i;:::-;;;;;;;;52123:12;;52080:18;;52073:4;:25;;;;:::i;:::-;52072:63;;;;:::i;:::-;52026:21;;:109;;;;;;;:::i;:::-;;;;;;;;51724:427;51165:986;52178:1;52171:4;:8;52167:91;;;52200:42;52216:4;52230;52237;52200:15;:42::i;:::-;52167:91;52284:4;52274:14;;;;;:::i;:::-;;;51113:1187;52312:33;52328:4;52334:2;52338:6;52312:15;:33::i;:::-;52372:12;;52356:13;:28;;;;48443:3949;;;;48330:4062;;;;:::o;27451:675::-;27554:1;27535:21;;:7;:21;;;27527:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27607:49;27628:7;27645:1;27649:6;27607:20;:49::i;:::-;27669:22;27694:9;:18;27704:7;27694:18;;;;;;;;;;;;;;;;27669:43;;27749:6;27731:14;:24;;27723:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27868:6;27851:14;:23;27830:9;:18;27840:7;27830:18;;;;;;;;;;;;;;;:44;;;;27985:6;27969:12;;:22;;;;;;;;;;;28046:1;28020:37;;28029:7;28020:37;;;28050:6;28020:37;;;;;;:::i;:::-;;;;;;;;28070:48;28090:7;28107:1;28111:6;28070:19;:48::i;:::-;27516:610;27451:675;;:::o;25406:877::-;25553:1;25537:18;;:4;:18;;;25529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25630:1;25616:16;;:2;:16;;;25608:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25685:38;25706:4;25712:2;25716:6;25685:20;:38::i;:::-;25736:19;25758:9;:15;25768:4;25758:15;;;;;;;;;;;;;;;;25736:37;;25821:6;25806:11;:21;;25784:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;25961:6;25947:11;:20;25929:9;:15;25939:4;25929:15;;;;;;;;;;;;;;;:38;;;;26164:6;26147:9;:13;26157:2;26147:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26214:2;26199:26;;26208:4;26199:26;;;26218:6;26199:26;;;;;;:::i;:::-;;;;;;;;26238:37;26258:4;26264:2;26268:6;26238:19;:37::i;:::-;25518:765;25406:877;;;:::o;13667:191::-;13741:16;13760:6;;;;;;;;;;;13741:25;;13786:8;13777:6;;:17;;;;;;;;;;;;;;;;;;13841:8;13810:40;;13831:8;13810:40;;;;;;;;;;;;13730:128;13667:191;:::o;48132:190::-;48251:5;48216:26;:32;48243:4;48216:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;48308:5;48274:40;;48302:4;48274:40;;;;;;;;;;;;48132:190;;:::o;53291:1829::-;53332:23;53358:24;53376:4;53358:9;:24::i;:::-;53332:50;;53393:25;53491:21;;53456:19;;53421;;:54;;;;:::i;:::-;:91;;;;:::i;:::-;53393:119;;53523:12;53571:1;53552:15;:20;:46;;;;53597:1;53576:17;:22;53552:46;53548:85;;;53615:7;;;;;53548:85;53688:2;53667:18;;:23;;;;:::i;:::-;53649:15;:41;53645:115;;;53746:2;53725:18;;:23;;;;:::i;:::-;53707:41;;53645:115;53772:23;53886:1;53853:17;53817:19;;53799:15;:37;;;;:::i;:::-;53798:72;;;;:::i;:::-;:89;;;;:::i;:::-;53772:115;;53898:26;53927:36;53947:15;53927;:19;;:36;;;;:::i;:::-;53898:65;;53976:25;54004:21;53976:49;;54038:37;54056:18;54038:17;:37::i;:::-;54088:18;54109:44;54135:17;54109:21;:25;;:44;;;;:::i;:::-;54088:65;;54166:23;54192:82;54246:17;54192:35;54207:19;;54192:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;54166:108;;54287:25;54315:84;54371:17;54315:37;54330:21;;54315:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;54287:112;;54412:23;54495:17;54464:15;54438:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;54412:100;;54547:1;54525:19;:23;;;;54581:1;54559:19;:23;;;;54617:1;54593:21;:25;;;;54653:1;54635:15;:19;:42;;;;;54676:1;54658:15;:19;54635:42;54631:280;;;54694:47;54708:15;54725;54694:13;:47::i;:::-;54761:138;54794:18;54831:15;54865:19;;54761:138;;;;;;;;:::i;:::-;;;;;;;;54631:280;54945:17;;;;;;;;;;;54937:31;;54976:17;54937:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54923:75;;;;;55033:15;;;;;;;;;;;55025:29;;55076:21;55025:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55011:101;;;;;53321:1799;;;;;;;;;;53291:1829;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;4013:::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;30337:125::-;;;;:::o;31066:124::-;;;;:::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;52400:503::-;52468:21;52506:1;52492:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52468:40;;52537:4;52519;52524:1;52519:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;52563:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52553:4;52558:1;52553:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;52598:62;52615:4;52630:15;52648:11;52598:8;:62::i;:::-;52699:15;:66;;;52780:11;52806:1;52822:4;52849;52869:15;52699:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52457:446;52400:503;:::o;52911:372::-;52994:62;53011:4;53026:15;53044:11;52994:8;:62::i;:::-;53069:15;:31;;;53108:9;53141:4;53161:11;53187:1;53203;53219:15;;;;;;;;;;;53249;53069:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;52911:372;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:619::-;3416:6;3424;3432;3481:2;3469:9;3460:7;3456:23;3452:32;3449:119;;;3487:79;;:::i;:::-;3449:119;3607:1;3632:53;3677:7;3668:6;3657:9;3653:22;3632:53;:::i;:::-;3622:63;;3578:117;3734:2;3760:53;3805:7;3796:6;3785:9;3781:22;3760:53;:::i;:::-;3750:63;;3705:118;3862:2;3888:53;3933:7;3924:6;3913:9;3909:22;3888:53;:::i;:::-;3878:63;;3833:118;3339:619;;;;;:::o;3964:117::-;4073:1;4070;4063:12;4087:117;4196:1;4193;4186:12;4210:117;4319:1;4316;4309:12;4350:568;4423:8;4433:6;4483:3;4476:4;4468:6;4464:17;4460:27;4450:122;;4491:79;;:::i;:::-;4450:122;4604:6;4591:20;4581:30;;4634:18;4626:6;4623:30;4620:117;;;4656:79;;:::i;:::-;4620:117;4770:4;4762:6;4758:17;4746:29;;4824:3;4816:4;4808:6;4804:17;4794:8;4790:32;4787:41;4784:128;;;4831:79;;:::i;:::-;4784:128;4350:568;;;;;:::o;4924:116::-;4994:21;5009:5;4994:21;:::i;:::-;4987:5;4984:32;4974:60;;5030:1;5027;5020:12;4974:60;4924:116;:::o;5046:133::-;5089:5;5127:6;5114:20;5105:29;;5143:30;5167:5;5143:30;:::i;:::-;5046:133;;;;:::o;5185:698::-;5277:6;5285;5293;5342:2;5330:9;5321:7;5317:23;5313:32;5310:119;;;5348:79;;:::i;:::-;5310:119;5496:1;5485:9;5481:17;5468:31;5526:18;5518:6;5515:30;5512:117;;;5548:79;;:::i;:::-;5512:117;5661:80;5733:7;5724:6;5713:9;5709:22;5661:80;:::i;:::-;5643:98;;;;5439:312;5790:2;5816:50;5858:7;5849:6;5838:9;5834:22;5816:50;:::i;:::-;5806:60;;5761:115;5185:698;;;;;:::o;5889:60::-;5917:3;5938:5;5931:12;;5889:60;;;:::o;5955:142::-;6005:9;6038:53;6056:34;6065:24;6083:5;6065:24;:::i;:::-;6056:34;:::i;:::-;6038:53;:::i;:::-;6025:66;;5955:142;;;:::o;6103:126::-;6153:9;6186:37;6217:5;6186:37;:::i;:::-;6173:50;;6103:126;;;:::o;6235:153::-;6312:9;6345:37;6376:5;6345:37;:::i;:::-;6332:50;;6235:153;;;:::o;6394:185::-;6508:64;6566:5;6508:64;:::i;:::-;6503:3;6496:77;6394:185;;:::o;6585:276::-;6705:4;6743:2;6732:9;6728:18;6720:26;;6756:98;6851:1;6840:9;6836:17;6827:6;6756:98;:::i;:::-;6585:276;;;;:::o;6867:118::-;6954:24;6972:5;6954:24;:::i;:::-;6949:3;6942:37;6867:118;;:::o;6991:222::-;7084:4;7122:2;7111:9;7107:18;7099:26;;7135:71;7203:1;7192:9;7188:17;7179:6;7135:71;:::i;:::-;6991:222;;;;:::o;7219:329::-;7278:6;7327:2;7315:9;7306:7;7302:23;7298:32;7295:119;;;7333:79;;:::i;:::-;7295:119;7453:1;7478:53;7523:7;7514:6;7503:9;7499:22;7478:53;:::i;:::-;7468:63;;7424:117;7219:329;;;;:::o;7554:619::-;7631:6;7639;7647;7696:2;7684:9;7675:7;7671:23;7667:32;7664:119;;;7702:79;;:::i;:::-;7664:119;7822:1;7847:53;7892:7;7883:6;7872:9;7868:22;7847:53;:::i;:::-;7837:63;;7793:117;7949:2;7975:53;8020:7;8011:6;8000:9;7996:22;7975:53;:::i;:::-;7965:63;;7920:118;8077:2;8103:53;8148:7;8139:6;8128:9;8124:22;8103:53;:::i;:::-;8093:63;;8048:118;7554:619;;;;;:::o;8179:118::-;8266:24;8284:5;8266:24;:::i;:::-;8261:3;8254:37;8179:118;;:::o;8303:222::-;8396:4;8434:2;8423:9;8419:18;8411:26;;8447:71;8515:1;8504:9;8500:17;8491:6;8447:71;:::i;:::-;8303:222;;;;:::o;8531:86::-;8566:7;8606:4;8599:5;8595:16;8584:27;;8531:86;;;:::o;8623:112::-;8706:22;8722:5;8706:22;:::i;:::-;8701:3;8694:35;8623:112;;:::o;8741:214::-;8830:4;8868:2;8857:9;8853:18;8845:26;;8881:67;8945:1;8934:9;8930:17;8921:6;8881:67;:::i;:::-;8741:214;;;;:::o;8961:329::-;9020:6;9069:2;9057:9;9048:7;9044:23;9040:32;9037:119;;;9075:79;;:::i;:::-;9037:119;9195:1;9220:53;9265:7;9256:6;9245:9;9241:22;9220:53;:::i;:::-;9210:63;;9166:117;8961:329;;;;:::o;9313:568::-;9386:8;9396:6;9446:3;9439:4;9431:6;9427:17;9423:27;9413:122;;9454:79;;:::i;:::-;9413:122;9567:6;9554:20;9544:30;;9597:18;9589:6;9586:30;9583:117;;;9619:79;;:::i;:::-;9583:117;9733:4;9725:6;9721:17;9709:29;;9787:3;9779:4;9771:6;9767:17;9757:8;9753:32;9750:41;9747:128;;;9794:79;;:::i;:::-;9747:128;9313:568;;;;;:::o;9887:934::-;10009:6;10017;10025;10033;10082:2;10070:9;10061:7;10057:23;10053:32;10050:119;;;10088:79;;:::i;:::-;10050:119;10236:1;10225:9;10221:17;10208:31;10266:18;10258:6;10255:30;10252:117;;;10288:79;;:::i;:::-;10252:117;10401:80;10473:7;10464:6;10453:9;10449:22;10401:80;:::i;:::-;10383:98;;;;10179:312;10558:2;10547:9;10543:18;10530:32;10589:18;10581:6;10578:30;10575:117;;;10611:79;;:::i;:::-;10575:117;10724:80;10796:7;10787:6;10776:9;10772:22;10724:80;:::i;:::-;10706:98;;;;10501:313;9887:934;;;;;;;:::o;10827:468::-;10892:6;10900;10949:2;10937:9;10928:7;10924:23;10920:32;10917:119;;;10955:79;;:::i;:::-;10917:119;11075:1;11100:53;11145:7;11136:6;11125:9;11121:22;11100:53;:::i;:::-;11090:63;;11046:117;11202:2;11228:50;11270:7;11261:6;11250:9;11246:22;11228:50;:::i;:::-;11218:60;;11173:115;10827:468;;;;;:::o;11301:474::-;11369:6;11377;11426:2;11414:9;11405:7;11401:23;11397:32;11394:119;;;11432:79;;:::i;:::-;11394:119;11552:1;11577:53;11622:7;11613:6;11602:9;11598:22;11577:53;:::i;:::-;11567:63;;11523:117;11679:2;11705:53;11750:7;11741:6;11730:9;11726:22;11705:53;:::i;:::-;11695:63;;11650:118;11301:474;;;;;:::o;11781:::-;11849:6;11857;11906:2;11894:9;11885:7;11881:23;11877:32;11874:119;;;11912:79;;:::i;:::-;11874:119;12032:1;12057:53;12102:7;12093:6;12082:9;12078:22;12057:53;:::i;:::-;12047:63;;12003:117;12159:2;12185:53;12230:7;12221:6;12210:9;12206:22;12185:53;:::i;:::-;12175:63;;12130:118;11781:474;;;;;:::o;12261:323::-;12317:6;12366:2;12354:9;12345:7;12341:23;12337:32;12334:119;;;12372:79;;:::i;:::-;12334:119;12492:1;12517:50;12559:7;12550:6;12539:9;12535:22;12517:50;:::i;:::-;12507:60;;12463:114;12261:323;;;;:::o;12590:180::-;12638:77;12635:1;12628:88;12735:4;12732:1;12725:15;12759:4;12756:1;12749:15;12776:320;12820:6;12857:1;12851:4;12847:12;12837:22;;12904:1;12898:4;12894:12;12925:18;12915:81;;12981:4;12973:6;12969:17;12959:27;;12915:81;13043:2;13035:6;13032:14;13012:18;13009:38;13006:84;;13062:18;;:::i;:::-;13006:84;12827:269;12776:320;;;:::o;13102:180::-;13150:77;13147:1;13140:88;13247:4;13244:1;13237:15;13271:4;13268:1;13261:15;13288:191;13328:3;13347:20;13365:1;13347:20;:::i;:::-;13342:25;;13381:20;13399:1;13381:20;:::i;:::-;13376:25;;13424:1;13421;13417:9;13410:16;;13445:3;13442:1;13439:10;13436:36;;;13452:18;;:::i;:::-;13436:36;13288:191;;;;:::o;13485:222::-;13625:34;13621:1;13613:6;13609:14;13602:58;13694:5;13689:2;13681:6;13677:15;13670:30;13485:222;:::o;13713:366::-;13855:3;13876:67;13940:2;13935:3;13876:67;:::i;:::-;13869:74;;13952:93;14041:3;13952:93;:::i;:::-;14070:2;14065:3;14061:12;14054:19;;13713:366;;;:::o;14085:419::-;14251:4;14289:2;14278:9;14274:18;14266:26;;14338:9;14332:4;14328:20;14324:1;14313:9;14309:17;14302:47;14366:131;14492:4;14366:131;:::i;:::-;14358:139;;14085:419;;;:::o;14510:180::-;14558:77;14555:1;14548:88;14655:4;14652:1;14645:15;14679:4;14676:1;14669:15;14696:166;14836:18;14832:1;14824:6;14820:14;14813:42;14696:166;:::o;14868:366::-;15010:3;15031:67;15095:2;15090:3;15031:67;:::i;:::-;15024:74;;15107:93;15196:3;15107:93;:::i;:::-;15225:2;15220:3;15216:12;15209:19;;14868:366;;;:::o;15240:419::-;15406:4;15444:2;15433:9;15429:18;15421:26;;15493:9;15487:4;15483:20;15479:1;15468:9;15464:17;15457:47;15521:131;15647:4;15521:131;:::i;:::-;15513:139;;15240:419;;;:::o;15665:171::-;15805:23;15801:1;15793:6;15789:14;15782:47;15665:171;:::o;15842:366::-;15984:3;16005:67;16069:2;16064:3;16005:67;:::i;:::-;15998:74;;16081:93;16170:3;16081:93;:::i;:::-;16199:2;16194:3;16190:12;16183:19;;15842:366;;;:::o;16214:419::-;16380:4;16418:2;16407:9;16403:18;16395:26;;16467:9;16461:4;16457:20;16453:1;16442:9;16438:17;16431:47;16495:131;16621:4;16495:131;:::i;:::-;16487:139;;16214:419;;;:::o;16639:170::-;16779:22;16775:1;16767:6;16763:14;16756:46;16639:170;:::o;16815:366::-;16957:3;16978:67;17042:2;17037:3;16978:67;:::i;:::-;16971:74;;17054:93;17143:3;17054:93;:::i;:::-;17172:2;17167:3;17163:12;17156:19;;16815:366;;;:::o;17187:419::-;17353:4;17391:2;17380:9;17376:18;17368:26;;17440:9;17434:4;17430:20;17426:1;17415:9;17411:17;17404:47;17468:131;17594:4;17468:131;:::i;:::-;17460:139;;17187:419;;;:::o;17612:171::-;17752:23;17748:1;17740:6;17736:14;17729:47;17612:171;:::o;17789:366::-;17931:3;17952:67;18016:2;18011:3;17952:67;:::i;:::-;17945:74;;18028:93;18117:3;18028:93;:::i;:::-;18146:2;18141:3;18137:12;18130:19;;17789:366;;;:::o;18161:419::-;18327:4;18365:2;18354:9;18350:18;18342:26;;18414:9;18408:4;18404:20;18400:1;18389:9;18385:17;18378:47;18442:131;18568:4;18442:131;:::i;:::-;18434:139;;18161:419;;;:::o;18586:332::-;18707:4;18745:2;18734:9;18730:18;18722:26;;18758:71;18826:1;18815:9;18811:17;18802:6;18758:71;:::i;:::-;18839:72;18907:2;18896:9;18892:18;18883:6;18839:72;:::i;:::-;18586:332;;;;;:::o;18924:173::-;19064:25;19060:1;19052:6;19048:14;19041:49;18924:173;:::o;19103:366::-;19245:3;19266:67;19330:2;19325:3;19266:67;:::i;:::-;19259:74;;19342:93;19431:3;19342:93;:::i;:::-;19460:2;19455:3;19451:12;19444:19;;19103:366;;;:::o;19475:419::-;19641:4;19679:2;19668:9;19664:18;19656:26;;19728:9;19722:4;19718:20;19714:1;19703:9;19699:17;19692:47;19756:131;19882:4;19756:131;:::i;:::-;19748:139;;19475:419;;;:::o;19900:224::-;20040:34;20036:1;20028:6;20024:14;20017:58;20109:7;20104:2;20096:6;20092:15;20085:32;19900:224;:::o;20130:366::-;20272:3;20293:67;20357:2;20352:3;20293:67;:::i;:::-;20286:74;;20369:93;20458:3;20369:93;:::i;:::-;20487:2;20482:3;20478:12;20471:19;;20130:366;;;:::o;20502:419::-;20668:4;20706:2;20695:9;20691:18;20683:26;;20755:9;20749:4;20745:20;20741:1;20730:9;20726:17;20719:47;20783:131;20909:4;20783:131;:::i;:::-;20775:139;;20502:419;;;:::o;20927:410::-;20967:7;20990:20;21008:1;20990:20;:::i;:::-;20985:25;;21024:20;21042:1;21024:20;:::i;:::-;21019:25;;21079:1;21076;21072:9;21101:30;21119:11;21101:30;:::i;:::-;21090:41;;21280:1;21271:7;21267:15;21264:1;21261:22;21241:1;21234:9;21214:83;21191:139;;21310:18;;:::i;:::-;21191:139;20975:362;20927:410;;;;:::o;21343:180::-;21391:77;21388:1;21381:88;21488:4;21485:1;21478:15;21512:4;21509:1;21502:15;21529:185;21569:1;21586:20;21604:1;21586:20;:::i;:::-;21581:25;;21620:20;21638:1;21620:20;:::i;:::-;21615:25;;21659:1;21649:35;;21664:18;;:::i;:::-;21649:35;21706:1;21703;21699:9;21694:14;;21529:185;;;;:::o;21720:247::-;21860:34;21856:1;21848:6;21844:14;21837:58;21929:30;21924:2;21916:6;21912:15;21905:55;21720:247;:::o;21973:366::-;22115:3;22136:67;22200:2;22195:3;22136:67;:::i;:::-;22129:74;;22212:93;22301:3;22212:93;:::i;:::-;22330:2;22325:3;22321:12;22314:19;;21973:366;;;:::o;22345:419::-;22511:4;22549:2;22538:9;22534:18;22526:26;;22598:9;22592:4;22588:20;22584:1;22573:9;22569:17;22562:47;22626:131;22752:4;22626:131;:::i;:::-;22618:139;;22345:419;;;:::o;22770:246::-;22910:34;22906:1;22898:6;22894:14;22887:58;22979:29;22974:2;22966:6;22962:15;22955:54;22770:246;:::o;23022:366::-;23164:3;23185:67;23249:2;23244:3;23185:67;:::i;:::-;23178:74;;23261:93;23350:3;23261:93;:::i;:::-;23379:2;23374:3;23370:12;23363:19;;23022:366;;;:::o;23394:419::-;23560:4;23598:2;23587:9;23583:18;23575:26;;23647:9;23641:4;23637:20;23633:1;23622:9;23618:17;23611:47;23675:131;23801:4;23675:131;:::i;:::-;23667:139;;23394:419;;;:::o;23819:227::-;23959:34;23955:1;23947:6;23943:14;23936:58;24028:10;24023:2;24015:6;24011:15;24004:35;23819:227;:::o;24052:366::-;24194:3;24215:67;24279:2;24274:3;24215:67;:::i;:::-;24208:74;;24291:93;24380:3;24291:93;:::i;:::-;24409:2;24404:3;24400:12;24393:19;;24052:366;;;:::o;24424:419::-;24590:4;24628:2;24617:9;24613:18;24605:26;;24677:9;24671:4;24667:20;24663:1;24652:9;24648:17;24641:47;24705:131;24831:4;24705:131;:::i;:::-;24697:139;;24424:419;;;:::o;24849:230::-;24989:34;24985:1;24977:6;24973:14;24966:58;25058:13;25053:2;25045:6;25041:15;25034:38;24849:230;:::o;25085:366::-;25227:3;25248:67;25312:2;25307:3;25248:67;:::i;:::-;25241:74;;25324:93;25413:3;25324:93;:::i;:::-;25442:2;25437:3;25433:12;25426:19;;25085:366;;;:::o;25457:419::-;25623:4;25661:2;25650:9;25646:18;25638:26;;25710:9;25704:4;25700:20;25696:1;25685:9;25681:17;25674:47;25738:131;25864:4;25738:131;:::i;:::-;25730:139;;25457:419;;;:::o;25882:147::-;25983:11;26020:3;26005:18;;25882:147;;;;:::o;26035:114::-;;:::o;26155:398::-;26314:3;26335:83;26416:1;26411:3;26335:83;:::i;:::-;26328:90;;26427:93;26516:3;26427:93;:::i;:::-;26545:1;26540:3;26536:11;26529:18;;26155:398;;;:::o;26559:379::-;26743:3;26765:147;26908:3;26765:147;:::i;:::-;26758:154;;26929:3;26922:10;;26559:379;;;:::o;26944:143::-;27001:5;27032:6;27026:13;27017:22;;27048:33;27075:5;27048:33;:::i;:::-;26944:143;;;;:::o;27093:351::-;27163:6;27212:2;27200:9;27191:7;27187:23;27183:32;27180:119;;;27218:79;;:::i;:::-;27180:119;27338:1;27363:64;27419:7;27410:6;27399:9;27395:22;27363:64;:::i;:::-;27353:74;;27309:128;27093:351;;;;:::o;27450:159::-;27590:11;27586:1;27578:6;27574:14;27567:35;27450:159;:::o;27615:365::-;27757:3;27778:66;27842:1;27837:3;27778:66;:::i;:::-;27771:73;;27853:93;27942:3;27853:93;:::i;:::-;27971:2;27966:3;27962:12;27955:19;;27615:365;;;:::o;27986:419::-;28152:4;28190:2;28179:9;28175:18;28167:26;;28239:9;28233:4;28229:20;28225:1;28214:9;28210:17;28203:47;28267:131;28393:4;28267:131;:::i;:::-;28259:139;;27986:419;;;:::o;28411:332::-;28532:4;28570:2;28559:9;28555:18;28547:26;;28583:71;28651:1;28640:9;28636:17;28627:6;28583:71;:::i;:::-;28664:72;28732:2;28721:9;28717:18;28708:6;28664:72;:::i;:::-;28411:332;;;;;:::o;28749:137::-;28803:5;28834:6;28828:13;28819:22;;28850:30;28874:5;28850:30;:::i;:::-;28749:137;;;;:::o;28892:345::-;28959:6;29008:2;28996:9;28987:7;28983:23;28979:32;28976:119;;;29014:79;;:::i;:::-;28976:119;29134:1;29159:61;29212:7;29203:6;29192:9;29188:22;29159:61;:::i;:::-;29149:71;;29105:125;28892:345;;;;:::o;29243:143::-;29300:5;29331:6;29325:13;29316:22;;29347:33;29374:5;29347:33;:::i;:::-;29243:143;;;;:::o;29392:351::-;29462:6;29511:2;29499:9;29490:7;29486:23;29482:32;29479:119;;;29517:79;;:::i;:::-;29479:119;29637:1;29662:64;29718:7;29709:6;29698:9;29694:22;29662:64;:::i;:::-;29652:74;;29608:128;29392:351;;;;:::o;29749:332::-;29870:4;29908:2;29897:9;29893:18;29885:26;;29921:71;29989:1;29978:9;29974:17;29965:6;29921:71;:::i;:::-;30002:72;30070:2;30059:9;30055:18;30046:6;30002:72;:::i;:::-;29749:332;;;;;:::o;30087:85::-;30132:7;30161:5;30150:16;;30087:85;;;:::o;30178:158::-;30236:9;30269:61;30287:42;30296:32;30322:5;30296:32;:::i;:::-;30287:42;:::i;:::-;30269:61;:::i;:::-;30256:74;;30178:158;;;:::o;30342:147::-;30437:45;30476:5;30437:45;:::i;:::-;30432:3;30425:58;30342:147;;:::o;30495:807::-;30744:4;30782:3;30771:9;30767:19;30759:27;;30796:71;30864:1;30853:9;30849:17;30840:6;30796:71;:::i;:::-;30877:72;30945:2;30934:9;30930:18;30921:6;30877:72;:::i;:::-;30959:80;31035:2;31024:9;31020:18;31011:6;30959:80;:::i;:::-;31049;31125:2;31114:9;31110:18;31101:6;31049:80;:::i;:::-;31139:73;31207:3;31196:9;31192:19;31183:6;31139:73;:::i;:::-;31222;31290:3;31279:9;31275:19;31266:6;31222:73;:::i;:::-;30495:807;;;;;;;;;:::o;31308:663::-;31396:6;31404;31412;31461:2;31449:9;31440:7;31436:23;31432:32;31429:119;;;31467:79;;:::i;:::-;31429:119;31587:1;31612:64;31668:7;31659:6;31648:9;31644:22;31612:64;:::i;:::-;31602:74;;31558:128;31725:2;31751:64;31807:7;31798:6;31787:9;31783:22;31751:64;:::i;:::-;31741:74;;31696:129;31864:2;31890:64;31946:7;31937:6;31926:9;31922:22;31890:64;:::i;:::-;31880:74;;31835:129;31308:663;;;;;:::o;31977:225::-;32117:34;32113:1;32105:6;32101:14;32094:58;32186:8;32181:2;32173:6;32169:15;32162:33;31977:225;:::o;32208:366::-;32350:3;32371:67;32435:2;32430:3;32371:67;:::i;:::-;32364:74;;32447:93;32536:3;32447:93;:::i;:::-;32565:2;32560:3;32556:12;32549:19;;32208:366;;;:::o;32580:419::-;32746:4;32784:2;32773:9;32769:18;32761:26;;32833:9;32827:4;32823:20;32819:1;32808:9;32804:17;32797:47;32861:131;32987:4;32861:131;:::i;:::-;32853:139;;32580:419;;;:::o;33005:223::-;33145:34;33141:1;33133:6;33129:14;33122:58;33214:6;33209:2;33201:6;33197:15;33190:31;33005:223;:::o;33234:366::-;33376:3;33397:67;33461:2;33456:3;33397:67;:::i;:::-;33390:74;;33473:93;33562:3;33473:93;:::i;:::-;33591:2;33586:3;33582:12;33575:19;;33234:366;;;:::o;33606:419::-;33772:4;33810:2;33799:9;33795:18;33787:26;;33859:9;33853:4;33849:20;33845:1;33834:9;33830:17;33823:47;33887:131;34013:4;33887:131;:::i;:::-;33879:139;;33606:419;;;:::o;34031:221::-;34171:34;34167:1;34159:6;34155:14;34148:58;34240:4;34235:2;34227:6;34223:15;34216:29;34031:221;:::o;34258:366::-;34400:3;34421:67;34485:2;34480:3;34421:67;:::i;:::-;34414:74;;34497:93;34586:3;34497:93;:::i;:::-;34615:2;34610:3;34606:12;34599:19;;34258:366;;;:::o;34630:419::-;34796:4;34834:2;34823:9;34819:18;34811:26;;34883:9;34877:4;34873:20;34869:1;34858:9;34854:17;34847:47;34911:131;35037:4;34911:131;:::i;:::-;34903:139;;34630:419;;;:::o;35055:182::-;35195:34;35191:1;35183:6;35179:14;35172:58;35055:182;:::o;35243:366::-;35385:3;35406:67;35470:2;35465:3;35406:67;:::i;:::-;35399:74;;35482:93;35571:3;35482:93;:::i;:::-;35600:2;35595:3;35591:12;35584:19;;35243:366;;;:::o;35615:419::-;35781:4;35819:2;35808:9;35804:18;35796:26;;35868:9;35862:4;35858:20;35854:1;35843:9;35839:17;35832:47;35896:131;36022:4;35896:131;:::i;:::-;35888:139;;35615:419;;;:::o;36040:179::-;36180:31;36176:1;36168:6;36164:14;36157:55;36040:179;:::o;36225:366::-;36367:3;36388:67;36452:2;36447:3;36388:67;:::i;:::-;36381:74;;36464:93;36553:3;36464:93;:::i;:::-;36582:2;36577:3;36573:12;36566:19;;36225:366;;;:::o;36597:419::-;36763:4;36801:2;36790:9;36786:18;36778:26;;36850:9;36844:4;36840:20;36836:1;36825:9;36821:17;36814:47;36878:131;37004:4;36878:131;:::i;:::-;36870:139;;36597:419;;;:::o;37022:224::-;37162:34;37158:1;37150:6;37146:14;37139:58;37231:7;37226:2;37218:6;37214:15;37207:32;37022:224;:::o;37252:366::-;37394:3;37415:67;37479:2;37474:3;37415:67;:::i;:::-;37408:74;;37491:93;37580:3;37491:93;:::i;:::-;37609:2;37604:3;37600:12;37593:19;;37252:366;;;:::o;37624:419::-;37790:4;37828:2;37817:9;37813:18;37805:26;;37877:9;37871:4;37867:20;37863:1;37852:9;37848:17;37841:47;37905:131;38031:4;37905:131;:::i;:::-;37897:139;;37624:419;;;:::o;38049:222::-;38189:34;38185:1;38177:6;38173:14;38166:58;38258:5;38253:2;38245:6;38241:15;38234:30;38049:222;:::o;38277:366::-;38419:3;38440:67;38504:2;38499:3;38440:67;:::i;:::-;38433:74;;38516:93;38605:3;38516:93;:::i;:::-;38634:2;38629:3;38625:12;38618:19;;38277:366;;;:::o;38649:419::-;38815:4;38853:2;38842:9;38838:18;38830:26;;38902:9;38896:4;38892:20;38888:1;38877:9;38873:17;38866:47;38930:131;39056:4;38930:131;:::i;:::-;38922:139;;38649:419;;;:::o;39074:179::-;39214:31;39210:1;39202:6;39198:14;39191:55;39074:179;:::o;39259:366::-;39401:3;39422:67;39486:2;39481:3;39422:67;:::i;:::-;39415:74;;39498:93;39587:3;39498:93;:::i;:::-;39616:2;39611:3;39607:12;39600:19;;39259:366;;;:::o;39631:419::-;39797:4;39835:2;39824:9;39820:18;39812:26;;39884:9;39878:4;39874:20;39870:1;39859:9;39855:17;39848:47;39912:131;40038:4;39912:131;:::i;:::-;39904:139;;39631:419;;;:::o;40056:156::-;40196:8;40192:1;40184:6;40180:14;40173:32;40056:156;:::o;40218:365::-;40360:3;40381:66;40445:1;40440:3;40381:66;:::i;:::-;40374:73;;40456:93;40545:3;40456:93;:::i;:::-;40574:2;40569:3;40565:12;40558:19;;40218:365;;;:::o;40589:419::-;40755:4;40793:2;40782:9;40778:18;40770:26;;40842:9;40836:4;40832:20;40828:1;40817:9;40813:17;40806:47;40870:131;40996:4;40870:131;:::i;:::-;40862:139;;40589:419;;;:::o;41014:241::-;41154:34;41150:1;41142:6;41138:14;41131:58;41223:24;41218:2;41210:6;41206:15;41199:49;41014:241;:::o;41261:366::-;41403:3;41424:67;41488:2;41483:3;41424:67;:::i;:::-;41417:74;;41500:93;41589:3;41500:93;:::i;:::-;41618:2;41613:3;41609:12;41602:19;;41261:366;;;:::o;41633:419::-;41799:4;41837:2;41826:9;41822:18;41814:26;;41886:9;41880:4;41876:20;41872:1;41861:9;41857:17;41850:47;41914:131;42040:4;41914:131;:::i;:::-;41906:139;;41633:419;;;:::o;42058:176::-;42198:28;42194:1;42186:6;42182:14;42175:52;42058:176;:::o;42240:366::-;42382:3;42403:67;42467:2;42462:3;42403:67;:::i;:::-;42396:74;;42479:93;42568:3;42479:93;:::i;:::-;42597:2;42592:3;42588:12;42581:19;;42240:366;;;:::o;42612:419::-;42778:4;42816:2;42805:9;42801:18;42793:26;;42865:9;42859:4;42855:20;42851:1;42840:9;42836:17;42829:47;42893:131;43019:4;42893:131;:::i;:::-;42885:139;;42612:419;;;:::o;43037:242::-;43177:34;43173:1;43165:6;43161:14;43154:58;43246:25;43241:2;43233:6;43229:15;43222:50;43037:242;:::o;43285:366::-;43427:3;43448:67;43512:2;43507:3;43448:67;:::i;:::-;43441:74;;43524:93;43613:3;43524:93;:::i;:::-;43642:2;43637:3;43633:12;43626:19;;43285:366;;;:::o;43657:419::-;43823:4;43861:2;43850:9;43846:18;43838:26;;43910:9;43904:4;43900:20;43896:1;43885:9;43881:17;43874:47;43938:131;44064:4;43938:131;:::i;:::-;43930:139;;43657:419;;;:::o;44082:194::-;44122:4;44142:20;44160:1;44142:20;:::i;:::-;44137:25;;44176:20;44194:1;44176:20;:::i;:::-;44171:25;;44220:1;44217;44213:9;44205:17;;44244:1;44238:4;44235:11;44232:37;;;44249:18;;:::i;:::-;44232:37;44082:194;;;;:::o;44282:220::-;44422:34;44418:1;44410:6;44406:14;44399:58;44491:3;44486:2;44478:6;44474:15;44467:28;44282:220;:::o;44508:366::-;44650:3;44671:67;44735:2;44730:3;44671:67;:::i;:::-;44664:74;;44747:93;44836:3;44747:93;:::i;:::-;44865:2;44860:3;44856:12;44849:19;;44508:366;;;:::o;44880:419::-;45046:4;45084:2;45073:9;45069:18;45061:26;;45133:9;45127:4;45123:20;45119:1;45108:9;45104:17;45097:47;45161:131;45287:4;45161:131;:::i;:::-;45153:139;;44880:419;;;:::o;45305:221::-;45445:34;45441:1;45433:6;45429:14;45422:58;45514:4;45509:2;45501:6;45497:15;45490:29;45305:221;:::o;45532:366::-;45674:3;45695:67;45759:2;45754:3;45695:67;:::i;:::-;45688:74;;45771:93;45860:3;45771:93;:::i;:::-;45889:2;45884:3;45880:12;45873:19;;45532:366;;;:::o;45904:419::-;46070:4;46108:2;46097:9;46093:18;46085:26;;46157:9;46151:4;46147:20;46143:1;46132:9;46128:17;46121:47;46185:131;46311:4;46185:131;:::i;:::-;46177:139;;45904:419;;;:::o;46329:225::-;46469:34;46465:1;46457:6;46453:14;46446:58;46538:8;46533:2;46525:6;46521:15;46514:33;46329:225;:::o;46560:366::-;46702:3;46723:67;46787:2;46782:3;46723:67;:::i;:::-;46716:74;;46799:93;46888:3;46799:93;:::i;:::-;46917:2;46912:3;46908:12;46901:19;;46560:366;;;:::o;46932:419::-;47098:4;47136:2;47125:9;47121:18;47113:26;;47185:9;47179:4;47175:20;47171:1;47160:9;47156:17;47149:47;47213:131;47339:4;47213:131;:::i;:::-;47205:139;;46932:419;;;:::o;47357:442::-;47506:4;47544:2;47533:9;47529:18;47521:26;;47557:71;47625:1;47614:9;47610:17;47601:6;47557:71;:::i;:::-;47638:72;47706:2;47695:9;47691:18;47682:6;47638:72;:::i;:::-;47720;47788:2;47777:9;47773:18;47764:6;47720:72;:::i;:::-;47357:442;;;;;;:::o;47805:180::-;47853:77;47850:1;47843:88;47950:4;47947:1;47940:15;47974:4;47971:1;47964:15;47991:114;48058:6;48092:5;48086:12;48076:22;;47991:114;;;:::o;48111:184::-;48210:11;48244:6;48239:3;48232:19;48284:4;48279:3;48275:14;48260:29;;48111:184;;;;:::o;48301:132::-;48368:4;48391:3;48383:11;;48421:4;48416:3;48412:14;48404:22;;48301:132;;;:::o;48439:108::-;48516:24;48534:5;48516:24;:::i;:::-;48511:3;48504:37;48439:108;;:::o;48553:179::-;48622:10;48643:46;48685:3;48677:6;48643:46;:::i;:::-;48721:4;48716:3;48712:14;48698:28;;48553:179;;;;:::o;48738:113::-;48808:4;48840;48835:3;48831:14;48823:22;;48738:113;;;:::o;48887:732::-;49006:3;49035:54;49083:5;49035:54;:::i;:::-;49105:86;49184:6;49179:3;49105:86;:::i;:::-;49098:93;;49215:56;49265:5;49215:56;:::i;:::-;49294:7;49325:1;49310:284;49335:6;49332:1;49329:13;49310:284;;;49411:6;49405:13;49438:63;49497:3;49482:13;49438:63;:::i;:::-;49431:70;;49524:60;49577:6;49524:60;:::i;:::-;49514:70;;49370:224;49357:1;49354;49350:9;49345:14;;49310:284;;;49314:14;49610:3;49603:10;;49011:608;;;48887:732;;;;:::o;49625:831::-;49888:4;49926:3;49915:9;49911:19;49903:27;;49940:71;50008:1;49997:9;49993:17;49984:6;49940:71;:::i;:::-;50021:80;50097:2;50086:9;50082:18;50073:6;50021:80;:::i;:::-;50148:9;50142:4;50138:20;50133:2;50122:9;50118:18;50111:48;50176:108;50279:4;50270:6;50176:108;:::i;:::-;50168:116;;50294:72;50362:2;50351:9;50347:18;50338:6;50294:72;:::i;:::-;50376:73;50444:3;50433:9;50429:19;50420:6;50376:73;:::i;:::-;49625:831;;;;;;;;:::o

Swarm Source

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