ETH Price: $3,473.16 (+4.18%)

Token

Toasted Toonz (TOONZ)
 

Overview

Max Total Supply

4,200 TOONZ

Holders

1,026

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
mneedsmorecoffee.eth
Balance
2 TOONZ
0x9718a8fa641a1287715148d696aa99d44dd68622
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ToastedToonz

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-03
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf)
        internal
        pure
        returns (bytes32)
    {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b)
        private
        pure
        returns (bytes32 value)
    {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. 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 substraction 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;
        }
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IERC721 is IERC165 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

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

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

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

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 private currentIndex = 1;

    uint256 internal immutable collectionSize;
    uint256 internal immutable maxBatchSize;
    string private _name;
    string private _symbol;
    mapping(uint256 => TokenOwnership) private _ownerships;
    mapping(address => AddressData) private _addressData;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_,
        uint256 collectionSize_
    ) {
        require(
            collectionSize_ > 0,
            "ERC721A: collection must have a nonzero supply"
        );
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }

    function totalSupply() public view override returns (uint256) {
        return currentIndex - 1;
    }

    function tokenByIndex(uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < totalSupply(), "ERC721A: global index out of bounds");
        return index;
    }

    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) public view override returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: balance query for the zero address"
        );
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: number minted query for the zero address"
        );
        return uint256(_addressData[owner].numberMinted);
    }

    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

        uint256 lowestTokenToCheck;
        if (tokenId >= maxBatchSize) {
            lowestTokenToCheck = tokenId - maxBatchSize + 1;
        }

        for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }

        revert("ERC721A: unable to determine the owner of token");
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(
                    abi.encodePacked(
                        baseURI,
                        tokenId.toString(),
                        _getUriExtension()
                    )
                )
                : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function _getUriExtension() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, "ERC721A: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721A: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId, owner);
    }

    function getApproved(uint256 tokenId)
        public
        view
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721A: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        require(operator != _msgSender(), "ERC721A: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        require(!_exists(startTokenId), "ERC721A: token already minted");
        require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        AddressData memory addressData = _addressData[to];
        _addressData[to] = AddressData(
            addressData.balance + uint128(quantity),
            addressData.numberMinted + uint128(quantity)
        );
        _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            require(
                _checkOnERC721Received(address(0), to, updatedIndex, _data),
                "ERC721A: transfer to non ERC721Receiver implementer"
            );
            updatedIndex++;
        }

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(
            isApprovedOrOwner,
            "ERC721A: transfer caller is not owner nor approved"
        );

        require(
            prevOwnership.addr == from,
            "ERC721A: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721A: transfer to the zero address");

        _beforeTokenTransfers(from, to, tokenId, 1);
        _approve(address(0), tokenId, prevOwnership.addr);

        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    uint256 public nextOwnerToExplicitlySet = 0;

    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > collectionSize - 1) {
            endIndex = collectionSize - 1;
        }
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(
                    ownership.addr,
                    ownership.startTimestamp
                );
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721A: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract ToastedToonz is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;
    using SafeMath for uint256;

 

    uint256 public MAX_PER_Transaction = 3; // maximum amount that user can mint per transaction
    uint256 public MAX_PER_Wallet = 3;
    
    

    //prices
    uint256 public priceWL = 0.00 ether;
    uint256 public pricePS = 0.00 ether;
    uint256 public price = 0.01 ether; 

    

    uint256 private constant TotalCollectionSize_ = 4200; // total number of nfts
    uint256 private constant MaxMintPerBatch_ = 200; //max mint per traction

    uint256 private reserveNFTs;
    address public teamWallet;

    bool public onlyWhitelisted = true;
    bool public paused = true;
    bool public presaleIsActive = false;

    uint256 public whitelistSpots = 3000;

    string private baseTokenURI;
    

    bytes32 public merkleRoot;

    constructor(string memory _uri, address _teamWallet)
        ERC721A(
            "Toasted Toonz",
            "TOONZ",
            MaxMintPerBatch_,
            TotalCollectionSize_
        )
    {
       teamWallet = _teamWallet;
        setBaseURI(_uri);
        reserveNFT(200);
        
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721A)
        returns (bool)
    {
        return
            interfaceId == 0x2a55205a || super.supportsInterface(interfaceId);
    }

    function setMerkleRoot(bytes32 m) public onlyOwner {
        merkleRoot = m;
    }

    function getMerkleRoot() public view returns (bytes32) {
        return merkleRoot;
    }

    function reserveNFT(uint256 quantity) public onlyOwner {
        require(
            totalSupply() + quantity <= collectionSize,
            "reached max supply"
        );
        require(reserveNFTs + quantity <= 200);
        reserveNFTs = reserveNFTs + quantity;
        _safeMint(teamWallet, quantity);
    }

    function mint(uint256 quantity) public payable {
        require(!paused, "mint is paused");
        require(!onlyWhitelisted, "Public Minting not started");
        require(
            totalSupply() + quantity <= TotalCollectionSize_,
            "reached max supply"
        );
        require(numberMinted(msg.sender) + quantity <= MAX_PER_Wallet, "limit per wallet exceeded");
        require(quantity <= MAX_PER_Transaction, "can not mint this many");
        if(presaleIsActive) {
            
        require(msg.value >= pricePS * quantity, "Need to send more ETH.");

        } else {
       
        require(msg.value >= price * quantity, "Need to send more ETH.");
        
        }
        _safeMint(msg.sender, quantity);
    }

    function whitelistMint(uint256 quantity, bytes32[] calldata merkleproof)
        public
        payable
    {
        require(!paused, "minting is paused");
        require(onlyWhitelisted, "sale is public");
        require(
            isValid(merkleproof, keccak256(abi.encodePacked(msg.sender))),
            "Not whitelisted"
        );
        require(
            totalSupply() + quantity <= whitelistSpots,
            "Whitelist sold out"
        );

        require(
            totalSupply() + quantity <= TotalCollectionSize_,
            "reached max supply"
        );
        require(numberMinted(msg.sender) + quantity <= MAX_PER_Wallet, "limit per wallet exceeded");
        
        require(quantity <= MAX_PER_Transaction, "can not mint this many");
        require(msg.value >= priceWL * quantity, "Need to send more ETH.");

        _safeMint(msg.sender, quantity);
    }

    function isValid(bytes32[] memory merkleproof, bytes32 leaf)
        public
        view
        returns (bool)
    {
        return MerkleProof.verify(merkleproof, merkleRoot, leaf);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
       
            string memory baseURI = _baseURI();
            return
                bytes(baseURI).length > 0
                    ? string(
                        abi.encodePacked(baseURI, tokenId.toString())
                    )
                    : "";
       
        
    }



    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }

    function getOwnershipData(uint256 tokenId)
        external
        view
        returns (TokenOwnership memory)
    {
        return ownershipOf(tokenId);
    }

    function withdraw() public onlyOwner nonReentrant {
        // This will payout the owner the contract balance.
        // Do not remove this otherwise you will not be able to withdraw the funds.
        // =============================================================================
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
        // =============================================================================
    }

    

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

    function setPriceWL(uint256 _newPriceWL) public onlyOwner {
        priceWL = _newPriceWL;
    }

    function setPricePS(uint256 _newPriceWL) public onlyOwner {
        pricePS = _newPriceWL;
    }

    function setMAX_PER_Transaction(uint256 q) public onlyOwner {
        MAX_PER_Transaction = q;
    }

    function setWhitelistSpots(uint256 _newLimit) public onlyOwner {
        whitelistSpots = _newLimit;
    }

    function setMaxPerWallet(uint256 _newLimit) public onlyOwner {
        MAX_PER_Wallet = _newLimit;
    }

    function setTeamWallet(address _teamWallet) public onlyOwner {
        teamWallet = _teamWallet;
    }


    function pause(bool _state) public onlyOwner {
        paused = _state;
    }

    function setPresaleActive(bool _state) public onlyOwner {
        presaleIsActive = _state;
    }

    function setOnlyWhitelisted(bool _state) public onlyOwner {
        onlyWhitelisted = _state;
    }

    function giveaway(address beneficiary, uint256 quantity) public onlyOwner {
        _safeMint(beneficiary, quantity);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address","name":"_teamWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_Transaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_Wallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"},{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricePS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserveNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"setMAX_PER_Transaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"m","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPriceWL","type":"uint256"}],"name":"setPricePS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPriceWL","type":"uint256"}],"name":"setPriceWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamWallet","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setWhitelistSpots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistSpots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001805560006008556003600a556003600b556000600c556000600d55662386f26fc10000600e556001601060146101000a81548160ff0219169083151502179055506001601060156101000a81548160ff0219169083151502179055506000601060166101000a81548160ff021916908315150217905550610bb86011553480156200009057600080fd5b5060405162007472380380620074728339818101604052810190620000b6919062000f49565b6040518060400160405280600d81526020017f546f617374656420546f6f6e7a000000000000000000000000000000000000008152506040518060400160405280600581526020017f544f4f4e5a00000000000000000000000000000000000000000000000000000081525060c8611068620001476200013b6200028d60201b60201c565b6200029560201b60201c565b600081116200018d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001849062001036565b60405180910390fd5b60008211620001d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ca90620010ce565b60405180910390fd5b8360029080519060200190620001eb92919062000c97565b5082600390805190602001906200020492919062000c97565b508160a08181525050806080818152505050505050600160098190555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000273826200035960201b60201c565b6200028560c86200040460201b60201c565b50506200175d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003696200028d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200038f6200056260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003df9062001140565b60405180910390fd5b80601290805190602001906200040092919062000c97565b5050565b620004146200028d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200043a6200056260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000493576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048a9062001140565b60405180910390fd5b60805181620004a76200058b60201b60201c565b620004b391906200119b565b1115620004f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ee9062001248565b60405180910390fd5b60c881600f546200050991906200119b565b11156200051557600080fd5b80600f546200052591906200119b565b600f819055506200055f601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682620005a260201b60201c565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600180546200059d91906200126a565b905090565b620005c4828260405180602001604052806000815250620005c860201b60201c565b5050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000639906200131b565b60405180910390fd5b620006538162000ac060201b60201c565b1562000696576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068d906200138d565b60405180910390fd5b60a051831115620006de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d59062001425565b60405180910390fd5b620006f3600085838662000ace60201b60201c565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151620007f2919062001463565b6fffffffffffffffffffffffffffffffff1681526020018583602001516200081b919062001463565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101562000a9b57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a462000a33600088848862000ad460201b60201c565b62000a75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6c9062001526565b60405180910390fd5b818062000a829062001548565b925050808062000a929062001548565b915050620009b9565b508060018190555062000ab8600087858862000c7e60201b60201c565b505050505050565b600060015482109050919050565b50505050565b600062000b028473ffffffffffffffffffffffffffffffffffffffff1662000c8460201b620027971760201c565b1562000c71578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000b346200028d60201b60201c565b8786866040518563ffffffff1660e01b815260040162000b58949392919062001615565b6020604051808303816000875af192505050801562000b9757506040513d601f19601f8201168201806040525081019062000b949190620016c6565b60015b62000c20573d806000811462000bca576040519150601f19603f3d011682016040523d82523d6000602084013e62000bcf565b606091505b5060008151141562000c18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0f9062001526565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000c76565b600190505b949350505050565b50505050565b600080823b905060008111915050919050565b82805462000ca59062001727565b90600052602060002090601f01602090048101928262000cc9576000855562000d15565b82601f1062000ce457805160ff191683800117855562000d15565b8280016001018555821562000d15579182015b8281111562000d1457825182559160200191906001019062000cf7565b5b50905062000d24919062000d28565b5090565b5b8082111562000d4357600081600090555060010162000d29565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000db08262000d65565b810181811067ffffffffffffffff8211171562000dd25762000dd162000d76565b5b80604052505050565b600062000de762000d47565b905062000df5828262000da5565b919050565b600067ffffffffffffffff82111562000e185762000e1762000d76565b5b62000e238262000d65565b9050602081019050919050565b60005b8381101562000e5057808201518184015260208101905062000e33565b8381111562000e60576000848401525b50505050565b600062000e7d62000e778462000dfa565b62000ddb565b90508281526020810184848401111562000e9c5762000e9b62000d60565b5b62000ea984828562000e30565b509392505050565b600082601f83011262000ec95762000ec862000d5b565b5b815162000edb84826020860162000e66565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f118262000ee4565b9050919050565b62000f238162000f04565b811462000f2f57600080fd5b50565b60008151905062000f438162000f18565b92915050565b6000806040838503121562000f635762000f6262000d51565b5b600083015167ffffffffffffffff81111562000f845762000f8362000d56565b5b62000f928582860162000eb1565b925050602062000fa58582860162000f32565b9150509250929050565b600082825260208201905092915050565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60006200101e602e8362000faf565b91506200102b8262000fc0565b604082019050919050565b6000602082019050818103600083015262001051816200100f565b9050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b6000620010b660278362000faf565b9150620010c38262001058565b604082019050919050565b60006020820190508181036000830152620010e981620010a7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200112860208362000faf565b91506200113582620010f0565b602082019050919050565b600060208201905081810360008301526200115b8162001119565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011a88262001162565b9150620011b58362001162565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620011ed57620011ec6200116c565b5b828201905092915050565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b60006200123060128362000faf565b91506200123d82620011f8565b602082019050919050565b60006020820190508181036000830152620012638162001221565b9050919050565b6000620012778262001162565b9150620012848362001162565b9250828210156200129a57620012996200116c565b5b828203905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006200130360218362000faf565b91506200131082620012a5565b604082019050919050565b600060208201905081810360008301526200133681620012f4565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b600062001375601d8362000faf565b915062001382826200133d565b602082019050919050565b60006020820190508181036000830152620013a88162001366565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b60006200140d60228362000faf565b91506200141a82620013af565b604082019050919050565b600060208201905081810360008301526200144081620013fe565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000620014708262001447565b91506200147d8362001447565b9250826fffffffffffffffffffffffffffffffff03821115620014a557620014a46200116c565b5b828201905092915050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b60006200150e60338362000faf565b91506200151b82620014b0565b604082019050919050565b600060208201905081810360008301526200154181620014ff565b9050919050565b6000620015558262001162565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200158b576200158a6200116c565b5b600182019050919050565b620015a18162000f04565b82525050565b620015b28162001162565b82525050565b600081519050919050565b600082825260208201905092915050565b6000620015e182620015b8565b620015ed8185620015c3565b9350620015ff81856020860162000e30565b6200160a8162000d65565b840191505092915050565b60006080820190506200162c600083018762001596565b6200163b602083018662001596565b6200164a6040830185620015a7565b81810360608301526200165e8184620015d4565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620016a08162001669565b8114620016ac57600080fd5b50565b600081519050620016c08162001695565b92915050565b600060208284031215620016df57620016de62000d51565b5b6000620016ef84828501620016af565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200174057607f821691505b60208210811415620017575762001756620016f8565b5b50919050565b60805160a051615ce16200179160003960008181612fe7015281816130100152613801015260006113b90152615ce16000f3fe6080604052600436106102ff5760003560e01c80635c975abb11610190578063a0712d68116100dc578063d2cab05611610095578063dfc5f9301161006f578063dfc5f93014610b5e578063e268e4d314610b89578063e985e9c514610bb2578063f2fde38b14610bef576102ff565b8063d2cab05614610ada578063d7224ba014610af6578063dc33e68114610b21576102ff565b8063a0712d68146109c7578063a22cb465146109e3578063b376ff8214610a0c578063b88d4fde14610a37578063b8a20ed014610a60578063c87b56dd14610a9d576102ff565b806381d8488f116101495780639231ab2a116101235780639231ab2a1461090957806395d89b41146109465780639c70b51214610971578063a035b1fe1461099c576102ff565b806381d8488f1461088c5780638da5cb5b146108b557806391b7f5ed146108e0576102ff565b80635c975abb1461077e5780636352211e146107a957806364dd014e146107e657806370a082311461080f578063715018a61461084c5780637cb6475914610863576102ff565b80632f745c591161024f57806342842e0e1161020857806351d7ff93116101e257806351d7ff93146106d657806355f804b314610701578063599270441461072a5780635ac0605d14610755576102ff565b806342842e0e14610645578063495906571461066e5780634f6ccce714610699576102ff565b80632f745c591461054b57806330f72cd414610588578063397be3fd146105b35780633c952764146105dc5780633ccfd60b146106055780633f8121a21461061c576102ff565b80631525ff7d116102bc5780631c0e2a11116102965780631c0e2a11146104a357806323b872dd146104ce57806325dc45ce146104f75780632eb4a7ab14610520576102ff565b80631525ff7d1461042457806317e04a711461044d57806318160ddd14610478576102ff565b806301ffc9a71461030457806302329a2914610341578063050225ea1461036a57806306fdde0314610393578063081812fc146103be578063095ea7b3146103fb575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613e00565b610c18565b6040516103389190613e48565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613e8f565b610c5a565b005b34801561037657600080fd5b50610391600480360381019061038c9190613f50565b610cf3565b005b34801561039f57600080fd5b506103a8610d7d565b6040516103b59190614029565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e0919061404b565b610e0f565b6040516103f29190614087565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190613f50565b610e94565b005b34801561043057600080fd5b5061044b600480360381019061044691906140a2565b610fad565b005b34801561045957600080fd5b5061046261106d565b60405161046f91906140de565b60405180910390f35b34801561048457600080fd5b5061048d611073565b60405161049a91906140de565b60405180910390f35b3480156104af57600080fd5b506104b8611088565b6040516104c591906140de565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f091906140f9565b61108e565b005b34801561050357600080fd5b5061051e6004803603810190610519919061404b565b61109e565b005b34801561052c57600080fd5b50610535611124565b6040516105429190614165565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190613f50565b61112a565b60405161057f91906140de565b60405180910390f35b34801561059457600080fd5b5061059d611328565b6040516105aa9190613e48565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d5919061404b565b61133b565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190613e8f565b61148a565b005b34801561061157600080fd5b5061061a611523565b005b34801561062857600080fd5b50610643600480360381019061063e9190613e8f565b611675565b005b34801561065157600080fd5b5061066c600480360381019061066791906140f9565b61170e565b005b34801561067a57600080fd5b5061068361172e565b6040516106909190614165565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb919061404b565b611738565b6040516106cd91906140de565b60405180910390f35b3480156106e257600080fd5b506106eb61178b565b6040516106f891906140de565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906142b5565b611791565b005b34801561073657600080fd5b5061073f611827565b60405161074c9190614087565b60405180910390f35b34801561076157600080fd5b5061077c6004803603810190610777919061404b565b61184d565b005b34801561078a57600080fd5b506107936118d3565b6040516107a09190613e48565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb919061404b565b6118e6565b6040516107dd9190614087565b60405180910390f35b3480156107f257600080fd5b5061080d6004803603810190610808919061404b565b6118fc565b005b34801561081b57600080fd5b50610836600480360381019061083191906140a2565b611982565b60405161084391906140de565b60405180910390f35b34801561085857600080fd5b50610861611a6b565b005b34801561086f57600080fd5b5061088a6004803603810190610885919061432a565b611af3565b005b34801561089857600080fd5b506108b360048036038101906108ae919061404b565b611b79565b005b3480156108c157600080fd5b506108ca611bff565b6040516108d79190614087565b60405180910390f35b3480156108ec57600080fd5b506109076004803603810190610902919061404b565b611c28565b005b34801561091557600080fd5b50610930600480360381019061092b919061404b565b611cae565b60405161093d91906143b8565b60405180910390f35b34801561095257600080fd5b5061095b611cc6565b6040516109689190614029565b60405180910390f35b34801561097d57600080fd5b50610986611d58565b6040516109939190613e48565b60405180910390f35b3480156109a857600080fd5b506109b1611d6b565b6040516109be91906140de565b60405180910390f35b6109e160048036038101906109dc919061404b565b611d71565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a0591906143d3565b611fcd565b005b348015610a1857600080fd5b50610a2161214e565b604051610a2e91906140de565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a5991906144b4565b612154565b005b348015610a6c57600080fd5b50610a876004803603810190610a8291906145ff565b6121b0565b604051610a949190613e48565b60405180910390f35b348015610aa957600080fd5b50610ac46004803603810190610abf919061404b565b6121c7565b604051610ad19190614029565b60405180910390f35b610af46004803603810190610aef91906146b6565b61226e565b005b348015610b0257600080fd5b50610b0b612567565b604051610b1891906140de565b60405180910390f35b348015610b2d57600080fd5b50610b486004803603810190610b4391906140a2565b61256d565b604051610b5591906140de565b60405180910390f35b348015610b6a57600080fd5b50610b7361257f565b604051610b8091906140de565b60405180910390f35b348015610b9557600080fd5b50610bb06004803603810190610bab919061404b565b612585565b005b348015610bbe57600080fd5b50610bd96004803603810190610bd49190614716565b61260b565b604051610be69190613e48565b60405180910390f35b348015610bfb57600080fd5b50610c166004803603810190610c1191906140a2565b61269f565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c535750610c52826127aa565b5b9050919050565b610c626128f4565b73ffffffffffffffffffffffffffffffffffffffff16610c80611bff565b73ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906147a2565b60405180910390fd5b80601060156101000a81548160ff02191690831515021790555050565b610cfb6128f4565b73ffffffffffffffffffffffffffffffffffffffff16610d19611bff565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d66906147a2565b60405180910390fd5b610d7982826128fc565b5050565b606060028054610d8c906147f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610db8906147f1565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b5050505050905090565b6000610e1a8261291a565b610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090614895565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e9f826118e6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790614927565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f2f6128f4565b73ffffffffffffffffffffffffffffffffffffffff161480610f5e5750610f5d81610f586128f4565b61260b565b5b610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f94906149b9565b60405180910390fd5b610fa8838383612928565b505050565b610fb56128f4565b73ffffffffffffffffffffffffffffffffffffffff16610fd3611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611020906147a2565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b6000600180546110839190614a08565b905090565b600d5481565b6110998383836129da565b505050565b6110a66128f4565b73ffffffffffffffffffffffffffffffffffffffff166110c4611bff565b73ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611111906147a2565b60405180910390fd5b80600a8190555050565b60135481565b600061113583611982565b8210611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90614aae565b60405180910390fd5b6000611180611073565b905060008060005b838110156112e6576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461127a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112d257868414156112c3578195505050505050611322565b83806112ce90614ace565b9450505b5080806112de90614ace565b915050611188565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990614b89565b60405180910390fd5b92915050565b601060169054906101000a900460ff1681565b6113436128f4565b73ffffffffffffffffffffffffffffffffffffffff16611361611bff565b73ffffffffffffffffffffffffffffffffffffffff16146113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae906147a2565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816113e1611073565b6113eb9190614ba9565b111561142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390614c4b565b60405180910390fd5b60c881600f5461143c9190614ba9565b111561144757600080fd5b80600f546114559190614ba9565b600f81905550611487601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826128fc565b50565b6114926128f4565b73ffffffffffffffffffffffffffffffffffffffff166114b0611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd906147a2565b60405180910390fd5b80601060146101000a81548160ff02191690831515021790555050565b61152b6128f4565b73ffffffffffffffffffffffffffffffffffffffff16611549611bff565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906147a2565b60405180910390fd5b600260095414156115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90614cb7565b60405180910390fd5b600260098190555060006115f7611bff565b73ffffffffffffffffffffffffffffffffffffffff164760405161161a90614d08565b60006040518083038185875af1925050503d8060008114611657576040519150601f19603f3d011682016040523d82523d6000602084013e61165c565b606091505b505090508061166a57600080fd5b506001600981905550565b61167d6128f4565b73ffffffffffffffffffffffffffffffffffffffff1661169b611bff565b73ffffffffffffffffffffffffffffffffffffffff16146116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e8906147a2565b60405180910390fd5b80601060166101000a81548160ff02191690831515021790555050565b61172983838360405180602001604052806000815250612154565b505050565b6000601354905090565b6000611742611073565b8210611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90614d8f565b60405180910390fd5b819050919050565b600a5481565b6117996128f4565b73ffffffffffffffffffffffffffffffffffffffff166117b7611bff565b73ffffffffffffffffffffffffffffffffffffffff161461180d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611804906147a2565b60405180910390fd5b8060129080519060200190611823929190613cb7565b5050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118556128f4565b73ffffffffffffffffffffffffffffffffffffffff16611873611bff565b73ffffffffffffffffffffffffffffffffffffffff16146118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c0906147a2565b60405180910390fd5b80600d8190555050565b601060159054906101000a900460ff1681565b60006118f182612f93565b600001519050919050565b6119046128f4565b73ffffffffffffffffffffffffffffffffffffffff16611922611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f906147a2565b60405180910390fd5b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90614e21565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611a736128f4565b73ffffffffffffffffffffffffffffffffffffffff16611a91611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade906147a2565b60405180910390fd5b611af16000613196565b565b611afb6128f4565b73ffffffffffffffffffffffffffffffffffffffff16611b19611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b66906147a2565b60405180910390fd5b8060138190555050565b611b816128f4565b73ffffffffffffffffffffffffffffffffffffffff16611b9f611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906147a2565b60405180910390fd5b80600c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c306128f4565b73ffffffffffffffffffffffffffffffffffffffff16611c4e611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b906147a2565b60405180910390fd5b80600e8190555050565b611cb6613d3d565b611cbf82612f93565b9050919050565b606060038054611cd5906147f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611d01906147f1565b8015611d4e5780601f10611d2357610100808354040283529160200191611d4e565b820191906000526020600020905b815481529060010190602001808311611d3157829003601f168201915b5050505050905090565b601060149054906101000a900460ff1681565b600e5481565b601060159054906101000a900460ff1615611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890614e8d565b60405180910390fd5b601060149054906101000a900460ff1615611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890614ef9565b60405180910390fd5b61106881611e1d611073565b611e279190614ba9565b1115611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90614c4b565b60405180910390fd5b600b5481611e753361256d565b611e7f9190614ba9565b1115611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790614f65565b60405180910390fd5b600a54811115611f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efc90614fd1565b60405180910390fd5b601060169054906101000a900460ff1615611f6f5780600d54611f289190614ff1565b341015611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190615097565b60405180910390fd5b611fc0565b80600e54611f7d9190614ff1565b341015611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690615097565b60405180910390fd5b5b611fca33826128fc565b50565b611fd56128f4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90615103565b60405180910390fd5b80600760006120506128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120fd6128f4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121429190613e48565b60405180910390a35050565b60115481565b61215f8484846129da565b61216b8484848461325a565b6121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190615195565b60405180910390fd5b50505050565b60006121bf83601354846133e2565b905092915050565b60606121d28261291a565b612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890615227565b60405180910390fd5b600061221b6133f9565b9050600081511161223b5760405180602001604052806000815250612266565b806122458461348b565b604051602001612256929190615283565b6040516020818303038152906040525b915050919050565b601060159054906101000a900460ff16156122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b5906152f3565b60405180910390fd5b601060149054906101000a900460ff1661230d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123049061535f565b60405180910390fd5b61237e828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050503360405160200161236391906153c7565b604051602081830303815290604052805190602001206121b0565b6123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b49061542e565b60405180910390fd5b601154836123c9611073565b6123d39190614ba9565b1115612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b9061549a565b60405180910390fd5b61106883612420611073565b61242a9190614ba9565b111561246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290614c4b565b60405180910390fd5b600b54836124783361256d565b6124829190614ba9565b11156124c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ba90614f65565b60405180910390fd5b600a54831115612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90614fd1565b60405180910390fd5b82600c546125169190614ff1565b341015612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90615097565b60405180910390fd5b61256233846128fc565b505050565b60085481565b6000612578826135ec565b9050919050565b600c5481565b61258d6128f4565b73ffffffffffffffffffffffffffffffffffffffff166125ab611bff565b73ffffffffffffffffffffffffffffffffffffffff1614612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f8906147a2565b60405180910390fd5b80600b8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126a76128f4565b73ffffffffffffffffffffffffffffffffffffffff166126c5611bff565b73ffffffffffffffffffffffffffffffffffffffff161461271b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612712906147a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561278b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127829061552c565b60405180910390fd5b61279481613196565b50565b600080823b905060008111915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061287557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128dd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128ed57506128ec826136d5565b5b9050919050565b600033905090565b61291682826040518060200160405280600081525061373f565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006129e582612f93565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612a0c6128f4565b73ffffffffffffffffffffffffffffffffffffffff161480612a685750612a316128f4565b73ffffffffffffffffffffffffffffffffffffffff16612a5084610e0f565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a845750612a838260000151612a7e6128f4565b61260b565b5b905080612ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abd906155be565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f90615650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f906156e2565b60405180910390fd5b612bb58585856001613c1f565b612bc56000848460000151612928565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612c33919061571e565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612cd79190615752565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612ddd9190614ba9565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f2357612e538161291a565b15612f22576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f8b8686866001613c25565b505050505050565b612f9b613d3d565b612fa48261291a565b612fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fda9061580a565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106130475760017f00000000000000000000000000000000000000000000000000000000000000008461303a9190614a08565b6130449190614ba9565b90505b60008390505b818110613155576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461314157809350505050613191565b50808061314d9061582a565b91505061304d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906158c6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061327b8473ffffffffffffffffffffffffffffffffffffffff16612797565b156133d5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132a46128f4565b8786866040518563ffffffff1660e01b81526004016132c6949392919061593b565b6020604051808303816000875af192505050801561330257506040513d601f19601f820116820180604052508101906132ff919061599c565b60015b613385573d8060008114613332576040519150601f19603f3d011682016040523d82523d6000602084013e613337565b606091505b5060008151141561337d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337490615195565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133da565b600190505b949350505050565b6000826133ef8584613c2b565b1490509392505050565b606060128054613408906147f1565b80601f0160208091040260200160405190810160405280929190818152602001828054613434906147f1565b80156134815780601f1061345657610100808354040283529160200191613481565b820191906000526020600020905b81548152906001019060200180831161346457829003601f168201915b5050505050905090565b606060008214156134d3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135e7565b600082905060005b600082146135055780806134ee90614ace565b915050600a826134fe91906159f8565b91506134db565b60008167ffffffffffffffff8111156135215761352061418a565b5b6040519080825280601f01601f1916602001820160405280156135535781602001600182028036833780820191505090505b5090505b600085146135e05760018261356c9190614a08565b9150600a8561357b9190615a29565b60306135879190614ba9565b60f81b81838151811061359d5761359c615a5a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135d991906159f8565b9450613557565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561365d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365490615afb565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156137b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ad90615b8d565b60405180910390fd5b6137bf8161291a565b156137ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f690615bf9565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385990615c8b565b60405180910390fd5b61386f6000858386613c1f565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161396c9190615752565b6fffffffffffffffffffffffffffffffff1681526020018583602001516139939190615752565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613c0257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613ba2600088848861325a565b613be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd890615195565b60405180910390fd5b8180613bec90614ace565b9250508080613bfa90614ace565b915050613b31565b5080600181905550613c176000878588613c25565b505050505050565b50505050565b50505050565b60008082905060005b8451811015613c95576000858281518110613c5257613c51615a5a565b5b60200260200101519050808311613c7457613c6d8382613ca0565b9250613c81565b613c7e8184613ca0565b92505b508080613c8d90614ace565b915050613c34565b508091505092915050565b600082600052816020526040600020905092915050565b828054613cc3906147f1565b90600052602060002090601f016020900481019282613ce55760008555613d2c565b82601f10613cfe57805160ff1916838001178555613d2c565b82800160010185558215613d2c579182015b82811115613d2b578251825591602001919060010190613d10565b5b509050613d399190613d77565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613d90576000816000905550600101613d78565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613ddd81613da8565b8114613de857600080fd5b50565b600081359050613dfa81613dd4565b92915050565b600060208284031215613e1657613e15613d9e565b5b6000613e2484828501613deb565b91505092915050565b60008115159050919050565b613e4281613e2d565b82525050565b6000602082019050613e5d6000830184613e39565b92915050565b613e6c81613e2d565b8114613e7757600080fd5b50565b600081359050613e8981613e63565b92915050565b600060208284031215613ea557613ea4613d9e565b5b6000613eb384828501613e7a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ee782613ebc565b9050919050565b613ef781613edc565b8114613f0257600080fd5b50565b600081359050613f1481613eee565b92915050565b6000819050919050565b613f2d81613f1a565b8114613f3857600080fd5b50565b600081359050613f4a81613f24565b92915050565b60008060408385031215613f6757613f66613d9e565b5b6000613f7585828601613f05565b9250506020613f8685828601613f3b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fca578082015181840152602081019050613faf565b83811115613fd9576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ffb82613f90565b6140058185613f9b565b9350614015818560208601613fac565b61401e81613fdf565b840191505092915050565b600060208201905081810360008301526140438184613ff0565b905092915050565b60006020828403121561406157614060613d9e565b5b600061406f84828501613f3b565b91505092915050565b61408181613edc565b82525050565b600060208201905061409c6000830184614078565b92915050565b6000602082840312156140b8576140b7613d9e565b5b60006140c684828501613f05565b91505092915050565b6140d881613f1a565b82525050565b60006020820190506140f360008301846140cf565b92915050565b60008060006060848603121561411257614111613d9e565b5b600061412086828701613f05565b935050602061413186828701613f05565b925050604061414286828701613f3b565b9150509250925092565b6000819050919050565b61415f8161414c565b82525050565b600060208201905061417a6000830184614156565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141c282613fdf565b810181811067ffffffffffffffff821117156141e1576141e061418a565b5b80604052505050565b60006141f4613d94565b905061420082826141b9565b919050565b600067ffffffffffffffff8211156142205761421f61418a565b5b61422982613fdf565b9050602081019050919050565b82818337600083830152505050565b600061425861425384614205565b6141ea565b90508281526020810184848401111561427457614273614185565b5b61427f848285614236565b509392505050565b600082601f83011261429c5761429b614180565b5b81356142ac848260208601614245565b91505092915050565b6000602082840312156142cb576142ca613d9e565b5b600082013567ffffffffffffffff8111156142e9576142e8613da3565b5b6142f584828501614287565b91505092915050565b6143078161414c565b811461431257600080fd5b50565b600081359050614324816142fe565b92915050565b6000602082840312156143405761433f613d9e565b5b600061434e84828501614315565b91505092915050565b61436081613edc565b82525050565b600067ffffffffffffffff82169050919050565b61438381614366565b82525050565b60408201600082015161439f6000850182614357565b5060208201516143b2602085018261437a565b50505050565b60006040820190506143cd6000830184614389565b92915050565b600080604083850312156143ea576143e9613d9e565b5b60006143f885828601613f05565b925050602061440985828601613e7a565b9150509250929050565b600067ffffffffffffffff82111561442e5761442d61418a565b5b61443782613fdf565b9050602081019050919050565b600061445761445284614413565b6141ea565b90508281526020810184848401111561447357614472614185565b5b61447e848285614236565b509392505050565b600082601f83011261449b5761449a614180565b5b81356144ab848260208601614444565b91505092915050565b600080600080608085870312156144ce576144cd613d9e565b5b60006144dc87828801613f05565b94505060206144ed87828801613f05565b93505060406144fe87828801613f3b565b925050606085013567ffffffffffffffff81111561451f5761451e613da3565b5b61452b87828801614486565b91505092959194509250565b600067ffffffffffffffff8211156145525761455161418a565b5b602082029050602081019050919050565b600080fd5b600061457b61457684614537565b6141ea565b9050808382526020820190506020840283018581111561459e5761459d614563565b5b835b818110156145c757806145b38882614315565b8452602084019350506020810190506145a0565b5050509392505050565b600082601f8301126145e6576145e5614180565b5b81356145f6848260208601614568565b91505092915050565b6000806040838503121561461657614615613d9e565b5b600083013567ffffffffffffffff81111561463457614633613da3565b5b614640858286016145d1565b925050602061465185828601614315565b9150509250929050565b600080fd5b60008083601f84011261467657614675614180565b5b8235905067ffffffffffffffff8111156146935761469261465b565b5b6020830191508360208202830111156146af576146ae614563565b5b9250929050565b6000806000604084860312156146cf576146ce613d9e565b5b60006146dd86828701613f3b565b935050602084013567ffffffffffffffff8111156146fe576146fd613da3565b5b61470a86828701614660565b92509250509250925092565b6000806040838503121561472d5761472c613d9e565b5b600061473b85828601613f05565b925050602061474c85828601613f05565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061478c602083613f9b565b915061479782614756565b602082019050919050565b600060208201905081810360008301526147bb8161477f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061480957607f821691505b6020821081141561481d5761481c6147c2565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b600061487f602d83613f9b565b915061488a82614823565b604082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000614911602283613f9b565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006149a3603983613f9b565b91506149ae82614947565b604082019050919050565b600060208201905081810360008301526149d281614996565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a1382613f1a565b9150614a1e83613f1a565b925082821015614a3157614a306149d9565b5b828203905092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a98602283613f9b565b9150614aa382614a3c565b604082019050919050565b60006020820190508181036000830152614ac781614a8b565b9050919050565b6000614ad982613f1a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b0c57614b0b6149d9565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000614b73602e83613f9b565b9150614b7e82614b17565b604082019050919050565b60006020820190508181036000830152614ba281614b66565b9050919050565b6000614bb482613f1a565b9150614bbf83613f1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bf457614bf36149d9565b5b828201905092915050565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b6000614c35601283613f9b565b9150614c4082614bff565b602082019050919050565b60006020820190508181036000830152614c6481614c28565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ca1601f83613f9b565b9150614cac82614c6b565b602082019050919050565b60006020820190508181036000830152614cd081614c94565b9050919050565b600081905092915050565b50565b6000614cf2600083614cd7565b9150614cfd82614ce2565b600082019050919050565b6000614d1382614ce5565b9150819050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d79602383613f9b565b9150614d8482614d1d565b604082019050919050565b60006020820190508181036000830152614da881614d6c565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614e0b602b83613f9b565b9150614e1682614daf565b604082019050919050565b60006020820190508181036000830152614e3a81614dfe565b9050919050565b7f6d696e7420697320706175736564000000000000000000000000000000000000600082015250565b6000614e77600e83613f9b565b9150614e8282614e41565b602082019050919050565b60006020820190508181036000830152614ea681614e6a565b9050919050565b7f5075626c6963204d696e74696e67206e6f742073746172746564000000000000600082015250565b6000614ee3601a83613f9b565b9150614eee82614ead565b602082019050919050565b60006020820190508181036000830152614f1281614ed6565b9050919050565b7f6c696d6974207065722077616c6c657420657863656564656400000000000000600082015250565b6000614f4f601983613f9b565b9150614f5a82614f19565b602082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b6000614fbb601683613f9b565b9150614fc682614f85565b602082019050919050565b60006020820190508181036000830152614fea81614fae565b9050919050565b6000614ffc82613f1a565b915061500783613f1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150405761503f6149d9565b5b828202905092915050565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b6000615081601683613f9b565b915061508c8261504b565b602082019050919050565b600060208201905081810360008301526150b081615074565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b60006150ed601a83613f9b565b91506150f8826150b7565b602082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061517f603383613f9b565b915061518a82615123565b604082019050919050565b600060208201905081810360008301526151ae81615172565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615211602f83613f9b565b915061521c826151b5565b604082019050919050565b6000602082019050818103600083015261524081615204565b9050919050565b600081905092915050565b600061525d82613f90565b6152678185615247565b9350615277818560208601613fac565b80840191505092915050565b600061528f8285615252565b915061529b8284615252565b91508190509392505050565b7f6d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b60006152dd601183613f9b565b91506152e8826152a7565b602082019050919050565b6000602082019050818103600083015261530c816152d0565b9050919050565b7f73616c65206973207075626c6963000000000000000000000000000000000000600082015250565b6000615349600e83613f9b565b915061535482615313565b602082019050919050565b600060208201905081810360008301526153788161533c565b9050919050565b60008160601b9050919050565b60006153978261537f565b9050919050565b60006153a98261538c565b9050919050565b6153c16153bc82613edc565b61539e565b82525050565b60006153d382846153b0565b60148201915081905092915050565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b6000615418600f83613f9b565b9150615423826153e2565b602082019050919050565b600060208201905081810360008301526154478161540b565b9050919050565b7f57686974656c69737420736f6c64206f75740000000000000000000000000000600082015250565b6000615484601283613f9b565b915061548f8261544e565b602082019050919050565b600060208201905081810360008301526154b381615477565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615516602683613f9b565b9150615521826154ba565b604082019050919050565b6000602082019050818103600083015261554581615509565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006155a8603283613f9b565b91506155b38261554c565b604082019050919050565b600060208201905081810360008301526155d78161559b565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b600061563a602683613f9b565b9150615645826155de565b604082019050919050565b600060208201905081810360008301526156698161562d565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156cc602583613f9b565b91506156d782615670565b604082019050919050565b600060208201905081810360008301526156fb816156bf565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600061572982615702565b915061573483615702565b925082821015615747576157466149d9565b5b828203905092915050565b600061575d82615702565b915061576883615702565b9250826fffffffffffffffffffffffffffffffff0382111561578d5761578c6149d9565b5b828201905092915050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006157f4602a83613f9b565b91506157ff82615798565b604082019050919050565b60006020820190508181036000830152615823816157e7565b9050919050565b600061583582613f1a565b91506000821415615849576158486149d9565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006158b0602f83613f9b565b91506158bb82615854565b604082019050919050565b600060208201905081810360008301526158df816158a3565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061590d826158e6565b61591781856158f1565b9350615927818560208601613fac565b61593081613fdf565b840191505092915050565b60006080820190506159506000830187614078565b61595d6020830186614078565b61596a60408301856140cf565b818103606083015261597c8184615902565b905095945050505050565b60008151905061599681613dd4565b92915050565b6000602082840312156159b2576159b1613d9e565b5b60006159c084828501615987565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a0382613f1a565b9150615a0e83613f1a565b925082615a1e57615a1d6159c9565b5b828204905092915050565b6000615a3482613f1a565b9150615a3f83613f1a565b925082615a4f57615a4e6159c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000615ae5603183613f9b565b9150615af082615a89565b604082019050919050565b60006020820190508181036000830152615b1481615ad8565b9050919050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b77602183613f9b565b9150615b8282615b1b565b604082019050919050565b60006020820190508181036000830152615ba681615b6a565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000615be3601d83613f9b565b9150615bee82615bad565b602082019050919050565b60006020820190508181036000830152615c1281615bd6565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c75602283613f9b565b9150615c8082615c19565b604082019050919050565b60006020820190508181036000830152615ca481615c68565b905091905056fea26469706673582212203cffe0a3a996a5f6ae3f5bc07cb3e5cb9fbc03c26d36935cce52c8e2064fe1c964736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000003cdbffdaed5ffdf7a74cb35db581273d5108c6150000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5469735a724e716959317a5953735638544b514862756f527a6b34364266637566706f5437427534375863762f00000000000000000000

Deployed Bytecode

0x6080604052600436106102ff5760003560e01c80635c975abb11610190578063a0712d68116100dc578063d2cab05611610095578063dfc5f9301161006f578063dfc5f93014610b5e578063e268e4d314610b89578063e985e9c514610bb2578063f2fde38b14610bef576102ff565b8063d2cab05614610ada578063d7224ba014610af6578063dc33e68114610b21576102ff565b8063a0712d68146109c7578063a22cb465146109e3578063b376ff8214610a0c578063b88d4fde14610a37578063b8a20ed014610a60578063c87b56dd14610a9d576102ff565b806381d8488f116101495780639231ab2a116101235780639231ab2a1461090957806395d89b41146109465780639c70b51214610971578063a035b1fe1461099c576102ff565b806381d8488f1461088c5780638da5cb5b146108b557806391b7f5ed146108e0576102ff565b80635c975abb1461077e5780636352211e146107a957806364dd014e146107e657806370a082311461080f578063715018a61461084c5780637cb6475914610863576102ff565b80632f745c591161024f57806342842e0e1161020857806351d7ff93116101e257806351d7ff93146106d657806355f804b314610701578063599270441461072a5780635ac0605d14610755576102ff565b806342842e0e14610645578063495906571461066e5780634f6ccce714610699576102ff565b80632f745c591461054b57806330f72cd414610588578063397be3fd146105b35780633c952764146105dc5780633ccfd60b146106055780633f8121a21461061c576102ff565b80631525ff7d116102bc5780631c0e2a11116102965780631c0e2a11146104a357806323b872dd146104ce57806325dc45ce146104f75780632eb4a7ab14610520576102ff565b80631525ff7d1461042457806317e04a711461044d57806318160ddd14610478576102ff565b806301ffc9a71461030457806302329a2914610341578063050225ea1461036a57806306fdde0314610393578063081812fc146103be578063095ea7b3146103fb575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613e00565b610c18565b6040516103389190613e48565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613e8f565b610c5a565b005b34801561037657600080fd5b50610391600480360381019061038c9190613f50565b610cf3565b005b34801561039f57600080fd5b506103a8610d7d565b6040516103b59190614029565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e0919061404b565b610e0f565b6040516103f29190614087565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190613f50565b610e94565b005b34801561043057600080fd5b5061044b600480360381019061044691906140a2565b610fad565b005b34801561045957600080fd5b5061046261106d565b60405161046f91906140de565b60405180910390f35b34801561048457600080fd5b5061048d611073565b60405161049a91906140de565b60405180910390f35b3480156104af57600080fd5b506104b8611088565b6040516104c591906140de565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f091906140f9565b61108e565b005b34801561050357600080fd5b5061051e6004803603810190610519919061404b565b61109e565b005b34801561052c57600080fd5b50610535611124565b6040516105429190614165565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190613f50565b61112a565b60405161057f91906140de565b60405180910390f35b34801561059457600080fd5b5061059d611328565b6040516105aa9190613e48565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d5919061404b565b61133b565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190613e8f565b61148a565b005b34801561061157600080fd5b5061061a611523565b005b34801561062857600080fd5b50610643600480360381019061063e9190613e8f565b611675565b005b34801561065157600080fd5b5061066c600480360381019061066791906140f9565b61170e565b005b34801561067a57600080fd5b5061068361172e565b6040516106909190614165565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb919061404b565b611738565b6040516106cd91906140de565b60405180910390f35b3480156106e257600080fd5b506106eb61178b565b6040516106f891906140de565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906142b5565b611791565b005b34801561073657600080fd5b5061073f611827565b60405161074c9190614087565b60405180910390f35b34801561076157600080fd5b5061077c6004803603810190610777919061404b565b61184d565b005b34801561078a57600080fd5b506107936118d3565b6040516107a09190613e48565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb919061404b565b6118e6565b6040516107dd9190614087565b60405180910390f35b3480156107f257600080fd5b5061080d6004803603810190610808919061404b565b6118fc565b005b34801561081b57600080fd5b50610836600480360381019061083191906140a2565b611982565b60405161084391906140de565b60405180910390f35b34801561085857600080fd5b50610861611a6b565b005b34801561086f57600080fd5b5061088a6004803603810190610885919061432a565b611af3565b005b34801561089857600080fd5b506108b360048036038101906108ae919061404b565b611b79565b005b3480156108c157600080fd5b506108ca611bff565b6040516108d79190614087565b60405180910390f35b3480156108ec57600080fd5b506109076004803603810190610902919061404b565b611c28565b005b34801561091557600080fd5b50610930600480360381019061092b919061404b565b611cae565b60405161093d91906143b8565b60405180910390f35b34801561095257600080fd5b5061095b611cc6565b6040516109689190614029565b60405180910390f35b34801561097d57600080fd5b50610986611d58565b6040516109939190613e48565b60405180910390f35b3480156109a857600080fd5b506109b1611d6b565b6040516109be91906140de565b60405180910390f35b6109e160048036038101906109dc919061404b565b611d71565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a0591906143d3565b611fcd565b005b348015610a1857600080fd5b50610a2161214e565b604051610a2e91906140de565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a5991906144b4565b612154565b005b348015610a6c57600080fd5b50610a876004803603810190610a8291906145ff565b6121b0565b604051610a949190613e48565b60405180910390f35b348015610aa957600080fd5b50610ac46004803603810190610abf919061404b565b6121c7565b604051610ad19190614029565b60405180910390f35b610af46004803603810190610aef91906146b6565b61226e565b005b348015610b0257600080fd5b50610b0b612567565b604051610b1891906140de565b60405180910390f35b348015610b2d57600080fd5b50610b486004803603810190610b4391906140a2565b61256d565b604051610b5591906140de565b60405180910390f35b348015610b6a57600080fd5b50610b7361257f565b604051610b8091906140de565b60405180910390f35b348015610b9557600080fd5b50610bb06004803603810190610bab919061404b565b612585565b005b348015610bbe57600080fd5b50610bd96004803603810190610bd49190614716565b61260b565b604051610be69190613e48565b60405180910390f35b348015610bfb57600080fd5b50610c166004803603810190610c1191906140a2565b61269f565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c535750610c52826127aa565b5b9050919050565b610c626128f4565b73ffffffffffffffffffffffffffffffffffffffff16610c80611bff565b73ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906147a2565b60405180910390fd5b80601060156101000a81548160ff02191690831515021790555050565b610cfb6128f4565b73ffffffffffffffffffffffffffffffffffffffff16610d19611bff565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d66906147a2565b60405180910390fd5b610d7982826128fc565b5050565b606060028054610d8c906147f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610db8906147f1565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b5050505050905090565b6000610e1a8261291a565b610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090614895565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e9f826118e6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790614927565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f2f6128f4565b73ffffffffffffffffffffffffffffffffffffffff161480610f5e5750610f5d81610f586128f4565b61260b565b5b610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f94906149b9565b60405180910390fd5b610fa8838383612928565b505050565b610fb56128f4565b73ffffffffffffffffffffffffffffffffffffffff16610fd3611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611020906147a2565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b6000600180546110839190614a08565b905090565b600d5481565b6110998383836129da565b505050565b6110a66128f4565b73ffffffffffffffffffffffffffffffffffffffff166110c4611bff565b73ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611111906147a2565b60405180910390fd5b80600a8190555050565b60135481565b600061113583611982565b8210611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90614aae565b60405180910390fd5b6000611180611073565b905060008060005b838110156112e6576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461127a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112d257868414156112c3578195505050505050611322565b83806112ce90614ace565b9450505b5080806112de90614ace565b915050611188565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990614b89565b60405180910390fd5b92915050565b601060169054906101000a900460ff1681565b6113436128f4565b73ffffffffffffffffffffffffffffffffffffffff16611361611bff565b73ffffffffffffffffffffffffffffffffffffffff16146113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae906147a2565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000001068816113e1611073565b6113eb9190614ba9565b111561142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390614c4b565b60405180910390fd5b60c881600f5461143c9190614ba9565b111561144757600080fd5b80600f546114559190614ba9565b600f81905550611487601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826128fc565b50565b6114926128f4565b73ffffffffffffffffffffffffffffffffffffffff166114b0611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd906147a2565b60405180910390fd5b80601060146101000a81548160ff02191690831515021790555050565b61152b6128f4565b73ffffffffffffffffffffffffffffffffffffffff16611549611bff565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906147a2565b60405180910390fd5b600260095414156115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90614cb7565b60405180910390fd5b600260098190555060006115f7611bff565b73ffffffffffffffffffffffffffffffffffffffff164760405161161a90614d08565b60006040518083038185875af1925050503d8060008114611657576040519150601f19603f3d011682016040523d82523d6000602084013e61165c565b606091505b505090508061166a57600080fd5b506001600981905550565b61167d6128f4565b73ffffffffffffffffffffffffffffffffffffffff1661169b611bff565b73ffffffffffffffffffffffffffffffffffffffff16146116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e8906147a2565b60405180910390fd5b80601060166101000a81548160ff02191690831515021790555050565b61172983838360405180602001604052806000815250612154565b505050565b6000601354905090565b6000611742611073565b8210611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90614d8f565b60405180910390fd5b819050919050565b600a5481565b6117996128f4565b73ffffffffffffffffffffffffffffffffffffffff166117b7611bff565b73ffffffffffffffffffffffffffffffffffffffff161461180d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611804906147a2565b60405180910390fd5b8060129080519060200190611823929190613cb7565b5050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118556128f4565b73ffffffffffffffffffffffffffffffffffffffff16611873611bff565b73ffffffffffffffffffffffffffffffffffffffff16146118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c0906147a2565b60405180910390fd5b80600d8190555050565b601060159054906101000a900460ff1681565b60006118f182612f93565b600001519050919050565b6119046128f4565b73ffffffffffffffffffffffffffffffffffffffff16611922611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f906147a2565b60405180910390fd5b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90614e21565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611a736128f4565b73ffffffffffffffffffffffffffffffffffffffff16611a91611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade906147a2565b60405180910390fd5b611af16000613196565b565b611afb6128f4565b73ffffffffffffffffffffffffffffffffffffffff16611b19611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b66906147a2565b60405180910390fd5b8060138190555050565b611b816128f4565b73ffffffffffffffffffffffffffffffffffffffff16611b9f611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906147a2565b60405180910390fd5b80600c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c306128f4565b73ffffffffffffffffffffffffffffffffffffffff16611c4e611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b906147a2565b60405180910390fd5b80600e8190555050565b611cb6613d3d565b611cbf82612f93565b9050919050565b606060038054611cd5906147f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611d01906147f1565b8015611d4e5780601f10611d2357610100808354040283529160200191611d4e565b820191906000526020600020905b815481529060010190602001808311611d3157829003601f168201915b5050505050905090565b601060149054906101000a900460ff1681565b600e5481565b601060159054906101000a900460ff1615611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890614e8d565b60405180910390fd5b601060149054906101000a900460ff1615611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890614ef9565b60405180910390fd5b61106881611e1d611073565b611e279190614ba9565b1115611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90614c4b565b60405180910390fd5b600b5481611e753361256d565b611e7f9190614ba9565b1115611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790614f65565b60405180910390fd5b600a54811115611f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efc90614fd1565b60405180910390fd5b601060169054906101000a900460ff1615611f6f5780600d54611f289190614ff1565b341015611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190615097565b60405180910390fd5b611fc0565b80600e54611f7d9190614ff1565b341015611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690615097565b60405180910390fd5b5b611fca33826128fc565b50565b611fd56128f4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90615103565b60405180910390fd5b80600760006120506128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120fd6128f4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121429190613e48565b60405180910390a35050565b60115481565b61215f8484846129da565b61216b8484848461325a565b6121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190615195565b60405180910390fd5b50505050565b60006121bf83601354846133e2565b905092915050565b60606121d28261291a565b612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890615227565b60405180910390fd5b600061221b6133f9565b9050600081511161223b5760405180602001604052806000815250612266565b806122458461348b565b604051602001612256929190615283565b6040516020818303038152906040525b915050919050565b601060159054906101000a900460ff16156122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b5906152f3565b60405180910390fd5b601060149054906101000a900460ff1661230d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123049061535f565b60405180910390fd5b61237e828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050503360405160200161236391906153c7565b604051602081830303815290604052805190602001206121b0565b6123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b49061542e565b60405180910390fd5b601154836123c9611073565b6123d39190614ba9565b1115612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b9061549a565b60405180910390fd5b61106883612420611073565b61242a9190614ba9565b111561246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290614c4b565b60405180910390fd5b600b54836124783361256d565b6124829190614ba9565b11156124c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ba90614f65565b60405180910390fd5b600a54831115612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90614fd1565b60405180910390fd5b82600c546125169190614ff1565b341015612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90615097565b60405180910390fd5b61256233846128fc565b505050565b60085481565b6000612578826135ec565b9050919050565b600c5481565b61258d6128f4565b73ffffffffffffffffffffffffffffffffffffffff166125ab611bff565b73ffffffffffffffffffffffffffffffffffffffff1614612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f8906147a2565b60405180910390fd5b80600b8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126a76128f4565b73ffffffffffffffffffffffffffffffffffffffff166126c5611bff565b73ffffffffffffffffffffffffffffffffffffffff161461271b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612712906147a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561278b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127829061552c565b60405180910390fd5b61279481613196565b50565b600080823b905060008111915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061287557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128dd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128ed57506128ec826136d5565b5b9050919050565b600033905090565b61291682826040518060200160405280600081525061373f565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006129e582612f93565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612a0c6128f4565b73ffffffffffffffffffffffffffffffffffffffff161480612a685750612a316128f4565b73ffffffffffffffffffffffffffffffffffffffff16612a5084610e0f565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a845750612a838260000151612a7e6128f4565b61260b565b5b905080612ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abd906155be565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f90615650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f906156e2565b60405180910390fd5b612bb58585856001613c1f565b612bc56000848460000151612928565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612c33919061571e565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612cd79190615752565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612ddd9190614ba9565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f2357612e538161291a565b15612f22576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f8b8686866001613c25565b505050505050565b612f9b613d3d565b612fa48261291a565b612fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fda9061580a565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000c883106130475760017f00000000000000000000000000000000000000000000000000000000000000c88461303a9190614a08565b6130449190614ba9565b90505b60008390505b818110613155576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461314157809350505050613191565b50808061314d9061582a565b91505061304d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906158c6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061327b8473ffffffffffffffffffffffffffffffffffffffff16612797565b156133d5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132a46128f4565b8786866040518563ffffffff1660e01b81526004016132c6949392919061593b565b6020604051808303816000875af192505050801561330257506040513d601f19601f820116820180604052508101906132ff919061599c565b60015b613385573d8060008114613332576040519150601f19603f3d011682016040523d82523d6000602084013e613337565b606091505b5060008151141561337d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337490615195565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133da565b600190505b949350505050565b6000826133ef8584613c2b565b1490509392505050565b606060128054613408906147f1565b80601f0160208091040260200160405190810160405280929190818152602001828054613434906147f1565b80156134815780601f1061345657610100808354040283529160200191613481565b820191906000526020600020905b81548152906001019060200180831161346457829003601f168201915b5050505050905090565b606060008214156134d3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135e7565b600082905060005b600082146135055780806134ee90614ace565b915050600a826134fe91906159f8565b91506134db565b60008167ffffffffffffffff8111156135215761352061418a565b5b6040519080825280601f01601f1916602001820160405280156135535781602001600182028036833780820191505090505b5090505b600085146135e05760018261356c9190614a08565b9150600a8561357b9190615a29565b60306135879190614ba9565b60f81b81838151811061359d5761359c615a5a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135d991906159f8565b9450613557565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561365d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365490615afb565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156137b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ad90615b8d565b60405180910390fd5b6137bf8161291a565b156137ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f690615bf9565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000c8831115613862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385990615c8b565b60405180910390fd5b61386f6000858386613c1f565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161396c9190615752565b6fffffffffffffffffffffffffffffffff1681526020018583602001516139939190615752565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613c0257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613ba2600088848861325a565b613be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd890615195565b60405180910390fd5b8180613bec90614ace565b9250508080613bfa90614ace565b915050613b31565b5080600181905550613c176000878588613c25565b505050505050565b50505050565b50505050565b60008082905060005b8451811015613c95576000858281518110613c5257613c51615a5a565b5b60200260200101519050808311613c7457613c6d8382613ca0565b9250613c81565b613c7e8184613ca0565b92505b508080613c8d90614ace565b915050613c34565b508091505092915050565b600082600052816020526040600020905092915050565b828054613cc3906147f1565b90600052602060002090601f016020900481019282613ce55760008555613d2c565b82601f10613cfe57805160ff1916838001178555613d2c565b82800160010185558215613d2c579182015b82811115613d2b578251825591602001919060010190613d10565b5b509050613d399190613d77565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613d90576000816000905550600101613d78565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613ddd81613da8565b8114613de857600080fd5b50565b600081359050613dfa81613dd4565b92915050565b600060208284031215613e1657613e15613d9e565b5b6000613e2484828501613deb565b91505092915050565b60008115159050919050565b613e4281613e2d565b82525050565b6000602082019050613e5d6000830184613e39565b92915050565b613e6c81613e2d565b8114613e7757600080fd5b50565b600081359050613e8981613e63565b92915050565b600060208284031215613ea557613ea4613d9e565b5b6000613eb384828501613e7a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ee782613ebc565b9050919050565b613ef781613edc565b8114613f0257600080fd5b50565b600081359050613f1481613eee565b92915050565b6000819050919050565b613f2d81613f1a565b8114613f3857600080fd5b50565b600081359050613f4a81613f24565b92915050565b60008060408385031215613f6757613f66613d9e565b5b6000613f7585828601613f05565b9250506020613f8685828601613f3b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fca578082015181840152602081019050613faf565b83811115613fd9576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ffb82613f90565b6140058185613f9b565b9350614015818560208601613fac565b61401e81613fdf565b840191505092915050565b600060208201905081810360008301526140438184613ff0565b905092915050565b60006020828403121561406157614060613d9e565b5b600061406f84828501613f3b565b91505092915050565b61408181613edc565b82525050565b600060208201905061409c6000830184614078565b92915050565b6000602082840312156140b8576140b7613d9e565b5b60006140c684828501613f05565b91505092915050565b6140d881613f1a565b82525050565b60006020820190506140f360008301846140cf565b92915050565b60008060006060848603121561411257614111613d9e565b5b600061412086828701613f05565b935050602061413186828701613f05565b925050604061414286828701613f3b565b9150509250925092565b6000819050919050565b61415f8161414c565b82525050565b600060208201905061417a6000830184614156565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141c282613fdf565b810181811067ffffffffffffffff821117156141e1576141e061418a565b5b80604052505050565b60006141f4613d94565b905061420082826141b9565b919050565b600067ffffffffffffffff8211156142205761421f61418a565b5b61422982613fdf565b9050602081019050919050565b82818337600083830152505050565b600061425861425384614205565b6141ea565b90508281526020810184848401111561427457614273614185565b5b61427f848285614236565b509392505050565b600082601f83011261429c5761429b614180565b5b81356142ac848260208601614245565b91505092915050565b6000602082840312156142cb576142ca613d9e565b5b600082013567ffffffffffffffff8111156142e9576142e8613da3565b5b6142f584828501614287565b91505092915050565b6143078161414c565b811461431257600080fd5b50565b600081359050614324816142fe565b92915050565b6000602082840312156143405761433f613d9e565b5b600061434e84828501614315565b91505092915050565b61436081613edc565b82525050565b600067ffffffffffffffff82169050919050565b61438381614366565b82525050565b60408201600082015161439f6000850182614357565b5060208201516143b2602085018261437a565b50505050565b60006040820190506143cd6000830184614389565b92915050565b600080604083850312156143ea576143e9613d9e565b5b60006143f885828601613f05565b925050602061440985828601613e7a565b9150509250929050565b600067ffffffffffffffff82111561442e5761442d61418a565b5b61443782613fdf565b9050602081019050919050565b600061445761445284614413565b6141ea565b90508281526020810184848401111561447357614472614185565b5b61447e848285614236565b509392505050565b600082601f83011261449b5761449a614180565b5b81356144ab848260208601614444565b91505092915050565b600080600080608085870312156144ce576144cd613d9e565b5b60006144dc87828801613f05565b94505060206144ed87828801613f05565b93505060406144fe87828801613f3b565b925050606085013567ffffffffffffffff81111561451f5761451e613da3565b5b61452b87828801614486565b91505092959194509250565b600067ffffffffffffffff8211156145525761455161418a565b5b602082029050602081019050919050565b600080fd5b600061457b61457684614537565b6141ea565b9050808382526020820190506020840283018581111561459e5761459d614563565b5b835b818110156145c757806145b38882614315565b8452602084019350506020810190506145a0565b5050509392505050565b600082601f8301126145e6576145e5614180565b5b81356145f6848260208601614568565b91505092915050565b6000806040838503121561461657614615613d9e565b5b600083013567ffffffffffffffff81111561463457614633613da3565b5b614640858286016145d1565b925050602061465185828601614315565b9150509250929050565b600080fd5b60008083601f84011261467657614675614180565b5b8235905067ffffffffffffffff8111156146935761469261465b565b5b6020830191508360208202830111156146af576146ae614563565b5b9250929050565b6000806000604084860312156146cf576146ce613d9e565b5b60006146dd86828701613f3b565b935050602084013567ffffffffffffffff8111156146fe576146fd613da3565b5b61470a86828701614660565b92509250509250925092565b6000806040838503121561472d5761472c613d9e565b5b600061473b85828601613f05565b925050602061474c85828601613f05565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061478c602083613f9b565b915061479782614756565b602082019050919050565b600060208201905081810360008301526147bb8161477f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061480957607f821691505b6020821081141561481d5761481c6147c2565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b600061487f602d83613f9b565b915061488a82614823565b604082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000614911602283613f9b565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006149a3603983613f9b565b91506149ae82614947565b604082019050919050565b600060208201905081810360008301526149d281614996565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a1382613f1a565b9150614a1e83613f1a565b925082821015614a3157614a306149d9565b5b828203905092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a98602283613f9b565b9150614aa382614a3c565b604082019050919050565b60006020820190508181036000830152614ac781614a8b565b9050919050565b6000614ad982613f1a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b0c57614b0b6149d9565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000614b73602e83613f9b565b9150614b7e82614b17565b604082019050919050565b60006020820190508181036000830152614ba281614b66565b9050919050565b6000614bb482613f1a565b9150614bbf83613f1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bf457614bf36149d9565b5b828201905092915050565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b6000614c35601283613f9b565b9150614c4082614bff565b602082019050919050565b60006020820190508181036000830152614c6481614c28565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ca1601f83613f9b565b9150614cac82614c6b565b602082019050919050565b60006020820190508181036000830152614cd081614c94565b9050919050565b600081905092915050565b50565b6000614cf2600083614cd7565b9150614cfd82614ce2565b600082019050919050565b6000614d1382614ce5565b9150819050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d79602383613f9b565b9150614d8482614d1d565b604082019050919050565b60006020820190508181036000830152614da881614d6c565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614e0b602b83613f9b565b9150614e1682614daf565b604082019050919050565b60006020820190508181036000830152614e3a81614dfe565b9050919050565b7f6d696e7420697320706175736564000000000000000000000000000000000000600082015250565b6000614e77600e83613f9b565b9150614e8282614e41565b602082019050919050565b60006020820190508181036000830152614ea681614e6a565b9050919050565b7f5075626c6963204d696e74696e67206e6f742073746172746564000000000000600082015250565b6000614ee3601a83613f9b565b9150614eee82614ead565b602082019050919050565b60006020820190508181036000830152614f1281614ed6565b9050919050565b7f6c696d6974207065722077616c6c657420657863656564656400000000000000600082015250565b6000614f4f601983613f9b565b9150614f5a82614f19565b602082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b6000614fbb601683613f9b565b9150614fc682614f85565b602082019050919050565b60006020820190508181036000830152614fea81614fae565b9050919050565b6000614ffc82613f1a565b915061500783613f1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150405761503f6149d9565b5b828202905092915050565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b6000615081601683613f9b565b915061508c8261504b565b602082019050919050565b600060208201905081810360008301526150b081615074565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b60006150ed601a83613f9b565b91506150f8826150b7565b602082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061517f603383613f9b565b915061518a82615123565b604082019050919050565b600060208201905081810360008301526151ae81615172565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615211602f83613f9b565b915061521c826151b5565b604082019050919050565b6000602082019050818103600083015261524081615204565b9050919050565b600081905092915050565b600061525d82613f90565b6152678185615247565b9350615277818560208601613fac565b80840191505092915050565b600061528f8285615252565b915061529b8284615252565b91508190509392505050565b7f6d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b60006152dd601183613f9b565b91506152e8826152a7565b602082019050919050565b6000602082019050818103600083015261530c816152d0565b9050919050565b7f73616c65206973207075626c6963000000000000000000000000000000000000600082015250565b6000615349600e83613f9b565b915061535482615313565b602082019050919050565b600060208201905081810360008301526153788161533c565b9050919050565b60008160601b9050919050565b60006153978261537f565b9050919050565b60006153a98261538c565b9050919050565b6153c16153bc82613edc565b61539e565b82525050565b60006153d382846153b0565b60148201915081905092915050565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b6000615418600f83613f9b565b9150615423826153e2565b602082019050919050565b600060208201905081810360008301526154478161540b565b9050919050565b7f57686974656c69737420736f6c64206f75740000000000000000000000000000600082015250565b6000615484601283613f9b565b915061548f8261544e565b602082019050919050565b600060208201905081810360008301526154b381615477565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615516602683613f9b565b9150615521826154ba565b604082019050919050565b6000602082019050818103600083015261554581615509565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006155a8603283613f9b565b91506155b38261554c565b604082019050919050565b600060208201905081810360008301526155d78161559b565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b600061563a602683613f9b565b9150615645826155de565b604082019050919050565b600060208201905081810360008301526156698161562d565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156cc602583613f9b565b91506156d782615670565b604082019050919050565b600060208201905081810360008301526156fb816156bf565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600061572982615702565b915061573483615702565b925082821015615747576157466149d9565b5b828203905092915050565b600061575d82615702565b915061576883615702565b9250826fffffffffffffffffffffffffffffffff0382111561578d5761578c6149d9565b5b828201905092915050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006157f4602a83613f9b565b91506157ff82615798565b604082019050919050565b60006020820190508181036000830152615823816157e7565b9050919050565b600061583582613f1a565b91506000821415615849576158486149d9565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006158b0602f83613f9b565b91506158bb82615854565b604082019050919050565b600060208201905081810360008301526158df816158a3565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061590d826158e6565b61591781856158f1565b9350615927818560208601613fac565b61593081613fdf565b840191505092915050565b60006080820190506159506000830187614078565b61595d6020830186614078565b61596a60408301856140cf565b818103606083015261597c8184615902565b905095945050505050565b60008151905061599681613dd4565b92915050565b6000602082840312156159b2576159b1613d9e565b5b60006159c084828501615987565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a0382613f1a565b9150615a0e83613f1a565b925082615a1e57615a1d6159c9565b5b828204905092915050565b6000615a3482613f1a565b9150615a3f83613f1a565b925082615a4f57615a4e6159c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000615ae5603183613f9b565b9150615af082615a89565b604082019050919050565b60006020820190508181036000830152615b1481615ad8565b9050919050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b77602183613f9b565b9150615b8282615b1b565b604082019050919050565b60006020820190508181036000830152615ba681615b6a565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000615be3601d83613f9b565b9150615bee82615bad565b602082019050919050565b60006020820190508181036000830152615c1281615bd6565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c75602283613f9b565b9150615c8082615c19565b604082019050919050565b60006020820190508181036000830152615ca481615c68565b905091905056fea26469706673582212203cffe0a3a996a5f6ae3f5bc07cb3e5cb9fbc03c26d36935cce52c8e2064fe1c964736f6c634300080b0033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000003cdbffdaed5ffdf7a74cb35db581273d5108c6150000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5469735a724e716959317a5953735638544b514862756f527a6b34364266637566706f5437427534375863762f00000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): ipfs://QmTisZrNqiY1zYSsV8TKQHbuoRzk46BfcufpoT7Bu47Xcv/
Arg [1] : _teamWallet (address): 0x3CdbFfdaED5fFDf7A74CB35DB581273D5108c615

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000003cdbffdaed5ffdf7a74cb35db581273d5108c615
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d5469735a724e716959317a5953735638544b514862756f
Arg [4] : 527a6b34364266637566706f5437427534375863762f00000000000000000000


Deployed Bytecode Sourcemap

30390:6685:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31615:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36644:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36947:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21962:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23449:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23028:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36530:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30626:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18950:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30736:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24290:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36190:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31264:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19298:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31133:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32051:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36838:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35378:486;;;;;;;;;;;;;:::i;:::-;;36731:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24460:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31952:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19062:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30528:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34852:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31026:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36084:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31101:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21830:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36300:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20600:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10596:103;;;;;;;;;;;;;:::i;:::-;;31860:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35978:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10373:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35880:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35203:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22070:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31060:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30778:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32381:761;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23749:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31177:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24645:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34075:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34278:562;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33150:917;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28160:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35082:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30694:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36416:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24068:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10707:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31615:237;31737:4;31794:10;31779:25;;:11;:25;;;;:65;;;;31808:36;31832:11;31808:23;:36::i;:::-;31779:65;31759:85;;31615:237;;;:::o;36644:79::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36709:6:::1;36700;;:15;;;;;;;;;;;;;;;;;;36644:79:::0;:::o;36947:125::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37032:32:::1;37042:11;37055:8;37032:9;:32::i;:::-;36947:125:::0;;:::o;21962:100::-;22016:13;22049:5;22042:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21962:100;:::o;23449:292::-;23553:7;23600:16;23608:7;23600;:16::i;:::-;23578:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23709:15;:24;23725:7;23709:24;;;;;;;;;;;;;;;;;;;;;23702:31;;23449:292;;;:::o;23028:413::-;23101:13;23117:24;23133:7;23117:15;:24::i;:::-;23101:40;;23166:5;23160:11;;:2;:11;;;;23152:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23261:5;23245:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23270:37;23287:5;23294:12;:10;:12::i;:::-;23270:16;:37::i;:::-;23245:62;23223:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;23405:28;23414:2;23418:7;23427:5;23405:8;:28::i;:::-;23090:351;23028:413;;:::o;36530:104::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36615:11:::1;36602:10;;:24;;;;;;;;;;;;;;;;;;36530:104:::0;:::o;30626:33::-;;;;:::o;18950:104::-;19003:7;19045:1;19030:12;;:16;;;;:::i;:::-;19023:23;;18950:104;:::o;30736:35::-;;;;:::o;24290:162::-;24416:28;24426:4;24432:2;24436:7;24416:9;:28::i;:::-;24290:162;;;:::o;36190:102::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36283:1:::1;36261:19;:23;;;;36190:102:::0;:::o;31264:25::-;;;;:::o;19298:864::-;19423:7;19464:16;19474:5;19464:9;:16::i;:::-;19456:5;:24;19448:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19530:22;19555:13;:11;:13::i;:::-;19530:38;;19579:19;19613:25;19667:9;19662:426;19686:14;19682:1;:18;19662:426;;;19722:31;19756:11;:14;19768:1;19756:14;;;;;;;;;;;19722:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19815:1;19789:28;;:9;:14;;;:28;;;19785:103;;19858:9;:14;;;19838:34;;19785:103;19927:5;19906:26;;:17;:26;;;19902:175;;;19972:5;19957:11;:20;19953:77;;;20009:1;20002:8;;;;;;;;;19953:77;20048:13;;;;;:::i;:::-;;;;19902:175;19707:381;19702:3;;;;;:::i;:::-;;;;19662:426;;;;20098:56;;;;;;;;;;:::i;:::-;;;;;;;;19298:864;;;;;:::o;31133:35::-;;;;;;;;;;;;;:::o;32051:322::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32167:14:::1;32155:8;32139:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;32117:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32272:3;32260:8;32246:11;;:22;;;;:::i;:::-;:29;;32238:38;;;::::0;::::1;;32315:8;32301:11;;:22;;;;:::i;:::-;32287:11;:36;;;;32334:31;32344:10;;;;;;;;;;;32356:8;32334:9;:31::i;:::-;32051:322:::0;:::o;36838:101::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36925:6:::1;36907:15;;:24;;;;;;;;;;;;;;;;;;36838:101:::0;:::o;35378:486::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1230:1:::1;1378:7;;:19;;1370:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1230:1;1444:7;:18;;;;35676:7:::2;35697;:5;:7::i;:::-;35689:21;;35718;35689:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35675:69;;;35763:2;35755:11;;;::::0;::::2;;35428:436;1186:1:::1;1487:7;:22;;;;35378:486::o:0;36731:99::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36816:6:::1;36798:15;;:24;;;;;;;;;;;;;;;;;;36731:99:::0;:::o;24460:177::-;24590:39;24607:4;24613:2;24617:7;24590:39;;;;;;;;;;;;:16;:39::i;:::-;24460:177;;;:::o;31952:91::-;31998:7;32025:10;;32018:17;;31952:91;:::o;19062:228::-;19165:7;19206:13;:11;:13::i;:::-;19198:5;:21;19190:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;19277:5;19270:12;;19062:228;;;:::o;30528:38::-;;;;:::o;34852:101::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34938:7:::1;34923:12;:22;;;;;;;;;;;;:::i;:::-;;34852:101:::0;:::o;31026:25::-;;;;;;;;;;;;;:::o;36084:98::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36163:11:::1;36153:7;:21;;;;36084:98:::0;:::o;31101:25::-;;;;;;;;;;;;;:::o;21830:124::-;21894:7;21921:20;21933:7;21921:11;:20::i;:::-;:25;;;21914:32;;21830:124;;;:::o;36300:108::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36391:9:::1;36374:14;:26;;;;36300:108:::0;:::o;20600:258::-;20664:7;20723:1;20706:19;;:5;:19;;;;20684:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;20822:12;:19;20835:5;20822:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;20814:36;;20807:43;;20600:258;;;:::o;10596:103::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10661:30:::1;10688:1;10661:18;:30::i;:::-;10596:103::o:0;31860:84::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31935:1:::1;31922:10;:14;;;;31860:84:::0;:::o;35978:98::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36057:11:::1;36047:7;:21;;;;35978:98:::0;:::o;10373:87::-;10419:7;10446:6;;;;;;;;;;;10439:13;;10373:87;:::o;35880:90::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35953:9:::1;35945:5;:17;;;;35880:90:::0;:::o;35203:167::-;35296:21;;:::i;:::-;35342:20;35354:7;35342:11;:20::i;:::-;35335:27;;35203:167;;;:::o;22070:104::-;22126:13;22159:7;22152:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22070:104;:::o;31060:34::-;;;;;;;;;;;;;:::o;30778:33::-;;;;:::o;32381:761::-;32448:6;;;;;;;;;;;32447:7;32439:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;32493:15;;;;;;;;;;;32492:16;32484:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;30877:4;32588:8;32572:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;32550:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;32724:14;;32712:8;32685:24;32698:10;32685:12;:24::i;:::-;:35;;;;:::i;:::-;:53;;32677:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;32799:19;;32787:8;:31;;32779:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32859:15;;;;;;;;;;;32856:237;;;32932:8;32922:7;;:18;;;;:::i;:::-;32909:9;:31;;32901:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32856:237;;;33036:8;33028:5;;:16;;;;:::i;:::-;33015:9;:29;;33007:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32856:237;33103:31;33113:10;33125:8;33103:9;:31::i;:::-;32381:761;:::o;23749:311::-;23879:12;:10;:12::i;:::-;23867:24;;:8;:24;;;;23859:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23980:8;23935:18;:32;23954:12;:10;:12::i;:::-;23935:32;;;;;;;;;;;;;;;:42;23968:8;23935:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24033:8;24004:48;;24019:12;:10;:12::i;:::-;24004:48;;;24043:8;24004:48;;;;;;:::i;:::-;;;;;;;;23749:311;;:::o;31177:36::-;;;;:::o;24645:355::-;24804:28;24814:4;24820:2;24824:7;24804:9;:28::i;:::-;24865:48;24888:4;24894:2;24898:7;24907:5;24865:22;:48::i;:::-;24843:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;24645:355;;;;:::o;34075:195::-;34184:4;34213:49;34232:11;34245:10;;34257:4;34213:18;:49::i;:::-;34206:56;;34075:195;;;;:::o;34278:562::-;34396:13;34449:16;34457:7;34449;:16::i;:::-;34427:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;34564:21;34588:10;:8;:10::i;:::-;34564:34;;34661:1;34643:7;34637:21;:25;:176;;;;;;;;;;;;;;;;;34736:7;34745:18;:7;:16;:18::i;:::-;34719:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34637:176;34613:200;;;34278:562;;;:::o;33150:917::-;33281:6;;;;;;;;;;;33280:7;33272:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;33328:15;;;;;;;;;;;33320:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;33395:61;33403:11;;33395:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33443:10;33426:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;33416:39;;;;;;33395:7;:61::i;:::-;33373:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;33560:14;;33548:8;33532:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;33510:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30877:4;33671:8;33655:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;33633:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;33807:14;;33795:8;33768:24;33781:10;33768:12;:24::i;:::-;:35;;;;:::i;:::-;:53;;33760:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;33892:19;;33880:8;:31;;33872:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33980:8;33970:7;;:18;;;;:::i;:::-;33957:9;:31;;33949:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34028:31;34038:10;34050:8;34028:9;:31::i;:::-;33150:917;;;:::o;28160:43::-;;;;:::o;35082:113::-;35140:7;35167:20;35181:5;35167:13;:20::i;:::-;35160:27;;35082:113;;;:::o;30694:35::-;;;;:::o;36416:106::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36505:9:::1;36488:14;:26;;;;36416:106:::0;:::o;24068:214::-;24210:4;24239:18;:25;24258:5;24239:25;;;;;;;;;;;;;;;:35;24265:8;24239:35;;;;;;;;;;;;;;;;;;;;;;;;;24232:42;;24068:214;;;;:::o;10707:238::-;10519:12;:10;:12::i;:::-;10508:23;;:7;:5;:7::i;:::-;:23;;;10500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10830:1:::1;10810:22;;:8;:22;;;;10788:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10909:28;10928:8;10909:18;:28::i;:::-;10707:238:::0;:::o;11174:196::-;11234:4;11251:12;11318:7;11306:20;11298:28;;11361:1;11354:4;:8;11347:15;;;11174:196;;;:::o;20170:422::-;20317:4;20374:25;20359:40;;;:11;:40;;;;:105;;;;20431:33;20416:48;;;:11;:48;;;;20359:105;:172;;;;20496:35;20481:50;;;:11;:50;;;;20359:172;:225;;;;20548:36;20572:11;20548:23;:36::i;:::-;20359:225;20339:245;;20170:422;;;:::o;9894:98::-;9947:7;9974:10;9967:17;;9894:98;:::o;25127:104::-;25196:27;25206:2;25210:8;25196:27;;;;;;;;;;;;:9;:27::i;:::-;25127:104;;:::o;25008:111::-;25065:4;25099:12;;25089:7;:22;25082:29;;25008:111;;;:::o;27956:196::-;28098:2;28071:15;:24;28087:7;28071:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28136:7;28132:2;28116:28;;28125:5;28116:28;;;;;;;;;;;;27956:196;;;:::o;26522:1426::-;26637:35;26675:20;26687:7;26675:11;:20::i;:::-;26637:58;;26708:22;26750:13;:18;;;26734:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;26809:12;:10;:12::i;:::-;26785:36;;:20;26797:7;26785:11;:20::i;:::-;:36;;;26734:87;:154;;;;26838:50;26855:13;:18;;;26875:12;:10;:12::i;:::-;26838:16;:50::i;:::-;26734:154;26708:181;;26924:17;26902:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27076:4;27054:26;;:13;:18;;;:26;;;27032:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;27179:1;27165:16;;:2;:16;;;;27157:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27236:43;27258:4;27264:2;27268:7;27277:1;27236:21;:43::i;:::-;27290:49;27307:1;27311:7;27320:13;:18;;;27290:8;:49::i;:::-;27382:1;27352:12;:18;27365:4;27352:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27422:1;27394:12;:16;27407:2;27394:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27457:43;;;;;;;;27472:2;27457:43;;;;;;27483:15;27457:43;;;;;27434:11;:20;27446:7;27434:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27511:19;27543:1;27533:7;:11;;;;:::i;:::-;27511:33;;27600:1;27559:43;;:11;:24;27571:11;27559:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;27555:288;;;27623:20;27631:11;27623:7;:20::i;:::-;27619:213;;;27691:125;;;;;;;;27728:13;:18;;;27691:125;;;;;;27769:13;:28;;;27691:125;;;;;27664:11;:24;27676:11;27664:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27619:213;27555:288;27879:7;27875:2;27860:27;;27869:4;27860:27;;;;;;;;;;;;27898:42;27919:4;27925:2;27929:7;27938:1;27898:20;:42::i;:::-;26626:1322;;;26522:1426;;;:::o;21140:682::-;21228:21;;:::i;:::-;21275:16;21283:7;21275;:16::i;:::-;21267:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21351:26;21403:12;21392:7;:23;21388:103;;21478:1;21463:12;21453:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;21432:47;;21388:103;21508:12;21523:7;21508:22;;21503:242;21540:18;21532:4;:26;21503:242;;21583:31;21617:11;:17;21629:4;21617:17;;;;;;;;;;;21583:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21679:1;21653:28;;:9;:14;;;:28;;;21649:85;;21709:9;21702:16;;;;;;;21649:85;21568:177;21560:6;;;;;:::i;:::-;;;;21503:242;;;;21757:57;;;;;;;;;;:::i;:::-;;;;;;;;21140:682;;;;:::o;10953:191::-;11027:16;11046:6;;;;;;;;;;;11027:25;;11072:8;11063:6;;:17;;;;;;;;;;;;;;;;;;11127:8;11096:40;;11117:8;11096:40;;;;;;;;;;;;11016:128;10953:191;:::o;29065:985::-;29220:4;29241:15;:2;:13;;;:15::i;:::-;29237:806;;;29310:2;29294:36;;;29353:12;:10;:12::i;:::-;29388:4;29415:7;29445:5;29294:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29273:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29673:1;29656:6;:13;:18;29652:321;;;29699:109;;;;;;;;;;:::i;:::-;;;;;;;;29652:321;29923:6;29917:13;29908:6;29904:2;29900:15;29893:38;29273:715;29543:45;;;29533:55;;;:6;:55;;;;29526:62;;;;;29237:806;30027:4;30020:11;;29065:985;;;;;;;:::o;87:190::-;212:4;265;236:25;249:5;256:4;236:12;:25::i;:::-;:33;229:40;;87:190;;;;;:::o;34961:113::-;35021:13;35054:12;35047:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34961:113;:::o;8483:532::-;8539:13;8578:1;8569:5;:10;8565:53;;;8596:10;;;;;;;;;;;;;;;;;;;;;8565:53;8628:12;8643:5;8628:20;;8659:14;8684:78;8699:1;8691:4;:9;8684:78;;8717:8;;;;;:::i;:::-;;;;8748:2;8740:10;;;;;:::i;:::-;;;8684:78;;;8772:19;8804:6;8794:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8772:39;;8822:154;8838:1;8829:5;:10;8822:154;;8866:1;8856:11;;;;;:::i;:::-;;;8933:2;8925:5;:10;;;;:::i;:::-;8912:2;:24;;;;:::i;:::-;8899:39;;8882:6;8889;8882:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8962:2;8953:11;;;;;:::i;:::-;;;8822:154;;;9000:6;8986:21;;;;;8483:532;;;;:::o;20866:266::-;20927:7;20986:1;20969:19;;:5;:19;;;;20947:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;21091:12;:19;21104:5;21091:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;21083:41;;21076:48;;20866:266;;;:::o;15511:207::-;15641:4;15685:25;15670:40;;;:11;:40;;;;15663:47;;15511:207;;;:::o;25239:1275::-;25362:20;25385:12;;25362:35;;25430:1;25416:16;;:2;:16;;;;25408:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25490:21;25498:12;25490:7;:21::i;:::-;25489:22;25481:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25576:12;25564:8;:24;;25556:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25640:61;25670:1;25674:2;25678:12;25692:8;25640:21;:61::i;:::-;25714:30;25747:12;:16;25760:2;25747:16;;;;;;;;;;;;;;;25714:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25793:135;;;;;;;;25849:8;25819:11;:19;;;:39;;;;:::i;:::-;25793:135;;;;;;25908:8;25873:11;:24;;;:44;;;;:::i;:::-;25793:135;;;;;25774:12;:16;25787:2;25774:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25967:43;;;;;;;;25982:2;25967:43;;;;;;25993:15;25967:43;;;;;25939:11;:25;25951:12;25939:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26023:20;26046:12;26023:35;;26076:9;26071:325;26095:8;26091:1;:12;26071:325;;;26155:12;26151:2;26130:38;;26147:1;26130:38;;;;;;;;;;;;26209:59;26240:1;26244:2;26248:12;26262:5;26209:22;:59::i;:::-;26183:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;26370:14;;;;;:::i;:::-;;;;26105:3;;;;;:::i;:::-;;;;26071:325;;;;26423:12;26408;:27;;;;26446:60;26475:1;26479:2;26483:12;26497:8;26446:20;:60::i;:::-;25351:1163;;;25239:1275;;;:::o;30058:159::-;;;;;:::o;30225:158::-;;;;;:::o;285:549::-;395:7;420:20;443:4;420:27;;463:9;458:339;482:5;:12;478:1;:16;458:339;;;516:20;539:5;545:1;539:8;;;;;;;;:::i;:::-;;;;;;;;516:31;;582:12;566;:28;562:224;;630:42;645:12;659;630:14;:42::i;:::-;615:57;;562:224;;;728:42;743:12;757;728:14;:42::i;:::-;713:57;;562:224;501:296;496:3;;;;;:::i;:::-;;;;458:339;;;;814:12;807:19;;;285:549;;;;:::o;842:256::-;937:13;1005:1;999:4;992:15;1034:1;1028:4;1021:15;1075:4;1069;1059:21;1050:30;;842:256;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:126::-;2145:7;2185:42;2178:5;2174:54;2163:65;;2108:126;;;:::o;2240:96::-;2277:7;2306:24;2324:5;2306:24;:::i;:::-;2295:35;;2240:96;;;:::o;2342:122::-;2415:24;2433:5;2415:24;:::i;:::-;2408:5;2405:35;2395:63;;2454:1;2451;2444:12;2395:63;2342:122;:::o;2470:139::-;2516:5;2554:6;2541:20;2532:29;;2570:33;2597:5;2570:33;:::i;:::-;2470:139;;;;:::o;2615:77::-;2652:7;2681:5;2670:16;;2615:77;;;:::o;2698:122::-;2771:24;2789:5;2771:24;:::i;:::-;2764:5;2761:35;2751:63;;2810:1;2807;2800:12;2751:63;2698:122;:::o;2826:139::-;2872:5;2910:6;2897:20;2888:29;;2926:33;2953:5;2926:33;:::i;:::-;2826:139;;;;:::o;2971:474::-;3039:6;3047;3096:2;3084:9;3075:7;3071:23;3067:32;3064:119;;;3102:79;;:::i;:::-;3064:119;3222:1;3247:53;3292:7;3283:6;3272:9;3268:22;3247:53;:::i;:::-;3237:63;;3193:117;3349:2;3375:53;3420:7;3411:6;3400:9;3396:22;3375:53;:::i;:::-;3365:63;;3320:118;2971:474;;;;;:::o;3451:99::-;3503:6;3537:5;3531:12;3521:22;;3451:99;;;:::o;3556:169::-;3640:11;3674:6;3669:3;3662:19;3714:4;3709:3;3705:14;3690:29;;3556:169;;;;:::o;3731:307::-;3799:1;3809:113;3823:6;3820:1;3817:13;3809:113;;;3908:1;3903:3;3899:11;3893:18;3889:1;3884:3;3880:11;3873:39;3845:2;3842:1;3838:10;3833:15;;3809:113;;;3940:6;3937:1;3934:13;3931:101;;;4020:1;4011:6;4006:3;4002:16;3995:27;3931:101;3780:258;3731:307;;;:::o;4044:102::-;4085:6;4136:2;4132:7;4127:2;4120:5;4116:14;4112:28;4102:38;;4044:102;;;:::o;4152:364::-;4240:3;4268:39;4301:5;4268:39;:::i;:::-;4323:71;4387:6;4382:3;4323:71;:::i;:::-;4316:78;;4403:52;4448:6;4443:3;4436:4;4429:5;4425:16;4403:52;:::i;:::-;4480:29;4502:6;4480:29;:::i;:::-;4475:3;4471:39;4464:46;;4244:272;4152:364;;;;:::o;4522:313::-;4635:4;4673:2;4662:9;4658:18;4650:26;;4722:9;4716:4;4712:20;4708:1;4697:9;4693:17;4686:47;4750:78;4823:4;4814:6;4750:78;:::i;:::-;4742:86;;4522:313;;;;:::o;4841:329::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:53;5145:7;5136:6;5125:9;5121:22;5100:53;:::i;:::-;5090:63;;5046:117;4841:329;;;;:::o;5176:118::-;5263:24;5281:5;5263:24;:::i;:::-;5258:3;5251:37;5176:118;;:::o;5300:222::-;5393:4;5431:2;5420:9;5416:18;5408:26;;5444:71;5512:1;5501:9;5497:17;5488:6;5444:71;:::i;:::-;5300:222;;;;:::o;5528:329::-;5587:6;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5528:329;;;;:::o;5863:118::-;5950:24;5968:5;5950:24;:::i;:::-;5945:3;5938:37;5863:118;;:::o;5987:222::-;6080:4;6118:2;6107:9;6103:18;6095:26;;6131:71;6199:1;6188:9;6184:17;6175:6;6131:71;:::i;:::-;5987:222;;;;:::o;6215:619::-;6292:6;6300;6308;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:53;6553:7;6544:6;6533:9;6529:22;6508:53;:::i;:::-;6498:63;;6454:117;6610:2;6636:53;6681:7;6672:6;6661:9;6657:22;6636:53;:::i;:::-;6626:63;;6581:118;6738:2;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6709:118;6215:619;;;;;:::o;6840:77::-;6877:7;6906:5;6895:16;;6840:77;;;:::o;6923:118::-;7010:24;7028:5;7010:24;:::i;:::-;7005:3;6998:37;6923:118;;:::o;7047:222::-;7140:4;7178:2;7167:9;7163:18;7155:26;;7191:71;7259:1;7248:9;7244:17;7235:6;7191:71;:::i;:::-;7047:222;;;;:::o;7275:117::-;7384:1;7381;7374:12;7398:117;7507:1;7504;7497:12;7521:180;7569:77;7566:1;7559:88;7666:4;7663:1;7656:15;7690:4;7687:1;7680:15;7707:281;7790:27;7812:4;7790:27;:::i;:::-;7782:6;7778:40;7920:6;7908:10;7905:22;7884:18;7872:10;7869:34;7866:62;7863:88;;;7931:18;;:::i;:::-;7863:88;7971:10;7967:2;7960:22;7750:238;7707:281;;:::o;7994:129::-;8028:6;8055:20;;:::i;:::-;8045:30;;8084:33;8112:4;8104:6;8084:33;:::i;:::-;7994:129;;;:::o;8129:308::-;8191:4;8281:18;8273:6;8270:30;8267:56;;;8303:18;;:::i;:::-;8267:56;8341:29;8363:6;8341:29;:::i;:::-;8333:37;;8425:4;8419;8415:15;8407:23;;8129:308;;;:::o;8443:154::-;8527:6;8522:3;8517;8504:30;8589:1;8580:6;8575:3;8571:16;8564:27;8443:154;;;:::o;8603:412::-;8681:5;8706:66;8722:49;8764:6;8722:49;:::i;:::-;8706:66;:::i;:::-;8697:75;;8795:6;8788:5;8781:21;8833:4;8826:5;8822:16;8871:3;8862:6;8857:3;8853:16;8850:25;8847:112;;;8878:79;;:::i;:::-;8847:112;8968:41;9002:6;8997:3;8992;8968:41;:::i;:::-;8687:328;8603:412;;;;;:::o;9035:340::-;9091:5;9140:3;9133:4;9125:6;9121:17;9117:27;9107:122;;9148:79;;:::i;:::-;9107:122;9265:6;9252:20;9290:79;9365:3;9357:6;9350:4;9342:6;9338:17;9290:79;:::i;:::-;9281:88;;9097:278;9035:340;;;;:::o;9381:509::-;9450:6;9499:2;9487:9;9478:7;9474:23;9470:32;9467:119;;;9505:79;;:::i;:::-;9467:119;9653:1;9642:9;9638:17;9625:31;9683:18;9675:6;9672:30;9669:117;;;9705:79;;:::i;:::-;9669:117;9810:63;9865:7;9856:6;9845:9;9841:22;9810:63;:::i;:::-;9800:73;;9596:287;9381:509;;;;:::o;9896:122::-;9969:24;9987:5;9969:24;:::i;:::-;9962:5;9959:35;9949:63;;10008:1;10005;9998:12;9949:63;9896:122;:::o;10024:139::-;10070:5;10108:6;10095:20;10086:29;;10124:33;10151:5;10124:33;:::i;:::-;10024:139;;;;:::o;10169:329::-;10228:6;10277:2;10265:9;10256:7;10252:23;10248:32;10245:119;;;10283:79;;:::i;:::-;10245:119;10403:1;10428:53;10473:7;10464:6;10453:9;10449:22;10428:53;:::i;:::-;10418:63;;10374:117;10169:329;;;;:::o;10504:108::-;10581:24;10599:5;10581:24;:::i;:::-;10576:3;10569:37;10504:108;;:::o;10618:101::-;10654:7;10694:18;10687:5;10683:30;10672:41;;10618:101;;;:::o;10725:105::-;10800:23;10817:5;10800:23;:::i;:::-;10795:3;10788:36;10725:105;;:::o;10906:529::-;11067:4;11062:3;11058:14;11154:4;11147:5;11143:16;11137:23;11173:63;11230:4;11225:3;11221:14;11207:12;11173:63;:::i;:::-;11082:164;11338:4;11331:5;11327:16;11321:23;11357:61;11412:4;11407:3;11403:14;11389:12;11357:61;:::i;:::-;11256:172;11036:399;10906:529;;:::o;11441:350::-;11598:4;11636:2;11625:9;11621:18;11613:26;;11649:135;11781:1;11770:9;11766:17;11757:6;11649:135;:::i;:::-;11441:350;;;;:::o;11797:468::-;11862:6;11870;11919:2;11907:9;11898:7;11894:23;11890:32;11887:119;;;11925:79;;:::i;:::-;11887:119;12045:1;12070:53;12115:7;12106:6;12095:9;12091:22;12070:53;:::i;:::-;12060:63;;12016:117;12172:2;12198:50;12240:7;12231:6;12220:9;12216:22;12198:50;:::i;:::-;12188:60;;12143:115;11797:468;;;;;:::o;12271:307::-;12332:4;12422:18;12414:6;12411:30;12408:56;;;12444:18;;:::i;:::-;12408:56;12482:29;12504:6;12482:29;:::i;:::-;12474:37;;12566:4;12560;12556:15;12548:23;;12271:307;;;:::o;12584:410::-;12661:5;12686:65;12702:48;12743:6;12702:48;:::i;:::-;12686:65;:::i;:::-;12677:74;;12774:6;12767:5;12760:21;12812:4;12805:5;12801:16;12850:3;12841:6;12836:3;12832:16;12829:25;12826:112;;;12857:79;;:::i;:::-;12826:112;12947:41;12981:6;12976:3;12971;12947:41;:::i;:::-;12667:327;12584:410;;;;;:::o;13013:338::-;13068:5;13117:3;13110:4;13102:6;13098:17;13094:27;13084:122;;13125:79;;:::i;:::-;13084:122;13242:6;13229:20;13267:78;13341:3;13333:6;13326:4;13318:6;13314:17;13267:78;:::i;:::-;13258:87;;13074:277;13013:338;;;;:::o;13357:943::-;13452:6;13460;13468;13476;13525:3;13513:9;13504:7;13500:23;13496:33;13493:120;;;13532:79;;:::i;:::-;13493:120;13652:1;13677:53;13722:7;13713:6;13702:9;13698:22;13677:53;:::i;:::-;13667:63;;13623:117;13779:2;13805:53;13850:7;13841:6;13830:9;13826:22;13805:53;:::i;:::-;13795:63;;13750:118;13907:2;13933:53;13978:7;13969:6;13958:9;13954:22;13933:53;:::i;:::-;13923:63;;13878:118;14063:2;14052:9;14048:18;14035:32;14094:18;14086:6;14083:30;14080:117;;;14116:79;;:::i;:::-;14080:117;14221:62;14275:7;14266:6;14255:9;14251:22;14221:62;:::i;:::-;14211:72;;14006:287;13357:943;;;;;;;:::o;14306:311::-;14383:4;14473:18;14465:6;14462:30;14459:56;;;14495:18;;:::i;:::-;14459:56;14545:4;14537:6;14533:17;14525:25;;14605:4;14599;14595:15;14587:23;;14306:311;;;:::o;14623:117::-;14732:1;14729;14722:12;14763:710;14859:5;14884:81;14900:64;14957:6;14900:64;:::i;:::-;14884:81;:::i;:::-;14875:90;;14985:5;15014:6;15007:5;15000:21;15048:4;15041:5;15037:16;15030:23;;15101:4;15093:6;15089:17;15081:6;15077:30;15130:3;15122:6;15119:15;15116:122;;;15149:79;;:::i;:::-;15116:122;15264:6;15247:220;15281:6;15276:3;15273:15;15247:220;;;15356:3;15385:37;15418:3;15406:10;15385:37;:::i;:::-;15380:3;15373:50;15452:4;15447:3;15443:14;15436:21;;15323:144;15307:4;15302:3;15298:14;15291:21;;15247:220;;;15251:21;14865:608;;14763:710;;;;;:::o;15496:370::-;15567:5;15616:3;15609:4;15601:6;15597:17;15593:27;15583:122;;15624:79;;:::i;:::-;15583:122;15741:6;15728:20;15766:94;15856:3;15848:6;15841:4;15833:6;15829:17;15766:94;:::i;:::-;15757:103;;15573:293;15496:370;;;;:::o;15872:684::-;15965:6;15973;16022:2;16010:9;16001:7;15997:23;15993:32;15990:119;;;16028:79;;:::i;:::-;15990:119;16176:1;16165:9;16161:17;16148:31;16206:18;16198:6;16195:30;16192:117;;;16228:79;;:::i;:::-;16192:117;16333:78;16403:7;16394:6;16383:9;16379:22;16333:78;:::i;:::-;16323:88;;16119:302;16460:2;16486:53;16531:7;16522:6;16511:9;16507:22;16486:53;:::i;:::-;16476:63;;16431:118;15872:684;;;;;:::o;16562:117::-;16671:1;16668;16661:12;16702:568;16775:8;16785:6;16835:3;16828:4;16820:6;16816:17;16812:27;16802:122;;16843:79;;:::i;:::-;16802:122;16956:6;16943:20;16933:30;;16986:18;16978:6;16975:30;16972:117;;;17008:79;;:::i;:::-;16972:117;17122:4;17114:6;17110:17;17098:29;;17176:3;17168:4;17160:6;17156:17;17146:8;17142:32;17139:41;17136:128;;;17183:79;;:::i;:::-;17136:128;16702:568;;;;;:::o;17276:704::-;17371:6;17379;17387;17436:2;17424:9;17415:7;17411:23;17407:32;17404:119;;;17442:79;;:::i;:::-;17404:119;17562:1;17587:53;17632:7;17623:6;17612:9;17608:22;17587:53;:::i;:::-;17577:63;;17533:117;17717:2;17706:9;17702:18;17689:32;17748:18;17740:6;17737:30;17734:117;;;17770:79;;:::i;:::-;17734:117;17883:80;17955:7;17946:6;17935:9;17931:22;17883:80;:::i;:::-;17865:98;;;;17660:313;17276:704;;;;;:::o;17986:474::-;18054:6;18062;18111:2;18099:9;18090:7;18086:23;18082:32;18079:119;;;18117:79;;:::i;:::-;18079:119;18237:1;18262:53;18307:7;18298:6;18287:9;18283:22;18262:53;:::i;:::-;18252:63;;18208:117;18364:2;18390:53;18435:7;18426:6;18415:9;18411:22;18390:53;:::i;:::-;18380:63;;18335:118;17986:474;;;;;:::o;18466:182::-;18606:34;18602:1;18594:6;18590:14;18583:58;18466:182;:::o;18654:366::-;18796:3;18817:67;18881:2;18876:3;18817:67;:::i;:::-;18810:74;;18893:93;18982:3;18893:93;:::i;:::-;19011:2;19006:3;19002:12;18995:19;;18654:366;;;:::o;19026:419::-;19192:4;19230:2;19219:9;19215:18;19207:26;;19279:9;19273:4;19269:20;19265:1;19254:9;19250:17;19243:47;19307:131;19433:4;19307:131;:::i;:::-;19299:139;;19026:419;;;:::o;19451:180::-;19499:77;19496:1;19489:88;19596:4;19593:1;19586:15;19620:4;19617:1;19610:15;19637:320;19681:6;19718:1;19712:4;19708:12;19698:22;;19765:1;19759:4;19755:12;19786:18;19776:81;;19842:4;19834:6;19830:17;19820:27;;19776:81;19904:2;19896:6;19893:14;19873:18;19870:38;19867:84;;;19923:18;;:::i;:::-;19867:84;19688:269;19637:320;;;:::o;19963:232::-;20103:34;20099:1;20091:6;20087:14;20080:58;20172:15;20167:2;20159:6;20155:15;20148:40;19963:232;:::o;20201:366::-;20343:3;20364:67;20428:2;20423:3;20364:67;:::i;:::-;20357:74;;20440:93;20529:3;20440:93;:::i;:::-;20558:2;20553:3;20549:12;20542:19;;20201:366;;;:::o;20573:419::-;20739:4;20777:2;20766:9;20762:18;20754:26;;20826:9;20820:4;20816:20;20812:1;20801:9;20797:17;20790:47;20854:131;20980:4;20854:131;:::i;:::-;20846:139;;20573:419;;;:::o;20998:221::-;21138:34;21134:1;21126:6;21122:14;21115:58;21207:4;21202:2;21194:6;21190:15;21183:29;20998:221;:::o;21225:366::-;21367:3;21388:67;21452:2;21447:3;21388:67;:::i;:::-;21381:74;;21464:93;21553:3;21464:93;:::i;:::-;21582:2;21577:3;21573:12;21566:19;;21225:366;;;:::o;21597:419::-;21763:4;21801:2;21790:9;21786:18;21778:26;;21850:9;21844:4;21840:20;21836:1;21825:9;21821:17;21814:47;21878:131;22004:4;21878:131;:::i;:::-;21870:139;;21597:419;;;:::o;22022:244::-;22162:34;22158:1;22150:6;22146:14;22139:58;22231:27;22226:2;22218:6;22214:15;22207:52;22022:244;:::o;22272:366::-;22414:3;22435:67;22499:2;22494:3;22435:67;:::i;:::-;22428:74;;22511:93;22600:3;22511:93;:::i;:::-;22629:2;22624:3;22620:12;22613:19;;22272:366;;;:::o;22644:419::-;22810:4;22848:2;22837:9;22833:18;22825:26;;22897:9;22891:4;22887:20;22883:1;22872:9;22868:17;22861:47;22925:131;23051:4;22925:131;:::i;:::-;22917:139;;22644:419;;;:::o;23069:180::-;23117:77;23114:1;23107:88;23214:4;23211:1;23204:15;23238:4;23235:1;23228:15;23255:191;23295:4;23315:20;23333:1;23315:20;:::i;:::-;23310:25;;23349:20;23367:1;23349:20;:::i;:::-;23344:25;;23388:1;23385;23382:8;23379:34;;;23393:18;;:::i;:::-;23379:34;23438:1;23435;23431:9;23423:17;;23255:191;;;;:::o;23452:221::-;23592:34;23588:1;23580:6;23576:14;23569:58;23661:4;23656:2;23648:6;23644:15;23637:29;23452:221;:::o;23679:366::-;23821:3;23842:67;23906:2;23901:3;23842:67;:::i;:::-;23835:74;;23918:93;24007:3;23918:93;:::i;:::-;24036:2;24031:3;24027:12;24020:19;;23679:366;;;:::o;24051:419::-;24217:4;24255:2;24244:9;24240:18;24232:26;;24304:9;24298:4;24294:20;24290:1;24279:9;24275:17;24268:47;24332:131;24458:4;24332:131;:::i;:::-;24324:139;;24051:419;;;:::o;24476:233::-;24515:3;24538:24;24556:5;24538:24;:::i;:::-;24529:33;;24584:66;24577:5;24574:77;24571:103;;;24654:18;;:::i;:::-;24571:103;24701:1;24694:5;24690:13;24683:20;;24476:233;;;:::o;24715:::-;24855:34;24851:1;24843:6;24839:14;24832:58;24924:16;24919:2;24911:6;24907:15;24900:41;24715:233;:::o;24954:366::-;25096:3;25117:67;25181:2;25176:3;25117:67;:::i;:::-;25110:74;;25193:93;25282:3;25193:93;:::i;:::-;25311:2;25306:3;25302:12;25295:19;;24954:366;;;:::o;25326:419::-;25492:4;25530:2;25519:9;25515:18;25507:26;;25579:9;25573:4;25569:20;25565:1;25554:9;25550:17;25543:47;25607:131;25733:4;25607:131;:::i;:::-;25599:139;;25326:419;;;:::o;25751:305::-;25791:3;25810:20;25828:1;25810:20;:::i;:::-;25805:25;;25844:20;25862:1;25844:20;:::i;:::-;25839:25;;25998:1;25930:66;25926:74;25923:1;25920:81;25917:107;;;26004:18;;:::i;:::-;25917:107;26048:1;26045;26041:9;26034:16;;25751:305;;;;:::o;26062:168::-;26202:20;26198:1;26190:6;26186:14;26179:44;26062:168;:::o;26236:366::-;26378:3;26399:67;26463:2;26458:3;26399:67;:::i;:::-;26392:74;;26475:93;26564:3;26475:93;:::i;:::-;26593:2;26588:3;26584:12;26577:19;;26236:366;;;:::o;26608:419::-;26774:4;26812:2;26801:9;26797:18;26789:26;;26861:9;26855:4;26851:20;26847:1;26836:9;26832:17;26825:47;26889:131;27015:4;26889:131;:::i;:::-;26881:139;;26608:419;;;:::o;27033:181::-;27173:33;27169:1;27161:6;27157:14;27150:57;27033:181;:::o;27220:366::-;27362:3;27383:67;27447:2;27442:3;27383:67;:::i;:::-;27376:74;;27459:93;27548:3;27459:93;:::i;:::-;27577:2;27572:3;27568:12;27561:19;;27220:366;;;:::o;27592:419::-;27758:4;27796:2;27785:9;27781:18;27773:26;;27845:9;27839:4;27835:20;27831:1;27820:9;27816:17;27809:47;27873:131;27999:4;27873:131;:::i;:::-;27865:139;;27592:419;;;:::o;28017:147::-;28118:11;28155:3;28140:18;;28017:147;;;;:::o;28170:114::-;;:::o;28290:398::-;28449:3;28470:83;28551:1;28546:3;28470:83;:::i;:::-;28463:90;;28562:93;28651:3;28562:93;:::i;:::-;28680:1;28675:3;28671:11;28664:18;;28290:398;;;:::o;28694:379::-;28878:3;28900:147;29043:3;28900:147;:::i;:::-;28893:154;;29064:3;29057:10;;28694:379;;;:::o;29079:222::-;29219:34;29215:1;29207:6;29203:14;29196:58;29288:5;29283:2;29275:6;29271:15;29264:30;29079:222;:::o;29307:366::-;29449:3;29470:67;29534:2;29529:3;29470:67;:::i;:::-;29463:74;;29546:93;29635:3;29546:93;:::i;:::-;29664:2;29659:3;29655:12;29648:19;;29307:366;;;:::o;29679:419::-;29845:4;29883:2;29872:9;29868:18;29860:26;;29932:9;29926:4;29922:20;29918:1;29907:9;29903:17;29896:47;29960:131;30086:4;29960:131;:::i;:::-;29952:139;;29679:419;;;:::o;30104:230::-;30244:34;30240:1;30232:6;30228:14;30221:58;30313:13;30308:2;30300:6;30296:15;30289:38;30104:230;:::o;30340:366::-;30482:3;30503:67;30567:2;30562:3;30503:67;:::i;:::-;30496:74;;30579:93;30668:3;30579:93;:::i;:::-;30697:2;30692:3;30688:12;30681:19;;30340:366;;;:::o;30712:419::-;30878:4;30916:2;30905:9;30901:18;30893:26;;30965:9;30959:4;30955:20;30951:1;30940:9;30936:17;30929:47;30993:131;31119:4;30993:131;:::i;:::-;30985:139;;30712:419;;;:::o;31137:164::-;31277:16;31273:1;31265:6;31261:14;31254:40;31137:164;:::o;31307:366::-;31449:3;31470:67;31534:2;31529:3;31470:67;:::i;:::-;31463:74;;31546:93;31635:3;31546:93;:::i;:::-;31664:2;31659:3;31655:12;31648:19;;31307:366;;;:::o;31679:419::-;31845:4;31883:2;31872:9;31868:18;31860:26;;31932:9;31926:4;31922:20;31918:1;31907:9;31903:17;31896:47;31960:131;32086:4;31960:131;:::i;:::-;31952:139;;31679:419;;;:::o;32104:176::-;32244:28;32240:1;32232:6;32228:14;32221:52;32104:176;:::o;32286:366::-;32428:3;32449:67;32513:2;32508:3;32449:67;:::i;:::-;32442:74;;32525:93;32614:3;32525:93;:::i;:::-;32643:2;32638:3;32634:12;32627:19;;32286:366;;;:::o;32658:419::-;32824:4;32862:2;32851:9;32847:18;32839:26;;32911:9;32905:4;32901:20;32897:1;32886:9;32882:17;32875:47;32939:131;33065:4;32939:131;:::i;:::-;32931:139;;32658:419;;;:::o;33083:175::-;33223:27;33219:1;33211:6;33207:14;33200:51;33083:175;:::o;33264:366::-;33406:3;33427:67;33491:2;33486:3;33427:67;:::i;:::-;33420:74;;33503:93;33592:3;33503:93;:::i;:::-;33621:2;33616:3;33612:12;33605:19;;33264:366;;;:::o;33636:419::-;33802:4;33840:2;33829:9;33825:18;33817:26;;33889:9;33883:4;33879:20;33875:1;33864:9;33860:17;33853:47;33917:131;34043:4;33917:131;:::i;:::-;33909:139;;33636:419;;;:::o;34061:172::-;34201:24;34197:1;34189:6;34185:14;34178:48;34061:172;:::o;34239:366::-;34381:3;34402:67;34466:2;34461:3;34402:67;:::i;:::-;34395:74;;34478:93;34567:3;34478:93;:::i;:::-;34596:2;34591:3;34587:12;34580:19;;34239:366;;;:::o;34611:419::-;34777:4;34815:2;34804:9;34800:18;34792:26;;34864:9;34858:4;34854:20;34850:1;34839:9;34835:17;34828:47;34892:131;35018:4;34892:131;:::i;:::-;34884:139;;34611:419;;;:::o;35036:348::-;35076:7;35099:20;35117:1;35099:20;:::i;:::-;35094:25;;35133:20;35151:1;35133:20;:::i;:::-;35128:25;;35321:1;35253:66;35249:74;35246:1;35243:81;35238:1;35231:9;35224:17;35220:105;35217:131;;;35328:18;;:::i;:::-;35217:131;35376:1;35373;35369:9;35358:20;;35036:348;;;;:::o;35390:172::-;35530:24;35526:1;35518:6;35514:14;35507:48;35390:172;:::o;35568:366::-;35710:3;35731:67;35795:2;35790:3;35731:67;:::i;:::-;35724:74;;35807:93;35896:3;35807:93;:::i;:::-;35925:2;35920:3;35916:12;35909:19;;35568:366;;;:::o;35940:419::-;36106:4;36144:2;36133:9;36129:18;36121:26;;36193:9;36187:4;36183:20;36179:1;36168:9;36164:17;36157:47;36221:131;36347:4;36221:131;:::i;:::-;36213:139;;35940:419;;;:::o;36365:176::-;36505:28;36501:1;36493:6;36489:14;36482:52;36365:176;:::o;36547:366::-;36689:3;36710:67;36774:2;36769:3;36710:67;:::i;:::-;36703:74;;36786:93;36875:3;36786:93;:::i;:::-;36904:2;36899:3;36895:12;36888:19;;36547:366;;;:::o;36919:419::-;37085:4;37123:2;37112:9;37108:18;37100:26;;37172:9;37166:4;37162:20;37158:1;37147:9;37143:17;37136:47;37200:131;37326:4;37200:131;:::i;:::-;37192:139;;36919:419;;;:::o;37344:238::-;37484:34;37480:1;37472:6;37468:14;37461:58;37553:21;37548:2;37540:6;37536:15;37529:46;37344:238;:::o;37588:366::-;37730:3;37751:67;37815:2;37810:3;37751:67;:::i;:::-;37744:74;;37827:93;37916:3;37827:93;:::i;:::-;37945:2;37940:3;37936:12;37929:19;;37588:366;;;:::o;37960:419::-;38126:4;38164:2;38153:9;38149:18;38141:26;;38213:9;38207:4;38203:20;38199:1;38188:9;38184:17;38177:47;38241:131;38367:4;38241:131;:::i;:::-;38233:139;;37960:419;;;:::o;38385:234::-;38525:34;38521:1;38513:6;38509:14;38502:58;38594:17;38589:2;38581:6;38577:15;38570:42;38385:234;:::o;38625:366::-;38767:3;38788:67;38852:2;38847:3;38788:67;:::i;:::-;38781:74;;38864:93;38953:3;38864:93;:::i;:::-;38982:2;38977:3;38973:12;38966:19;;38625:366;;;:::o;38997:419::-;39163:4;39201:2;39190:9;39186:18;39178:26;;39250:9;39244:4;39240:20;39236:1;39225:9;39221:17;39214:47;39278:131;39404:4;39278:131;:::i;:::-;39270:139;;38997:419;;;:::o;39422:148::-;39524:11;39561:3;39546:18;;39422:148;;;;:::o;39576:377::-;39682:3;39710:39;39743:5;39710:39;:::i;:::-;39765:89;39847:6;39842:3;39765:89;:::i;:::-;39758:96;;39863:52;39908:6;39903:3;39896:4;39889:5;39885:16;39863:52;:::i;:::-;39940:6;39935:3;39931:16;39924:23;;39686:267;39576:377;;;;:::o;39959:435::-;40139:3;40161:95;40252:3;40243:6;40161:95;:::i;:::-;40154:102;;40273:95;40364:3;40355:6;40273:95;:::i;:::-;40266:102;;40385:3;40378:10;;39959:435;;;;;:::o;40400:167::-;40540:19;40536:1;40528:6;40524:14;40517:43;40400:167;:::o;40573:366::-;40715:3;40736:67;40800:2;40795:3;40736:67;:::i;:::-;40729:74;;40812:93;40901:3;40812:93;:::i;:::-;40930:2;40925:3;40921:12;40914:19;;40573:366;;;:::o;40945:419::-;41111:4;41149:2;41138:9;41134:18;41126:26;;41198:9;41192:4;41188:20;41184:1;41173:9;41169:17;41162:47;41226:131;41352:4;41226:131;:::i;:::-;41218:139;;40945:419;;;:::o;41370:164::-;41510:16;41506:1;41498:6;41494:14;41487:40;41370:164;:::o;41540:366::-;41682:3;41703:67;41767:2;41762:3;41703:67;:::i;:::-;41696:74;;41779:93;41868:3;41779:93;:::i;:::-;41897:2;41892:3;41888:12;41881:19;;41540:366;;;:::o;41912:419::-;42078:4;42116:2;42105:9;42101:18;42093:26;;42165:9;42159:4;42155:20;42151:1;42140:9;42136:17;42129:47;42193:131;42319:4;42193:131;:::i;:::-;42185:139;;41912:419;;;:::o;42337:94::-;42370:8;42418:5;42414:2;42410:14;42389:35;;42337:94;;;:::o;42437:::-;42476:7;42505:20;42519:5;42505:20;:::i;:::-;42494:31;;42437:94;;;:::o;42537:100::-;42576:7;42605:26;42625:5;42605:26;:::i;:::-;42594:37;;42537:100;;;:::o;42643:157::-;42748:45;42768:24;42786:5;42768:24;:::i;:::-;42748:45;:::i;:::-;42743:3;42736:58;42643:157;;:::o;42806:256::-;42918:3;42933:75;43004:3;42995:6;42933:75;:::i;:::-;43033:2;43028:3;43024:12;43017:19;;43053:3;43046:10;;42806:256;;;;:::o;43068:165::-;43208:17;43204:1;43196:6;43192:14;43185:41;43068:165;:::o;43239:366::-;43381:3;43402:67;43466:2;43461:3;43402:67;:::i;:::-;43395:74;;43478:93;43567:3;43478:93;:::i;:::-;43596:2;43591:3;43587:12;43580:19;;43239:366;;;:::o;43611:419::-;43777:4;43815:2;43804:9;43800:18;43792:26;;43864:9;43858:4;43854:20;43850:1;43839:9;43835:17;43828:47;43892:131;44018:4;43892:131;:::i;:::-;43884:139;;43611:419;;;:::o;44036:168::-;44176:20;44172:1;44164:6;44160:14;44153:44;44036:168;:::o;44210:366::-;44352:3;44373:67;44437:2;44432:3;44373:67;:::i;:::-;44366:74;;44449:93;44538:3;44449:93;:::i;:::-;44567:2;44562:3;44558:12;44551:19;;44210:366;;;:::o;44582:419::-;44748:4;44786:2;44775:9;44771:18;44763:26;;44835:9;44829:4;44825:20;44821:1;44810:9;44806:17;44799:47;44863:131;44989:4;44863:131;:::i;:::-;44855:139;;44582:419;;;:::o;45007:225::-;45147:34;45143:1;45135:6;45131:14;45124:58;45216:8;45211:2;45203:6;45199:15;45192:33;45007:225;:::o;45238:366::-;45380:3;45401:67;45465:2;45460:3;45401:67;:::i;:::-;45394:74;;45477:93;45566:3;45477:93;:::i;:::-;45595:2;45590:3;45586:12;45579:19;;45238:366;;;:::o;45610:419::-;45776:4;45814:2;45803:9;45799:18;45791:26;;45863:9;45857:4;45853:20;45849:1;45838:9;45834:17;45827:47;45891:131;46017:4;45891:131;:::i;:::-;45883:139;;45610:419;;;:::o;46035:237::-;46175:34;46171:1;46163:6;46159:14;46152:58;46244:20;46239:2;46231:6;46227:15;46220:45;46035:237;:::o;46278:366::-;46420:3;46441:67;46505:2;46500:3;46441:67;:::i;:::-;46434:74;;46517:93;46606:3;46517:93;:::i;:::-;46635:2;46630:3;46626:12;46619:19;;46278:366;;;:::o;46650:419::-;46816:4;46854:2;46843:9;46839:18;46831:26;;46903:9;46897:4;46893:20;46889:1;46878:9;46874:17;46867:47;46931:131;47057:4;46931:131;:::i;:::-;46923:139;;46650:419;;;:::o;47075:225::-;47215:34;47211:1;47203:6;47199:14;47192:58;47284:8;47279:2;47271:6;47267:15;47260:33;47075:225;:::o;47306:366::-;47448:3;47469:67;47533:2;47528:3;47469:67;:::i;:::-;47462:74;;47545:93;47634:3;47545:93;:::i;:::-;47663:2;47658:3;47654:12;47647:19;;47306:366;;;:::o;47678:419::-;47844:4;47882:2;47871:9;47867:18;47859:26;;47931:9;47925:4;47921:20;47917:1;47906:9;47902:17;47895:47;47959:131;48085:4;47959:131;:::i;:::-;47951:139;;47678:419;;;:::o;48103:224::-;48243:34;48239:1;48231:6;48227:14;48220:58;48312:7;48307:2;48299:6;48295:15;48288:32;48103:224;:::o;48333:366::-;48475:3;48496:67;48560:2;48555:3;48496:67;:::i;:::-;48489:74;;48572:93;48661:3;48572:93;:::i;:::-;48690:2;48685:3;48681:12;48674:19;;48333:366;;;:::o;48705:419::-;48871:4;48909:2;48898:9;48894:18;48886:26;;48958:9;48952:4;48948:20;48944:1;48933:9;48929:17;48922:47;48986:131;49112:4;48986:131;:::i;:::-;48978:139;;48705:419;;;:::o;49130:118::-;49167:7;49207:34;49200:5;49196:46;49185:57;;49130:118;;;:::o;49254:191::-;49294:4;49314:20;49332:1;49314:20;:::i;:::-;49309:25;;49348:20;49366:1;49348:20;:::i;:::-;49343:25;;49387:1;49384;49381:8;49378:34;;;49392:18;;:::i;:::-;49378:34;49437:1;49434;49430:9;49422:17;;49254:191;;;;:::o;49451:273::-;49491:3;49510:20;49528:1;49510:20;:::i;:::-;49505:25;;49544:20;49562:1;49544:20;:::i;:::-;49539:25;;49666:1;49630:34;49626:42;49623:1;49620:49;49617:75;;;49672:18;;:::i;:::-;49617:75;49716:1;49713;49709:9;49702:16;;49451:273;;;;:::o;49730:229::-;49870:34;49866:1;49858:6;49854:14;49847:58;49939:12;49934:2;49926:6;49922:15;49915:37;49730:229;:::o;49965:366::-;50107:3;50128:67;50192:2;50187:3;50128:67;:::i;:::-;50121:74;;50204:93;50293:3;50204:93;:::i;:::-;50322:2;50317:3;50313:12;50306:19;;49965:366;;;:::o;50337:419::-;50503:4;50541:2;50530:9;50526:18;50518:26;;50590:9;50584:4;50580:20;50576:1;50565:9;50561:17;50554:47;50618:131;50744:4;50618:131;:::i;:::-;50610:139;;50337:419;;;:::o;50762:171::-;50801:3;50824:24;50842:5;50824:24;:::i;:::-;50815:33;;50870:4;50863:5;50860:15;50857:41;;;50878:18;;:::i;:::-;50857:41;50925:1;50918:5;50914:13;50907:20;;50762:171;;;:::o;50939:234::-;51079:34;51075:1;51067:6;51063:14;51056:58;51148:17;51143:2;51135:6;51131:15;51124:42;50939:234;:::o;51179:366::-;51321:3;51342:67;51406:2;51401:3;51342:67;:::i;:::-;51335:74;;51418:93;51507:3;51418:93;:::i;:::-;51536:2;51531:3;51527:12;51520:19;;51179:366;;;:::o;51551:419::-;51717:4;51755:2;51744:9;51740:18;51732:26;;51804:9;51798:4;51794:20;51790:1;51779:9;51775:17;51768:47;51832:131;51958:4;51832:131;:::i;:::-;51824:139;;51551:419;;;:::o;51976:98::-;52027:6;52061:5;52055:12;52045:22;;51976:98;;;:::o;52080:168::-;52163:11;52197:6;52192:3;52185:19;52237:4;52232:3;52228:14;52213:29;;52080:168;;;;:::o;52254:360::-;52340:3;52368:38;52400:5;52368:38;:::i;:::-;52422:70;52485:6;52480:3;52422:70;:::i;:::-;52415:77;;52501:52;52546:6;52541:3;52534:4;52527:5;52523:16;52501:52;:::i;:::-;52578:29;52600:6;52578:29;:::i;:::-;52573:3;52569:39;52562:46;;52344:270;52254:360;;;;:::o;52620:640::-;52815:4;52853:3;52842:9;52838:19;52830:27;;52867:71;52935:1;52924:9;52920:17;52911:6;52867:71;:::i;:::-;52948:72;53016:2;53005:9;53001:18;52992:6;52948:72;:::i;:::-;53030;53098:2;53087:9;53083:18;53074:6;53030:72;:::i;:::-;53149:9;53143:4;53139:20;53134:2;53123:9;53119:18;53112:48;53177:76;53248:4;53239:6;53177:76;:::i;:::-;53169:84;;52620:640;;;;;;;:::o;53266:141::-;53322:5;53353:6;53347:13;53338:22;;53369:32;53395:5;53369:32;:::i;:::-;53266:141;;;;:::o;53413:349::-;53482:6;53531:2;53519:9;53510:7;53506:23;53502:32;53499:119;;;53537:79;;:::i;:::-;53499:119;53657:1;53682:63;53737:7;53728:6;53717:9;53713:22;53682:63;:::i;:::-;53672:73;;53628:127;53413:349;;;;:::o;53768:180::-;53816:77;53813:1;53806:88;53913:4;53910:1;53903:15;53937:4;53934:1;53927:15;53954:185;53994:1;54011:20;54029:1;54011:20;:::i;:::-;54006:25;;54045:20;54063:1;54045:20;:::i;:::-;54040:25;;54084:1;54074:35;;54089:18;;:::i;:::-;54074:35;54131:1;54128;54124:9;54119:14;;53954:185;;;;:::o;54145:176::-;54177:1;54194:20;54212:1;54194:20;:::i;:::-;54189:25;;54228:20;54246:1;54228:20;:::i;:::-;54223:25;;54267:1;54257:35;;54272:18;;:::i;:::-;54257:35;54313:1;54310;54306:9;54301:14;;54145:176;;;;:::o;54327:180::-;54375:77;54372:1;54365:88;54472:4;54469:1;54462:15;54496:4;54493:1;54486:15;54513:236;54653:34;54649:1;54641:6;54637:14;54630:58;54722:19;54717:2;54709:6;54705:15;54698:44;54513:236;:::o;54755:366::-;54897:3;54918:67;54982:2;54977:3;54918:67;:::i;:::-;54911:74;;54994:93;55083:3;54994:93;:::i;:::-;55112:2;55107:3;55103:12;55096:19;;54755:366;;;:::o;55127:419::-;55293:4;55331:2;55320:9;55316:18;55308:26;;55380:9;55374:4;55370:20;55366:1;55355:9;55351:17;55344:47;55408:131;55534:4;55408:131;:::i;:::-;55400:139;;55127:419;;;:::o;55552:220::-;55692:34;55688:1;55680:6;55676:14;55669:58;55761:3;55756:2;55748:6;55744:15;55737:28;55552:220;:::o;55778:366::-;55920:3;55941:67;56005:2;56000:3;55941:67;:::i;:::-;55934:74;;56017:93;56106:3;56017:93;:::i;:::-;56135:2;56130:3;56126:12;56119:19;;55778:366;;;:::o;56150:419::-;56316:4;56354:2;56343:9;56339:18;56331:26;;56403:9;56397:4;56393:20;56389:1;56378:9;56374:17;56367:47;56431:131;56557:4;56431:131;:::i;:::-;56423:139;;56150:419;;;:::o;56575:179::-;56715:31;56711:1;56703:6;56699:14;56692:55;56575:179;:::o;56760:366::-;56902:3;56923:67;56987:2;56982:3;56923:67;:::i;:::-;56916:74;;56999:93;57088:3;56999:93;:::i;:::-;57117:2;57112:3;57108:12;57101:19;;56760:366;;;:::o;57132:419::-;57298:4;57336:2;57325:9;57321:18;57313:26;;57385:9;57379:4;57375:20;57371:1;57360:9;57356:17;57349:47;57413:131;57539:4;57413:131;:::i;:::-;57405:139;;57132:419;;;:::o;57557:221::-;57697:34;57693:1;57685:6;57681:14;57674:58;57766:4;57761:2;57753:6;57749:15;57742:29;57557:221;:::o;57784:366::-;57926:3;57947:67;58011:2;58006:3;57947:67;:::i;:::-;57940:74;;58023:93;58112:3;58023:93;:::i;:::-;58141:2;58136:3;58132:12;58125:19;;57784:366;;;:::o;58156:419::-;58322:4;58360:2;58349:9;58345:18;58337:26;;58409:9;58403:4;58399:20;58395:1;58384:9;58380:17;58373:47;58437:131;58563:4;58437:131;:::i;:::-;58429:139;;58156:419;;;:::o

Swarm Source

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