ETH Price: $3,478.55 (+0.42%)
Gas: 5.54 Gwei

Token

Monster Trucks Collection (TRUCK)
 

Overview

Max Total Supply

2,500 TRUCK

Holders

1,424

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 TRUCK
0x0CCcF1eB25376aE4360a3987c00301a6cBa4200e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Float like a butterfly, sting like a bee. Join or Run with fear.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MonsterTrucks

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT     

//
// • ▌ ▄ ·.        ▐ ▄ .▄▄ · ▄▄▄▄▄▄▄▄ .▄▄▄      ▄▄▄▄▄▄▄▄  ▄• ▄▌ ▄▄· ▄ •▄ .▄▄ · 
//. ·██ ▐███▪▪     •█▌▐█▐█ ▀. •██  ▀▄.▀·▀▄ █·    •██  ▀▄ █·█▪██▌▐█ ▌▪█▌▄▌▪▐█ ▀. 
//. ▐█ ▌▐▌▐█· ▄█▀▄ ▐█▐▐▌▄▀▀▀█▄ ▐█.▪▐▀▀▪▄▐▀▀▄      ▐█.▪▐▀▀▄ █▌▐█▌██ ▄▄▐▀▀▄·▄▀▀▀█▄
//. ██ ██▌▐█▌▐█▌.▐▌██▐█▌▐█▄▪▐█ ▐█▌·▐█▄▄▌▐█•█▌     ▐█▌·▐█•█▌▐█▄█▌▐███▌▐█.█▌▐█▄▪▐█
//. ▀▀  █▪▀▀▀ ▀█▄▀▪▀▀ █▪ ▀▀▀▀  ▀▀▀  ▀▀▀ .▀  ▀     ▀▀▀ .▀  ▀ ▀▀▀ ·▀▀▀ ·▀  ▀ ▀▀▀▀ 
//
//

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

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

pragma solidity ^0.8.0;
abstract contract Ownable is Context {
    address private _owner;

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

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

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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


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

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

pragma solidity ^0.8.0;


library EnumerableSet {


    struct Set {
        // Storage of set values
        bytes32[] _values;

        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);

            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {

        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                set._values[toDeleteIndex] = lastValue;
                
                set._indexes[lastValue] = valueIndex; 
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

pragma solidity ^0.8.4;

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    error MintERC2309QuantityExceedsLimit();

    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {

        address addr;

        uint64 startTimestamp;

        bool burned;

        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    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,
        bytes calldata data
    ) external payable;

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

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

    function approve(address to, uint256 tokenId) external payable;

    function setApprovalForAll(address operator, bool _approved) external;

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

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

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

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

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

    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

pragma solidity ^0.8.4;

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

contract ERC721A is IERC721A {

    struct TokenApprovalRef {
        address value;
    }

    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    uint256 private constant _BITPOS_AUX = 192;

    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    uint256 private constant _BITMASK_BURNED = 1 << 224;

    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;

    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    uint256 private _currentIndex;

    uint256 private _burnCounter;

    string private _name;

    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;

    mapping(address => uint256) private _packedAddressData;

    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {

        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view virtual returns (uint256) {

        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {

        return
            interfaceId == 0x01ffc9a7 || 
            interfaceId == 0x80ac58cd || 
            interfaceId == 0x5b5e139f; 
    }

    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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

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

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];

                    if (packed & _BITMASK_BURNED == 0) {

                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP);
        ownership.burned = packed & _BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA);
    }

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, _BITMASK_ADDRESS)
            // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`.
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    function approve(address to, uint256 tokenId) public payable virtual override {
        address owner = ownerOf(tokenId);

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId].value = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

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

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned.
    }

    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {

            owner := and(owner, _BITMASK_ADDRESS)

            msgSender := and(msgSender, _BITMASK_ADDRESS)

            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];

        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        assembly {
            if approvedAddress {

                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            --_packedAddressData[from]; 
            ++_packedAddressData[to]; 

            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public payable virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

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

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

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

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

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

            assembly {

                toMasked := and(to, _BITMASK_ADDRESS)

                log4(
                    0, 
                    0, 
                    _TRANSFER_EVENT_SIGNATURE, 
                    0, 
                    toMasked, 
                    startTokenId 
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {

                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

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

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

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

    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
            
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        assembly {
            if approvedAddress {
                
                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        unchecked {
            _burnCounter++;
        }
    }

    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }

    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {

            let m := add(mload(0x40), 0xa0)

            mstore(0x40, m)

            str := sub(m, 0x20)

            mstore(str, 0)

            let end := str

            for { let temp := value } 1 {} {
                str := sub(str, 1)

                mstore8(str, add(48, mod(temp, 10)))

                temp := div(temp, 10)

                if iszero(temp) { break }
            }

            let length := sub(end, str)

            str := sub(str, 0x20)

            mstore(str, length)
        }
    }
}

pragma solidity ^0.8.13;

contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry constant operatorFilterRegistry =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (subscribe) {
                operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    operatorFilterRegistry.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator() virtual {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }
}

pragma solidity ^0.8.13;

contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

pragma solidity ^0.8.4;

interface IERC721ABurnable is IERC721A {

    function burn(uint256 tokenId) external;
}

pragma solidity ^0.8.4;
abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable {
    function burn(uint256 tokenId) public virtual override {
        _burn(tokenId, true);
    }
}

pragma solidity ^0.8.16;
contract MonsterTrucks is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{
string public CONTRACT_URI = "";
mapping(address => uint) public userHasMinted;
bool public REVEALED;
string public UNREVEALED_URI = "";
string public BASE_URI = "";
bool public isPublicMintEnabled = false;
uint public COLLECTION_SIZE = 4444;
uint public MINT_PRICE = 0.0033 ether;
uint public MAX_BATCH_SIZE = 21;
uint public SUPPLY_PER_WALLET = 21;
uint public FREE_SUPPLY_PER_WALLET = 1;
constructor() ERC721A("Monster Trucks Collection", "TRUCK") {}
 
   function FreeMint(uint quantity)
        external
        payable
        callerIsUser 
        nonReentrant
    {
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + free;
        } else {
            price = 0;
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity;
        }

        require(isPublicMintEnabled, "Mint not ready yet!");
        require(totalSupply() + quantity <= COLLECTION_SIZE, "No more tokens!");

        require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to total mint over limit");

        require(quantity <= MAX_BATCH_SIZE, "Tried to mint over limit, retry with reduced quantity");
        require(msg.value >= price, "Must send more eth");

        _safeMint(msg.sender, quantity);

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }

    function MintViaWhitelist(uint256 quantity, address receiver) public onlyOwner {
        require(
            totalSupply() + quantity <= COLLECTION_SIZE,
            "No more tokens in stock!"
        );
        
        _safeMint(receiver, quantity);
    }

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    function getPrice(uint quantity) public view returns(uint){
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
        } else {
            price = 0;
        }
        return price;
    }

    function mint(uint quantity)
        external
        payable
        callerIsUser 
        nonReentrant
    {
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + free;
        } else {
            price = 0;
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity;
        }

        require(isPublicMintEnabled, "Mint not ready yet!");
        require(totalSupply() + quantity <= COLLECTION_SIZE, "No more tokens!");

        require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to total mint over over limit");

        require(quantity <= MAX_BATCH_SIZE, "Tried to mint over limit, retry with reduced quantity");
        require(msg.value >= price, "Must send more eth");

        _safeMint(msg.sender, quantity);

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }
    function setPublicMintEnabled() public onlyOwner {
        isPublicMintEnabled = !isPublicMintEnabled;
    }

    function withdrawFunds() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function RevealCollection(bool _revealed, string memory _baseURI) public onlyOwner {
        BASE_URI = _baseURI;
        REVEALED = _revealed;
    }

    function contractURI() public view returns (string memory) {
        return CONTRACT_URI;
    }

    function setContract(string memory _contractURI) public onlyOwner {
        CONTRACT_URI = _contractURI;
    }

    function ChangeCollectionSupply(uint256 _new) external onlyOwner {
        COLLECTION_SIZE = _new;
    }

    function ChangePrice(uint256 _newPrice) external onlyOwner {
        MINT_PRICE = _newPrice;
    }

    function ChangeFreePerWallet(uint256 _new) external onlyOwner {
        FREE_SUPPLY_PER_WALLET = _new;
    }

    function ChangeSupplyPerWallet(uint256 _new) external onlyOwner {
        SUPPLY_PER_WALLET = _new;
    }

    function SetMaxBatchSize(uint256 _new) external onlyOwner {
        MAX_BATCH_SIZE = _new;
    }

    function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
        public payable
        override (ERC721A, IERC721A)
        onlyAllowedOperator
    {
        super.safeTransferFrom(from, to, tokenId, data);
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        override (ERC721A, IERC721A)
        returns (string memory)
    {
        if (REVEALED) {
            return
                string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId)));
        } else {
            return UNREVEALED_URI;
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeCollectionSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"ChangePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeSupplyPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"FreeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"MintViaWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"RevealCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":[],"name":"renounceOwnership","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":"payable","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":"payable","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":"_contractURI","type":"string"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","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":[{"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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600a9081620000249190620006df565b5060405180602001604052806000815250600d9081620000459190620006df565b5060405180602001604052806000815250600e9081620000669190620006df565b506000600f60006101000a81548160ff02191690831515021790555061115c601055660bb9551fc24000601155601560125560156013556001601455348015620000af57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601981526020017f4d6f6e7374657220547275636b7320436f6c6c656374696f6e000000000000008152506040518060400160405280600581526020017f545255434b00000000000000000000000000000000000000000000000000000081525062000153620001476200039460201b60201c565b6200039c60201b60201c565b8160039081620001649190620006df565b508060049081620001769190620006df565b50620001876200046060201b60201c565b6001819055505050600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200038c57801562000252576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620002189291906200080b565b600060405180830381600087803b1580156200023357600080fd5b505af115801562000248573d6000803e3d6000fd5b505050506200038b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200030c576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002d29291906200080b565b600060405180830381600087803b158015620002ed57600080fd5b505af115801562000302573d6000803e3d6000fd5b505050506200038a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000355919062000838565b600060405180830381600087803b1580156200037057600080fd5b505af115801562000385573d6000803e3d6000fd5b505050505b5b5b505062000855565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e757607f821691505b602082108103620004fd57620004fc6200049f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000528565b62000573868362000528565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c0620005ba620005b4846200058b565b62000595565b6200058b565b9050919050565b6000819050919050565b620005dc836200059f565b620005f4620005eb82620005c7565b84845462000535565b825550505050565b600090565b6200060b620005fc565b62000618818484620005d1565b505050565b5b8181101562000640576200063460008262000601565b6001810190506200061e565b5050565b601f8211156200068f57620006598162000503565b620006648462000518565b8101602085101562000674578190505b6200068c620006838562000518565b8301826200061d565b50505b505050565b600082821c905092915050565b6000620006b46000198460080262000694565b1980831691505092915050565b6000620006cf8383620006a1565b9150826002028217905092915050565b620006ea8262000465565b67ffffffffffffffff81111562000706576200070562000470565b5b620007128254620004ce565b6200071f82828562000644565b600060209050601f83116001811462000757576000841562000742578287015190505b6200074e8582620006c1565b865550620007be565b601f198416620007678662000503565b60005b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a1565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007f382620007c6565b9050919050565b6200080581620007e6565b82525050565b6000604082019050620008226000830185620007fa565b620008316020830184620007fa565b9392505050565b60006020820190506200084f6000830184620007fa565b92915050565b61453580620008656000396000f3fe60806040526004361061025c5760003560e01c806395d89b4111610144578063c87b56dd116100b6578063e75722301161007a578063e75722301461085e578063e8a3d4851461089b578063e985e9c5146108c6578063f2fde38b14610903578063f814943d1461092c578063fb92488b146109555761025c565b8063c87b56dd14610777578063cfdbf254146107b4578063d8258d95146107df578063da2d80da1461080a578063dbddb26a146108335761025c565b8063a4cdd71911610108578063a4cdd719146106a9578063a76a9587146106c0578063b88d4fde146106eb578063bdfaa08414610707578063c002d23d14610723578063c144a4ba1461074e5761025c565b806395d89b41146105e75780639a9e6bec14610612578063a0712d681461063b578063a1db246e14610657578063a22cb465146106805761025c565b806342842e0e116101dd5780635fe75587116101a15780635fe75587146104d75780636352211e1461050257806370a082311461053f578063715018a61461057c57806375b64471146105935780638da5cb5b146105bc5761025c565b806342842e0e1461041357806342966c681461042f578063507862d11461045857806356b48d631461048357806356b4f673146104ac5761025c565b80631422374f116102245780631422374f1461034d57806318160ddd146103785780631d985778146103a357806323b872dd146103e057806324600fc3146103fc5761025c565b80630116bc2d1461026157806301ffc9a71461028c57806306fdde03146102c9578063081812fc146102f4578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b5061027661097e565b604051610283919061310a565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613191565b610991565b6040516102c0919061310a565b60405180910390f35b3480156102d557600080fd5b506102de610a23565b6040516102eb919061324e565b60405180910390f35b34801561030057600080fd5b5061031b600480360381019061031691906132a6565b610ab5565b6040516103289190613314565b60405180910390f35b61034b6004803603810190610346919061335b565b610b34565b005b34801561035957600080fd5b50610362610c78565b60405161036f91906133aa565b60405180910390f35b34801561038457600080fd5b5061038d610c7e565b60405161039a91906133aa565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c591906133c5565b610c95565b6040516103d791906133aa565b60405180910390f35b6103fa60048036038101906103f591906133f2565b610cad565b005b34801561040857600080fd5b50610411610db9565b005b61042d600480360381019061042891906133f2565b610ec5565b005b34801561043b57600080fd5b50610456600480360381019061045191906132a6565b610fd1565b005b34801561046457600080fd5b5061046d610fdf565b60405161047a919061324e565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a5919061357a565b61106d565b005b3480156104b857600080fd5b506104c1611088565b6040516104ce919061324e565b60405180910390f35b3480156104e357600080fd5b506104ec611116565b6040516104f991906133aa565b60405180910390f35b34801561050e57600080fd5b50610529600480360381019061052491906132a6565b61111c565b6040516105369190613314565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906133c5565b61112e565b60405161057391906133aa565b60405180910390f35b34801561058857600080fd5b506105916111e6565b005b34801561059f57600080fd5b506105ba60048036038101906105b591906132a6565b6111fa565b005b3480156105c857600080fd5b506105d161120c565b6040516105de9190613314565b60405180910390f35b3480156105f357600080fd5b506105fc611235565b604051610609919061324e565b60405180910390f35b34801561061e57600080fd5b50610639600480360381019061063491906135c3565b6112c7565b005b610655600480360381019061065091906132a6565b611334565b005b34801561066357600080fd5b5061067e600480360381019061067991906132a6565b611781565b005b34801561068c57600080fd5b506106a760048036038101906106a2919061362f565b611793565b005b3480156106b557600080fd5b506106be61189e565b005b3480156106cc57600080fd5b506106d56118d2565b6040516106e2919061310a565b60405180910390f35b61070560048036038101906107009190613710565b6118e5565b005b610721600480360381019061071c91906132a6565b6119f3565b005b34801561072f57600080fd5b50610738611e40565b60405161074591906133aa565b60405180910390f35b34801561075a57600080fd5b50610775600480360381019061077091906132a6565b611e46565b005b34801561078357600080fd5b5061079e600480360381019061079991906132a6565b611e58565b6040516107ab919061324e565b60405180910390f35b3480156107c057600080fd5b506107c9611f34565b6040516107d691906133aa565b60405180910390f35b3480156107eb57600080fd5b506107f4611f3a565b60405161080191906133aa565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613793565b611f40565b005b34801561083f57600080fd5b50610848611f76565b604051610855919061324e565b60405180910390f35b34801561086a57600080fd5b50610885600480360381019061088091906132a6565b612004565b60405161089291906133aa565b60405180910390f35b3480156108a757600080fd5b506108b061208e565b6040516108bd919061324e565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e891906137ef565b612120565b6040516108fa919061310a565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906133c5565b6121b4565b005b34801561093857600080fd5b50610953600480360381019061094e91906132a6565b612237565b005b34801561096157600080fd5b5061097c600480360381019061097791906132a6565b612249565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a329061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e9061385e565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac08261225b565b610af6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3f8261111c565b90508073ffffffffffffffffffffffffffffffffffffffff16610b606122ba565b73ffffffffffffffffffffffffffffffffffffffff1614610bc357610b8c81610b876122ba565b612120565b610bc2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c886122c2565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610da9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d2492919061388f565b6020604051808303816000875af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906138cd565b610da857336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d9f9190613314565b60405180910390fd5b5b610db48383836122c7565b505050565b610dc16125e9565b600260095403610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613946565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3490613997565b60006040518083038185875af1925050503d8060008114610e71576040519150601f19603f3d011682016040523d82523d6000602084013e610e76565b606091505b5050905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906139f8565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fc1576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f3c92919061388f565b6020604051808303816000875af1158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f91906138cd565b610fc057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fb79190613314565b60405180910390fd5b5b610fcc838383612667565b505050565b610fdc816001612687565b50565b600d8054610fec9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546110189061385e565b80156110655780601f1061103a57610100808354040283529160200191611065565b820191906000526020600020905b81548152906001019060200180831161104857829003601f168201915b505050505081565b6110756125e9565b80600a90816110849190613bc4565b5050565b600a80546110959061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546110c19061385e565b801561110e5780601f106110e35761010080835404028352916020019161110e565b820191906000526020600020905b8154815290600101906020018083116110f157829003601f168201915b505050505081565b60135481565b6000611127826128d9565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611195576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111ee6125e9565b6111f860006129a5565b565b6112026125e9565b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112449061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546112709061385e565b80156112bd5780601f10611292576101008083540402835291602001916112bd565b820191906000526020600020905b8154815290600101906020018083116112a057829003601f168201915b5050505050905090565b6112cf6125e9565b601054826112db610c7e565b6112e59190613cc5565b1115611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d90613d45565b60405180910390fd5b6113308183612a69565b5050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990613db1565b60405180910390fd5b6002600954036113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460145461143f9190613dd1565b90508083106114f65780836114549190613dd1565b6011546114619190613e05565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114ae9190613cc5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611589565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115459190613cc5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff166115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613eab565b60405180910390fd5b601054836115e4610c7e565b6115ee9190613cc5565b111561162f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162690613f17565b60405180910390fd5b6013548361163c3361112e565b6116469190613cc5565b1115611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613fa9565b60405180910390fd5b6012548311156116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c39061403b565b60405180910390fd5b8134101561170f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611706906140a7565b60405180910390fd5b6117193384612a69565b81341115611774573373ffffffffffffffffffffffffffffffffffffffff166108fc83346117479190613dd1565b9081150290604051600060405180830381858888f19350505050158015611772573d6000803e3d6000fd5b505b5050600160098190555050565b6117896125e9565b8060148190555050565b80600860006117a06122ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661184d6122ba565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611892919061310a565b60405180910390a35050565b6118a66125e9565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119e1576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161195c92919061388f565b6020604051808303816000875af115801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f91906138cd565b6119e057336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119d79190613314565b60405180910390fd5b5b6119ed84848484612a87565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890613db1565b60405180910390fd5b600260095403611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611afe9190613dd1565b9050808310611bb5578083611b139190613dd1565b601154611b209190613e05565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b6d9190613cc5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c48565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c049190613cc5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90613eab565b60405180910390fd5b60105483611ca3610c7e565b611cad9190613cc5565b1115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590613f17565b60405180910390fd5b60135483611cfb3361112e565b611d059190613cc5565b1115611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90614113565b60405180910390fd5b601254831115611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d829061403b565b60405180910390fd5b81341015611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc5906140a7565b60405180910390fd5b611dd83384612a69565b81341115611e33573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611e069190613dd1565b9081150290604051600060405180830381858888f19350505050158015611e31573d6000803e3d6000fd5b505b5050600160098190555050565b60115481565b611e4e6125e9565b8060128190555050565b6060600c60009054906101000a900460ff1615611ea157600e611e7a83612afa565b604051602001611e8b9291906141f2565b6040516020818303038152906040529050611f2f565b600d8054611eae9061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611eda9061385e565b8015611f275780601f10611efc57610100808354040283529160200191611f27565b820191906000526020600020905b815481529060010190602001808311611f0a57829003601f168201915b505050505090505b919050565b60125481565b60105481565b611f486125e9565b80600e9081611f579190613bc4565b5081600c60006101000a81548160ff0219169083151502179055505050565b600e8054611f839061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611faf9061385e565b8015611ffc5780601f10611fd157610100808354040283529160200191611ffc565b820191906000526020600020905b815481529060010190602001808311611fdf57829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546120569190613dd1565b905080841061207f57808461206b9190613dd1565b6011546120789190613e05565b9150612084565b600091505b8192505050919050565b6060600a805461209d9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546120c99061385e565b80156121165780601f106120eb57610100808354040283529160200191612116565b820191906000526020600020905b8154815290600101906020018083116120f957829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121bc6125e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290614288565b60405180910390fd5b612234816129a5565b50565b61223f6125e9565b8060138190555050565b6122516125e9565b8060118190555050565b6000816122666122c2565b11158015612275575060015482105b80156122b3575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b60006122d2826128d9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612339576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061234584612c5a565b9150915061235b81876123566122ba565b612c81565b6123a7576123708661236b6122ba565b612120565b6123a6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361240d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a8686866001612cc5565b801561242557600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506124f3856124cf888887612ccb565b7c020000000000000000000000000000000000000000000000000000000017612cf3565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036125795760006001850190506000600560008381526020019081526020016000205403612577576001548114612576578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e18686866001612d1e565b505050505050565b6125f1612d24565b73ffffffffffffffffffffffffffffffffffffffff1661260f61120c565b73ffffffffffffffffffffffffffffffffffffffff1614612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c906142f4565b60405180910390fd5b565b612682838383604051806020016040528060008152506118e5565b505050565b6000612692836128d9565b905060008190506000806126a586612c5a565b91509150841561270e576126c181846126bc6122ba565b612c81565b61270d576126d6836126d16122ba565b612120565b61270c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b61271c836000886001612cc5565b801561272757600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506127cf8361278c85600088612ccb565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612cf3565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036128555760006001870190506000600560008381526020019081526020016000205403612853576001548114612852578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bf836000886001612d1e565b600260008154809291906001019190505550505050505050565b600080829050806128e86122c2565b1161296e5760015481101561296d5760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361296b575b60008103612961576005600083600190039350838152602001908152602001600020549050612937565b80925050506129a0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a83828260405180602001604052806000815250612d2c565b5050565b612a92848484610cad565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612af457612abd84848484612dca565b612af3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203612b41576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c55565b600082905060005b60008214612b73578080612b5c90614314565b915050600a82612b6c919061438b565b9150612b49565b60008167ffffffffffffffff811115612b8f57612b8e61344f565b5b6040519080825280601f01601f191660200182016040528015612bc15781602001600182028036833780820191505090505b5090505b60008514612c4e57600182612bda9190613dd1565b9150600a85612be991906143bc565b6030612bf59190613cc5565b60f81b818381518110612c0b57612c0a6143ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c47919061438b565b9450612bc5565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612ce2868684612f1a565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612d368383612f23565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612dc55760006001549050600083820390505b612d776000868380600101945086612dca565b612dad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612d64578160015414612dc257600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612df06122ba565b8786866040518563ffffffff1660e01b8152600401612e129493929190614471565b6020604051808303816000875af1925050508015612e4e57506040513d601f19601f82011682018060405250810190612e4b91906144d2565b60015b612ec7573d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b506000815103612ebf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612f64576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f716000848385612cc5565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612fe883612fd96000866000612ccb565b612fe2856130df565b17612cf3565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461308957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061304e565b50600082036130c4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060018190555050506130da6000848385612d1e565b505050565b60006001821460e11b9050919050565b60008115159050919050565b613104816130ef565b82525050565b600060208201905061311f60008301846130fb565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61316e81613139565b811461317957600080fd5b50565b60008135905061318b81613165565b92915050565b6000602082840312156131a7576131a661312f565b5b60006131b58482850161317c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f85780820151818401526020810190506131dd565b60008484015250505050565b6000601f19601f8301169050919050565b6000613220826131be565b61322a81856131c9565b935061323a8185602086016131da565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b6000819050919050565b61328381613270565b811461328e57600080fd5b50565b6000813590506132a08161327a565b92915050565b6000602082840312156132bc576132bb61312f565b5b60006132ca84828501613291565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132fe826132d3565b9050919050565b61330e816132f3565b82525050565b60006020820190506133296000830184613305565b92915050565b613338816132f3565b811461334357600080fd5b50565b6000813590506133558161332f565b92915050565b600080604083850312156133725761337161312f565b5b600061338085828601613346565b925050602061339185828601613291565b9150509250929050565b6133a481613270565b82525050565b60006020820190506133bf600083018461339b565b92915050565b6000602082840312156133db576133da61312f565b5b60006133e984828501613346565b91505092915050565b60008060006060848603121561340b5761340a61312f565b5b600061341986828701613346565b935050602061342a86828701613346565b925050604061343b86828701613291565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61348782613204565b810181811067ffffffffffffffff821117156134a6576134a561344f565b5b80604052505050565b60006134b9613125565b90506134c5828261347e565b919050565b600067ffffffffffffffff8211156134e5576134e461344f565b5b6134ee82613204565b9050602081019050919050565b82818337600083830152505050565b600061351d613518846134ca565b6134af565b9050828152602081018484840111156135395761353861344a565b5b6135448482856134fb565b509392505050565b600082601f83011261356157613560613445565b5b813561357184826020860161350a565b91505092915050565b6000602082840312156135905761358f61312f565b5b600082013567ffffffffffffffff8111156135ae576135ad613134565b5b6135ba8482850161354c565b91505092915050565b600080604083850312156135da576135d961312f565b5b60006135e885828601613291565b92505060206135f985828601613346565b9150509250929050565b61360c816130ef565b811461361757600080fd5b50565b60008135905061362981613603565b92915050565b600080604083850312156136465761364561312f565b5b600061365485828601613346565b92505060206136658582860161361a565b9150509250929050565b600067ffffffffffffffff82111561368a5761368961344f565b5b61369382613204565b9050602081019050919050565b60006136b36136ae8461366f565b6134af565b9050828152602081018484840111156136cf576136ce61344a565b5b6136da8482856134fb565b509392505050565b600082601f8301126136f7576136f6613445565b5b81356137078482602086016136a0565b91505092915050565b6000806000806080858703121561372a5761372961312f565b5b600061373887828801613346565b945050602061374987828801613346565b935050604061375a87828801613291565b925050606085013567ffffffffffffffff81111561377b5761377a613134565b5b613787878288016136e2565b91505092959194509250565b600080604083850312156137aa576137a961312f565b5b60006137b88582860161361a565b925050602083013567ffffffffffffffff8111156137d9576137d8613134565b5b6137e58582860161354c565b9150509250929050565b600080604083850312156138065761380561312f565b5b600061381485828601613346565b925050602061382585828601613346565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387657607f821691505b6020821081036138895761388861382f565b5b50919050565b60006040820190506138a46000830185613305565b6138b16020830184613305565b9392505050565b6000815190506138c781613603565b92915050565b6000602082840312156138e3576138e261312f565b5b60006138f1848285016138b8565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613930601f836131c9565b915061393b826138fa565b602082019050919050565b6000602082019050818103600083015261395f81613923565b9050919050565b600081905092915050565b50565b6000613981600083613966565b915061398c82613971565b600082019050919050565b60006139a282613974565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006139e26010836131c9565b91506139ed826139ac565b602082019050919050565b60006020820190508181036000830152613a11816139d5565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613a7a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613a3d565b613a848683613a3d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ac1613abc613ab784613270565b613a9c565b613270565b9050919050565b6000819050919050565b613adb83613aa6565b613aef613ae782613ac8565b848454613a4a565b825550505050565b600090565b613b04613af7565b613b0f818484613ad2565b505050565b5b81811015613b3357613b28600082613afc565b600181019050613b15565b5050565b601f821115613b7857613b4981613a18565b613b5284613a2d565b81016020851015613b61578190505b613b75613b6d85613a2d565b830182613b14565b50505b505050565b600082821c905092915050565b6000613b9b60001984600802613b7d565b1980831691505092915050565b6000613bb48383613b8a565b9150826002028217905092915050565b613bcd826131be565b67ffffffffffffffff811115613be657613be561344f565b5b613bf0825461385e565b613bfb828285613b37565b600060209050601f831160018114613c2e5760008415613c1c578287015190505b613c268582613ba8565b865550613c8e565b601f198416613c3c86613a18565b60005b82811015613c6457848901518255600182019150602085019450602081019050613c3f565b86831015613c815784890151613c7d601f891682613b8a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cd082613270565b9150613cdb83613270565b9250828201905080821115613cf357613cf2613c96565b5b92915050565b7f4e6f206d6f726520746f6b656e7320696e2073746f636b210000000000000000600082015250565b6000613d2f6018836131c9565b9150613d3a82613cf9565b602082019050919050565b60006020820190508181036000830152613d5e81613d22565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613d9b601e836131c9565b9150613da682613d65565b602082019050919050565b60006020820190508181036000830152613dca81613d8e565b9050919050565b6000613ddc82613270565b9150613de783613270565b9250828203905081811115613dff57613dfe613c96565b5b92915050565b6000613e1082613270565b9150613e1b83613270565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e5457613e53613c96565b5b828202905092915050565b7f4d696e74206e6f74207265616479207965742100000000000000000000000000600082015250565b6000613e956013836131c9565b9150613ea082613e5f565b602082019050919050565b60006020820190508181036000830152613ec481613e88565b9050919050565b7f4e6f206d6f726520746f6b656e73210000000000000000000000000000000000600082015250565b6000613f01600f836131c9565b9150613f0c82613ecb565b602082019050919050565b60006020820190508181036000830152613f3081613ef4565b9050919050565b7f547269656420746f20746f74616c206d696e74206f766572206f766572206c6960008201527f6d69740000000000000000000000000000000000000000000000000000000000602082015250565b6000613f936023836131c9565b9150613f9e82613f37565b604082019050919050565b60006020820190508181036000830152613fc281613f86565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c2072657472792060008201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b60006140256035836131c9565b915061403082613fc9565b604082019050919050565b6000602082019050818103600083015261405481614018565b9050919050565b7f4d7573742073656e64206d6f7265206574680000000000000000000000000000600082015250565b60006140916012836131c9565b915061409c8261405b565b602082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b7f547269656420746f20746f74616c206d696e74206f766572206c696d69740000600082015250565b60006140fd601e836131c9565b9150614108826140c7565b602082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b600081905092915050565b6000815461414b8161385e565b6141558186614133565b945060018216600081146141705760018114614185576141b8565b60ff19831686528115158202860193506141b8565b61418e85613a18565b60005b838110156141b057815481890152600182019150602081019050614191565b838801955050505b50505092915050565b60006141cc826131be565b6141d68185614133565b93506141e68185602086016131da565b80840191505092915050565b60006141fe828561413e565b915061420a82846141c1565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142726026836131c9565b915061427d82614216565b604082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142de6020836131c9565b91506142e9826142a8565b602082019050919050565b6000602082019050818103600083015261430d816142d1565b9050919050565b600061431f82613270565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435157614350613c96565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439682613270565b91506143a183613270565b9250826143b1576143b061435c565b5b828204905092915050565b60006143c782613270565b91506143d283613270565b9250826143e2576143e161435c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006144438261441c565b61444d8185614427565b935061445d8185602086016131da565b61446681613204565b840191505092915050565b60006080820190506144866000830187613305565b6144936020830186613305565b6144a0604083018561339b565b81810360608301526144b28184614438565b905095945050505050565b6000815190506144cc81613165565b92915050565b6000602082840312156144e8576144e761312f565b5b60006144f6848285016144bd565b9150509291505056fea26469706673582212205f42dc98a32ab14012c9bc9b887511bd3aedfe462fc24b990aba65d01cae3ce864736f6c63430008100033

Deployed Bytecode

0x60806040526004361061025c5760003560e01c806395d89b4111610144578063c87b56dd116100b6578063e75722301161007a578063e75722301461085e578063e8a3d4851461089b578063e985e9c5146108c6578063f2fde38b14610903578063f814943d1461092c578063fb92488b146109555761025c565b8063c87b56dd14610777578063cfdbf254146107b4578063d8258d95146107df578063da2d80da1461080a578063dbddb26a146108335761025c565b8063a4cdd71911610108578063a4cdd719146106a9578063a76a9587146106c0578063b88d4fde146106eb578063bdfaa08414610707578063c002d23d14610723578063c144a4ba1461074e5761025c565b806395d89b41146105e75780639a9e6bec14610612578063a0712d681461063b578063a1db246e14610657578063a22cb465146106805761025c565b806342842e0e116101dd5780635fe75587116101a15780635fe75587146104d75780636352211e1461050257806370a082311461053f578063715018a61461057c57806375b64471146105935780638da5cb5b146105bc5761025c565b806342842e0e1461041357806342966c681461042f578063507862d11461045857806356b48d631461048357806356b4f673146104ac5761025c565b80631422374f116102245780631422374f1461034d57806318160ddd146103785780631d985778146103a357806323b872dd146103e057806324600fc3146103fc5761025c565b80630116bc2d1461026157806301ffc9a71461028c57806306fdde03146102c9578063081812fc146102f4578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b5061027661097e565b604051610283919061310a565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613191565b610991565b6040516102c0919061310a565b60405180910390f35b3480156102d557600080fd5b506102de610a23565b6040516102eb919061324e565b60405180910390f35b34801561030057600080fd5b5061031b600480360381019061031691906132a6565b610ab5565b6040516103289190613314565b60405180910390f35b61034b6004803603810190610346919061335b565b610b34565b005b34801561035957600080fd5b50610362610c78565b60405161036f91906133aa565b60405180910390f35b34801561038457600080fd5b5061038d610c7e565b60405161039a91906133aa565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c591906133c5565b610c95565b6040516103d791906133aa565b60405180910390f35b6103fa60048036038101906103f591906133f2565b610cad565b005b34801561040857600080fd5b50610411610db9565b005b61042d600480360381019061042891906133f2565b610ec5565b005b34801561043b57600080fd5b50610456600480360381019061045191906132a6565b610fd1565b005b34801561046457600080fd5b5061046d610fdf565b60405161047a919061324e565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a5919061357a565b61106d565b005b3480156104b857600080fd5b506104c1611088565b6040516104ce919061324e565b60405180910390f35b3480156104e357600080fd5b506104ec611116565b6040516104f991906133aa565b60405180910390f35b34801561050e57600080fd5b50610529600480360381019061052491906132a6565b61111c565b6040516105369190613314565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906133c5565b61112e565b60405161057391906133aa565b60405180910390f35b34801561058857600080fd5b506105916111e6565b005b34801561059f57600080fd5b506105ba60048036038101906105b591906132a6565b6111fa565b005b3480156105c857600080fd5b506105d161120c565b6040516105de9190613314565b60405180910390f35b3480156105f357600080fd5b506105fc611235565b604051610609919061324e565b60405180910390f35b34801561061e57600080fd5b50610639600480360381019061063491906135c3565b6112c7565b005b610655600480360381019061065091906132a6565b611334565b005b34801561066357600080fd5b5061067e600480360381019061067991906132a6565b611781565b005b34801561068c57600080fd5b506106a760048036038101906106a2919061362f565b611793565b005b3480156106b557600080fd5b506106be61189e565b005b3480156106cc57600080fd5b506106d56118d2565b6040516106e2919061310a565b60405180910390f35b61070560048036038101906107009190613710565b6118e5565b005b610721600480360381019061071c91906132a6565b6119f3565b005b34801561072f57600080fd5b50610738611e40565b60405161074591906133aa565b60405180910390f35b34801561075a57600080fd5b50610775600480360381019061077091906132a6565b611e46565b005b34801561078357600080fd5b5061079e600480360381019061079991906132a6565b611e58565b6040516107ab919061324e565b60405180910390f35b3480156107c057600080fd5b506107c9611f34565b6040516107d691906133aa565b60405180910390f35b3480156107eb57600080fd5b506107f4611f3a565b60405161080191906133aa565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613793565b611f40565b005b34801561083f57600080fd5b50610848611f76565b604051610855919061324e565b60405180910390f35b34801561086a57600080fd5b50610885600480360381019061088091906132a6565b612004565b60405161089291906133aa565b60405180910390f35b3480156108a757600080fd5b506108b061208e565b6040516108bd919061324e565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e891906137ef565b612120565b6040516108fa919061310a565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906133c5565b6121b4565b005b34801561093857600080fd5b50610953600480360381019061094e91906132a6565b612237565b005b34801561096157600080fd5b5061097c600480360381019061097791906132a6565b612249565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a329061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e9061385e565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac08261225b565b610af6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3f8261111c565b90508073ffffffffffffffffffffffffffffffffffffffff16610b606122ba565b73ffffffffffffffffffffffffffffffffffffffff1614610bc357610b8c81610b876122ba565b612120565b610bc2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c886122c2565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610da9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d2492919061388f565b6020604051808303816000875af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906138cd565b610da857336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d9f9190613314565b60405180910390fd5b5b610db48383836122c7565b505050565b610dc16125e9565b600260095403610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613946565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3490613997565b60006040518083038185875af1925050503d8060008114610e71576040519150601f19603f3d011682016040523d82523d6000602084013e610e76565b606091505b5050905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906139f8565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fc1576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f3c92919061388f565b6020604051808303816000875af1158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f91906138cd565b610fc057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fb79190613314565b60405180910390fd5b5b610fcc838383612667565b505050565b610fdc816001612687565b50565b600d8054610fec9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546110189061385e565b80156110655780601f1061103a57610100808354040283529160200191611065565b820191906000526020600020905b81548152906001019060200180831161104857829003601f168201915b505050505081565b6110756125e9565b80600a90816110849190613bc4565b5050565b600a80546110959061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546110c19061385e565b801561110e5780601f106110e35761010080835404028352916020019161110e565b820191906000526020600020905b8154815290600101906020018083116110f157829003601f168201915b505050505081565b60135481565b6000611127826128d9565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611195576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111ee6125e9565b6111f860006129a5565b565b6112026125e9565b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112449061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546112709061385e565b80156112bd5780601f10611292576101008083540402835291602001916112bd565b820191906000526020600020905b8154815290600101906020018083116112a057829003601f168201915b5050505050905090565b6112cf6125e9565b601054826112db610c7e565b6112e59190613cc5565b1115611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d90613d45565b60405180910390fd5b6113308183612a69565b5050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990613db1565b60405180910390fd5b6002600954036113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460145461143f9190613dd1565b90508083106114f65780836114549190613dd1565b6011546114619190613e05565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114ae9190613cc5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611589565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115459190613cc5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff166115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613eab565b60405180910390fd5b601054836115e4610c7e565b6115ee9190613cc5565b111561162f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162690613f17565b60405180910390fd5b6013548361163c3361112e565b6116469190613cc5565b1115611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613fa9565b60405180910390fd5b6012548311156116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c39061403b565b60405180910390fd5b8134101561170f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611706906140a7565b60405180910390fd5b6117193384612a69565b81341115611774573373ffffffffffffffffffffffffffffffffffffffff166108fc83346117479190613dd1565b9081150290604051600060405180830381858888f19350505050158015611772573d6000803e3d6000fd5b505b5050600160098190555050565b6117896125e9565b8060148190555050565b80600860006117a06122ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661184d6122ba565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611892919061310a565b60405180910390a35050565b6118a66125e9565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119e1576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161195c92919061388f565b6020604051808303816000875af115801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f91906138cd565b6119e057336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119d79190613314565b60405180910390fd5b5b6119ed84848484612a87565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890613db1565b60405180910390fd5b600260095403611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611afe9190613dd1565b9050808310611bb5578083611b139190613dd1565b601154611b209190613e05565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b6d9190613cc5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c48565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c049190613cc5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90613eab565b60405180910390fd5b60105483611ca3610c7e565b611cad9190613cc5565b1115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590613f17565b60405180910390fd5b60135483611cfb3361112e565b611d059190613cc5565b1115611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90614113565b60405180910390fd5b601254831115611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d829061403b565b60405180910390fd5b81341015611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc5906140a7565b60405180910390fd5b611dd83384612a69565b81341115611e33573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611e069190613dd1565b9081150290604051600060405180830381858888f19350505050158015611e31573d6000803e3d6000fd5b505b5050600160098190555050565b60115481565b611e4e6125e9565b8060128190555050565b6060600c60009054906101000a900460ff1615611ea157600e611e7a83612afa565b604051602001611e8b9291906141f2565b6040516020818303038152906040529050611f2f565b600d8054611eae9061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611eda9061385e565b8015611f275780601f10611efc57610100808354040283529160200191611f27565b820191906000526020600020905b815481529060010190602001808311611f0a57829003601f168201915b505050505090505b919050565b60125481565b60105481565b611f486125e9565b80600e9081611f579190613bc4565b5081600c60006101000a81548160ff0219169083151502179055505050565b600e8054611f839061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611faf9061385e565b8015611ffc5780601f10611fd157610100808354040283529160200191611ffc565b820191906000526020600020905b815481529060010190602001808311611fdf57829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546120569190613dd1565b905080841061207f57808461206b9190613dd1565b6011546120789190613e05565b9150612084565b600091505b8192505050919050565b6060600a805461209d9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546120c99061385e565b80156121165780601f106120eb57610100808354040283529160200191612116565b820191906000526020600020905b8154815290600101906020018083116120f957829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121bc6125e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290614288565b60405180910390fd5b612234816129a5565b50565b61223f6125e9565b8060138190555050565b6122516125e9565b8060118190555050565b6000816122666122c2565b11158015612275575060015482105b80156122b3575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b60006122d2826128d9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612339576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061234584612c5a565b9150915061235b81876123566122ba565b612c81565b6123a7576123708661236b6122ba565b612120565b6123a6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361240d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a8686866001612cc5565b801561242557600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506124f3856124cf888887612ccb565b7c020000000000000000000000000000000000000000000000000000000017612cf3565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036125795760006001850190506000600560008381526020019081526020016000205403612577576001548114612576578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e18686866001612d1e565b505050505050565b6125f1612d24565b73ffffffffffffffffffffffffffffffffffffffff1661260f61120c565b73ffffffffffffffffffffffffffffffffffffffff1614612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c906142f4565b60405180910390fd5b565b612682838383604051806020016040528060008152506118e5565b505050565b6000612692836128d9565b905060008190506000806126a586612c5a565b91509150841561270e576126c181846126bc6122ba565b612c81565b61270d576126d6836126d16122ba565b612120565b61270c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b61271c836000886001612cc5565b801561272757600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506127cf8361278c85600088612ccb565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612cf3565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036128555760006001870190506000600560008381526020019081526020016000205403612853576001548114612852578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bf836000886001612d1e565b600260008154809291906001019190505550505050505050565b600080829050806128e86122c2565b1161296e5760015481101561296d5760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361296b575b60008103612961576005600083600190039350838152602001908152602001600020549050612937565b80925050506129a0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a83828260405180602001604052806000815250612d2c565b5050565b612a92848484610cad565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612af457612abd84848484612dca565b612af3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203612b41576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c55565b600082905060005b60008214612b73578080612b5c90614314565b915050600a82612b6c919061438b565b9150612b49565b60008167ffffffffffffffff811115612b8f57612b8e61344f565b5b6040519080825280601f01601f191660200182016040528015612bc15781602001600182028036833780820191505090505b5090505b60008514612c4e57600182612bda9190613dd1565b9150600a85612be991906143bc565b6030612bf59190613cc5565b60f81b818381518110612c0b57612c0a6143ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c47919061438b565b9450612bc5565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612ce2868684612f1a565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612d368383612f23565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612dc55760006001549050600083820390505b612d776000868380600101945086612dca565b612dad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612d64578160015414612dc257600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612df06122ba565b8786866040518563ffffffff1660e01b8152600401612e129493929190614471565b6020604051808303816000875af1925050508015612e4e57506040513d601f19601f82011682018060405250810190612e4b91906144d2565b60015b612ec7573d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b506000815103612ebf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612f64576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f716000848385612cc5565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612fe883612fd96000866000612ccb565b612fe2856130df565b17612cf3565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461308957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061304e565b50600082036130c4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060018190555050506130da6000848385612d1e565b505050565b60006001821460e11b9050919050565b60008115159050919050565b613104816130ef565b82525050565b600060208201905061311f60008301846130fb565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61316e81613139565b811461317957600080fd5b50565b60008135905061318b81613165565b92915050565b6000602082840312156131a7576131a661312f565b5b60006131b58482850161317c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f85780820151818401526020810190506131dd565b60008484015250505050565b6000601f19601f8301169050919050565b6000613220826131be565b61322a81856131c9565b935061323a8185602086016131da565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b6000819050919050565b61328381613270565b811461328e57600080fd5b50565b6000813590506132a08161327a565b92915050565b6000602082840312156132bc576132bb61312f565b5b60006132ca84828501613291565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132fe826132d3565b9050919050565b61330e816132f3565b82525050565b60006020820190506133296000830184613305565b92915050565b613338816132f3565b811461334357600080fd5b50565b6000813590506133558161332f565b92915050565b600080604083850312156133725761337161312f565b5b600061338085828601613346565b925050602061339185828601613291565b9150509250929050565b6133a481613270565b82525050565b60006020820190506133bf600083018461339b565b92915050565b6000602082840312156133db576133da61312f565b5b60006133e984828501613346565b91505092915050565b60008060006060848603121561340b5761340a61312f565b5b600061341986828701613346565b935050602061342a86828701613346565b925050604061343b86828701613291565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61348782613204565b810181811067ffffffffffffffff821117156134a6576134a561344f565b5b80604052505050565b60006134b9613125565b90506134c5828261347e565b919050565b600067ffffffffffffffff8211156134e5576134e461344f565b5b6134ee82613204565b9050602081019050919050565b82818337600083830152505050565b600061351d613518846134ca565b6134af565b9050828152602081018484840111156135395761353861344a565b5b6135448482856134fb565b509392505050565b600082601f83011261356157613560613445565b5b813561357184826020860161350a565b91505092915050565b6000602082840312156135905761358f61312f565b5b600082013567ffffffffffffffff8111156135ae576135ad613134565b5b6135ba8482850161354c565b91505092915050565b600080604083850312156135da576135d961312f565b5b60006135e885828601613291565b92505060206135f985828601613346565b9150509250929050565b61360c816130ef565b811461361757600080fd5b50565b60008135905061362981613603565b92915050565b600080604083850312156136465761364561312f565b5b600061365485828601613346565b92505060206136658582860161361a565b9150509250929050565b600067ffffffffffffffff82111561368a5761368961344f565b5b61369382613204565b9050602081019050919050565b60006136b36136ae8461366f565b6134af565b9050828152602081018484840111156136cf576136ce61344a565b5b6136da8482856134fb565b509392505050565b600082601f8301126136f7576136f6613445565b5b81356137078482602086016136a0565b91505092915050565b6000806000806080858703121561372a5761372961312f565b5b600061373887828801613346565b945050602061374987828801613346565b935050604061375a87828801613291565b925050606085013567ffffffffffffffff81111561377b5761377a613134565b5b613787878288016136e2565b91505092959194509250565b600080604083850312156137aa576137a961312f565b5b60006137b88582860161361a565b925050602083013567ffffffffffffffff8111156137d9576137d8613134565b5b6137e58582860161354c565b9150509250929050565b600080604083850312156138065761380561312f565b5b600061381485828601613346565b925050602061382585828601613346565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387657607f821691505b6020821081036138895761388861382f565b5b50919050565b60006040820190506138a46000830185613305565b6138b16020830184613305565b9392505050565b6000815190506138c781613603565b92915050565b6000602082840312156138e3576138e261312f565b5b60006138f1848285016138b8565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613930601f836131c9565b915061393b826138fa565b602082019050919050565b6000602082019050818103600083015261395f81613923565b9050919050565b600081905092915050565b50565b6000613981600083613966565b915061398c82613971565b600082019050919050565b60006139a282613974565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006139e26010836131c9565b91506139ed826139ac565b602082019050919050565b60006020820190508181036000830152613a11816139d5565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613a7a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613a3d565b613a848683613a3d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ac1613abc613ab784613270565b613a9c565b613270565b9050919050565b6000819050919050565b613adb83613aa6565b613aef613ae782613ac8565b848454613a4a565b825550505050565b600090565b613b04613af7565b613b0f818484613ad2565b505050565b5b81811015613b3357613b28600082613afc565b600181019050613b15565b5050565b601f821115613b7857613b4981613a18565b613b5284613a2d565b81016020851015613b61578190505b613b75613b6d85613a2d565b830182613b14565b50505b505050565b600082821c905092915050565b6000613b9b60001984600802613b7d565b1980831691505092915050565b6000613bb48383613b8a565b9150826002028217905092915050565b613bcd826131be565b67ffffffffffffffff811115613be657613be561344f565b5b613bf0825461385e565b613bfb828285613b37565b600060209050601f831160018114613c2e5760008415613c1c578287015190505b613c268582613ba8565b865550613c8e565b601f198416613c3c86613a18565b60005b82811015613c6457848901518255600182019150602085019450602081019050613c3f565b86831015613c815784890151613c7d601f891682613b8a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cd082613270565b9150613cdb83613270565b9250828201905080821115613cf357613cf2613c96565b5b92915050565b7f4e6f206d6f726520746f6b656e7320696e2073746f636b210000000000000000600082015250565b6000613d2f6018836131c9565b9150613d3a82613cf9565b602082019050919050565b60006020820190508181036000830152613d5e81613d22565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613d9b601e836131c9565b9150613da682613d65565b602082019050919050565b60006020820190508181036000830152613dca81613d8e565b9050919050565b6000613ddc82613270565b9150613de783613270565b9250828203905081811115613dff57613dfe613c96565b5b92915050565b6000613e1082613270565b9150613e1b83613270565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e5457613e53613c96565b5b828202905092915050565b7f4d696e74206e6f74207265616479207965742100000000000000000000000000600082015250565b6000613e956013836131c9565b9150613ea082613e5f565b602082019050919050565b60006020820190508181036000830152613ec481613e88565b9050919050565b7f4e6f206d6f726520746f6b656e73210000000000000000000000000000000000600082015250565b6000613f01600f836131c9565b9150613f0c82613ecb565b602082019050919050565b60006020820190508181036000830152613f3081613ef4565b9050919050565b7f547269656420746f20746f74616c206d696e74206f766572206f766572206c6960008201527f6d69740000000000000000000000000000000000000000000000000000000000602082015250565b6000613f936023836131c9565b9150613f9e82613f37565b604082019050919050565b60006020820190508181036000830152613fc281613f86565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c2072657472792060008201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b60006140256035836131c9565b915061403082613fc9565b604082019050919050565b6000602082019050818103600083015261405481614018565b9050919050565b7f4d7573742073656e64206d6f7265206574680000000000000000000000000000600082015250565b60006140916012836131c9565b915061409c8261405b565b602082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b7f547269656420746f20746f74616c206d696e74206f766572206c696d69740000600082015250565b60006140fd601e836131c9565b9150614108826140c7565b602082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b600081905092915050565b6000815461414b8161385e565b6141558186614133565b945060018216600081146141705760018114614185576141b8565b60ff19831686528115158202860193506141b8565b61418e85613a18565b60005b838110156141b057815481890152600182019150602081019050614191565b838801955050505b50505092915050565b60006141cc826131be565b6141d68185614133565b93506141e68185602086016131da565b80840191505092915050565b60006141fe828561413e565b915061420a82846141c1565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142726026836131c9565b915061427d82614216565b604082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142de6020836131c9565b91506142e9826142a8565b602082019050919050565b6000602082019050818103600083015261430d816142d1565b9050919050565b600061431f82613270565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435157614350613c96565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439682613270565b91506143a183613270565b9250826143b1576143b061435c565b5b828204905092915050565b60006143c782613270565b91506143d283613270565b9250826143e2576143e161435c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006144438261441c565b61444d8185614427565b935061445d8185602086016131da565b61446681613204565b840191505092915050565b60006080820190506144866000830187613305565b6144936020830186613305565b6144a0604083018561339b565b81810360608301526144b28184614438565b905095945050505050565b6000815190506144cc81613165565b92915050565b6000602082840312156144e8576144e761312f565b5b60006144f6848285016144bd565b9150509291505056fea26469706673582212205f42dc98a32ab14012c9bc9b887511bd3aedfe462fc24b990aba65d01cae3ce864736f6c63430008100033

Deployed Bytecode Sourcemap

34977:5762:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35252:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15474:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15726:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19302:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18886:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35442:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13837:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35115:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39741:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38596:191;;;;;;;;;;;;;:::i;:::-;;39934:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34850:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35186:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39060:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35081:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35405:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16374:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14302:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1832:103;;;;;;;;;;;;;:::i;:::-;;39180:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1597:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15834:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36649:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37383:1089;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39402:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19528:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38478:110;;;;;;;;;;;;;:::i;:::-;;35163:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40135:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35553:1088;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35331:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39635:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40393:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35371:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35294:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38795:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35222:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37051:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38955:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19770:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1945:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39520:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39294:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35252:39;;;;;;;;;;;;;:::o;15474:244::-;15559:4;15613:10;15598:25;;:11;:25;;;;:68;;;;15656:10;15641:25;;:11;:25;;;;15598:68;:111;;;;15699:10;15684:25;;:11;:25;;;;15598:111;15578:131;;15474:244;;;:::o;15726:100::-;15780:13;15813:5;15806:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15726:100;:::o;19302:218::-;19378:7;19403:16;19411:7;19403;:16::i;:::-;19398:64;;19428:34;;;;;;;;;;;;;;19398:64;19482:15;:24;19498:7;19482:24;;;;;;;;;;;:30;;;;;;;;;;;;19475:37;;19302:218;;;:::o;18886:408::-;18975:13;18991:16;18999:7;18991;:16::i;:::-;18975:32;;19047:5;19024:28;;:19;:17;:19::i;:::-;:28;;;19020:175;;19072:44;19089:5;19096:19;:17;:19::i;:::-;19072:16;:44::i;:::-;19067:128;;19144:35;;;;;;;;;;;;;;19067:128;19020:175;19240:2;19207:15;:24;19223:7;19207:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;19278:7;19274:2;19258:28;;19267:5;19258:28;;;;;;;;;;;;18964:330;18886:408;;:::o;35442:38::-;;;;:::o;13837:180::-;13898:7;13983:15;:13;:15::i;:::-;13968:12;;13952:13;;:28;:46;13945:53;;13837:180;:::o;35115:45::-;;;;;;;;;;;;;;;;;:::o;39741:185::-;32086:1;31297:42;32040:43;;;:47;32036:225;;;31297:42;32109:40;;;32158:4;32165:10;32109:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32104:146;;32223:10;32204:30;;;;;;;;;;;:::i;:::-;;;;;;;;32104:146;32036:225;39881:37:::1;39900:4;39906:2;39910:7;39881:18;:37::i;:::-;39741:185:::0;;;:::o;38596:191::-;1556:13;:11;:13::i;:::-;2506:1:::1;2664:7;;:19:::0;2656:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2506:1;2732:7;:18;;;;38665:12:::2;38683:10;:15;;38706:21;38683:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38664:68;;;38751:7;38743:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38653:134;2462:1:::1;2777:7;:22;;;;38596:191::o:0;39934:193::-;32086:1;31297:42;32040:43;;;:47;32036:225;;;31297:42;32109:40;;;32158:4;32165:10;32109:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32104:146;;32223:10;32204:30;;;;;;;;;;;:::i;:::-;;;;;;;;32104:146;32036:225;40078:41:::1;40101:4;40107:2;40111:7;40078:22;:41::i;:::-;39934:193:::0;;;:::o;34850:94::-;34916:20;34922:7;34931:4;34916:5;:20::i;:::-;34850:94;:::o;35186:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39060:112::-;1556:13;:11;:13::i;:::-;39152:12:::1;39137;:27;;;;;;:::i;:::-;;39060:112:::0;:::o;35081:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35405:34::-;;;;:::o;16374:152::-;16446:7;16489:27;16508:7;16489:18;:27::i;:::-;16466:52;;16374:152;;;:::o;14302:233::-;14374:7;14415:1;14398:19;;:5;:19;;;14394:60;;14426:28;;;;;;;;;;;;;;14394:60;12110:13;14472:18;:25;14491:5;14472:25;;;;;;;;;;;;;;;;:55;14465:62;;14302:233;;;:::o;1832:103::-;1556:13;:11;:13::i;:::-;1897:30:::1;1924:1;1897:18;:30::i;:::-;1832:103::o:0;39180:106::-;1556:13;:11;:13::i;:::-;39274:4:::1;39256:15;:22;;;;39180:106:::0;:::o;1597:87::-;1643:7;1670:6;;;;;;;;;;;1663:13;;1597:87;:::o;15834:104::-;15890:13;15923:7;15916:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15834:104;:::o;36649:265::-;1556:13;:11;:13::i;:::-;36789:15:::1;;36777:8;36761:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;36739:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;36877:29;36887:8;36897;36877:9;:29::i;:::-;36649:265:::0;;:::o;37383:1089::-;36978:10;36965:23;;:9;:23;;;36957:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2506:1:::1;2664:7;;:19:::0;2656:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2506:1;2732:7;:18;;;;37508:10:::2;37529:9:::0;37566:13:::2;:25;37580:10;37566:25;;;;;;;;;;;;;;;;37541:22;;:50;;;;:::i;:::-;37529:62;;37618:4;37606:8;:16;37602:285;;37674:4;37663:8;:15;;;;:::i;:::-;37648:10;;37647:32;;;;:::i;:::-;37639:40;;37750:4;37722:13;:25;37736:10;37722:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;37694:13;:25;37708:10;37694:25;;;;;;;;;;;;;;;:60;;;;37602:285;;;37795:1;37787:9;;37867:8;37839:13;:25;37853:10;37839:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;37811:13;:25;37825:10;37811:25;;;;;;;;;;;;;;;:64;;;;37602:285;37907:19;;;;;;;;;;;37899:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37997:15;;37985:8;37969:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;37961:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38089:17;;38077:8;38053:21;38063:10;38053:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;38045:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;38179:14;;38167:8;:26;;38159:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;38283:5;38270:9;:18;;38262:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;38324:31;38334:10;38346:8;38324:9;:31::i;:::-;38384:5;38372:9;:17;38368:97;;;38414:10;38406:28;;:47;38447:5;38435:9;:17;;;;:::i;:::-;38406:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;38368:97;37497:975;;2462:1:::1;2777:7;:22;;;;37383:1089:::0;:::o;39402:110::-;1556:13;:11;:13::i;:::-;39500:4:::1;39475:22;:29;;;;39402:110:::0;:::o;19528:234::-;19675:8;19623:18;:39;19642:19;:17;:19::i;:::-;19623:39;;;;;;;;;;;;;;;:49;19663:8;19623:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;19735:8;19699:55;;19714:19;:17;:19::i;:::-;19699:55;;;19745:8;19699:55;;;;;;:::i;:::-;;;;;;;;19528:234;;:::o;38478:110::-;1556:13;:11;:13::i;:::-;38561:19:::1;;;;;;;;;;;38560:20;38538:19;;:42;;;;;;;;;;;;;;;;;;38478:110::o:0;35163:20::-;;;;;;;;;;;;;:::o;40135:250::-;32086:1;31297:42;32040:43;;;:47;32036:225;;;31297:42;32109:40;;;32158:4;32165:10;32109:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32104:146;;32223:10;32204:30;;;;;;;;;;;:::i;:::-;;;;;;;;32104:146;32036:225;40330:47:::1;40353:4;40359:2;40363:7;40372:4;40330:22;:47::i;:::-;40135:250:::0;;;;:::o;35553:1088::-;36978:10;36965:23;;:9;:23;;;36957:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2506:1:::1;2664:7;;:19:::0;2656:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2506:1;2732:7;:18;;;;35682:10:::2;35703:9:::0;35740:13:::2;:25;35754:10;35740:25;;;;;;;;;;;;;;;;35715:22;;:50;;;;:::i;:::-;35703:62;;35792:4;35780:8;:16;35776:285;;35848:4;35837:8;:15;;;;:::i;:::-;35822:10;;35821:32;;;;:::i;:::-;35813:40;;35924:4;35896:13;:25;35910:10;35896:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;35868:13;:25;35882:10;35868:25;;;;;;;;;;;;;;;:60;;;;35776:285;;;35969:1;35961:9;;36041:8;36013:13;:25;36027:10;36013:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;35985:13;:25;35999:10;35985:25;;;;;;;;;;;;;;;:64;;;;35776:285;36081:19;;;;;;;;;;;36073:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36171:15;;36159:8;36143:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;36135:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36263:17;;36251:8;36227:21;36237:10;36227:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;36219:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;36348:14;;36336:8;:26;;36328:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;36452:5;36439:9;:18;;36431:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;36493:31;36503:10;36515:8;36493:9;:31::i;:::-;36553:5;36541:9;:17;36537:97;;;36583:10;36575:28;;:47;36616:5;36604:9;:17;;;;:::i;:::-;36575:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;36537:97;35671:970;;2462:1:::1;2777:7;:22;;;;35553:1088:::0;:::o;35331:37::-;;;;:::o;39635:98::-;1556:13;:11;:13::i;:::-;39721:4:::1;39704:14;:21;;;;39635:98:::0;:::o;40393:341::-;40515:13;40550:8;;;;;;;;;;;40546:181;;;40623:8;40633:26;40650:8;40633:16;:26::i;:::-;40606:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40575:86;;;;40546:181;40701:14;40694:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40393:341;;;;:::o;35371:31::-;;;;:::o;35294:34::-;;;;:::o;38795:152::-;1556:13;:11;:13::i;:::-;38900:8:::1;38889;:19;;;;;;:::i;:::-;;38930:9;38919:8;;:20;;;;;;;;;;;;;;;;;;38795:152:::0;;:::o;35222:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37051:324::-;37104:4;37120:10;37141:9;37178:13;:25;37192:10;37178:25;;;;;;;;;;;;;;;;37153:22;;:50;;;;:::i;:::-;37141:62;;37230:4;37218:8;:16;37214:131;;37286:4;37275:8;:15;;;;:::i;:::-;37260:10;;37259:32;;;;:::i;:::-;37251:40;;37214:131;;;37332:1;37324:9;;37214:131;37362:5;37355:12;;;;37051:324;;;:::o;38955:97::-;38999:13;39032:12;39025:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38955:97;:::o;19770:164::-;19867:4;19891:18;:25;19910:5;19891:25;;;;;;;;;;;;;;;:35;19917:8;19891:35;;;;;;;;;;;;;;;;;;;;;;;;;19884:42;;19770:164;;;;:::o;1945:201::-;1556:13;:11;:13::i;:::-;2054:1:::1;2034:22;;:8;:22;;::::0;2026:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2110:28;2129:8;2110:18;:28::i;:::-;1945:201:::0;:::o;39520:107::-;1556:13;:11;:13::i;:::-;39615:4:::1;39595:17;:24;;;;39520:107:::0;:::o;39294:100::-;1556:13;:11;:13::i;:::-;39377:9:::1;39364:10;:22;;;;39294:100:::0;:::o;19942:282::-;20007:4;20063:7;20044:15;:13;:15::i;:::-;:26;;:66;;;;;20097:13;;20087:7;:23;20044:66;:153;;;;;20196:1;12484:8;20148:17;:26;20166:7;20148:26;;;;;;;;;;;;:44;:49;20044:153;20024:173;;19942:282;;;:::o;30322:105::-;30382:7;30409:10;30402:17;;30322:105;:::o;13626:92::-;13682:7;13626:92;:::o;21037:1651::-;21179:27;21209;21228:7;21209:18;:27::i;:::-;21179:57;;21294:4;21253:45;;21269:19;21253:45;;;21249:86;;21307:28;;;;;;;;;;;;;;21249:86;21349:27;21378:23;21405:35;21432:7;21405:26;:35::i;:::-;21348:92;;;;21458:68;21483:15;21500:4;21506:19;:17;:19::i;:::-;21458:24;:68::i;:::-;21453:180;;21546:43;21563:4;21569:19;:17;:19::i;:::-;21546:16;:43::i;:::-;21541:92;;21598:35;;;;;;;;;;;;;;21541:92;21453:180;21664:1;21650:16;;:2;:16;;;21646:52;;21675:23;;;;;;;;;;;;;;21646:52;21711:43;21733:4;21739:2;21743:7;21752:1;21711:21;:43::i;:::-;21794:15;21791:85;;;21859:1;21838:19;21831:30;21791:85;21928:18;:24;21947:4;21928:24;;;;;;;;;;;;;;;;21926:26;;;;;;;;;;;;21970:18;:22;21989:2;21970:22;;;;;;;;;;;;;;;;21968:24;;;;;;;;;;;22039:146;22076:2;22125:45;22140:4;22146:2;22150:19;22125:14;:45::i;:::-;12618:8;22097:73;22039:18;:146::i;:::-;22010:17;:26;22028:7;22010:26;;;;;;;;;;;:175;;;;22257:1;12618:8;22206:19;:47;:52;22202:370;;22279:19;22311:1;22301:7;:11;22279:33;;22371:1;22337:17;:30;22355:11;22337:30;;;;;;;;;;;;:35;22333:224;;22418:13;;22403:11;:28;22399:139;;22495:19;22462:17;:30;22480:11;22462:30;;;;;;;;;;;:52;;;;22399:139;22333:224;22260:312;22202:370;22619:7;22615:2;22600:27;;22609:4;22600:27;;;;;;;;;;;;22638:42;22659:4;22665:2;22669:7;22678:1;22638:20;:42::i;:::-;21168:1520;;;21037:1651;;;:::o;1692:132::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1692:132::o;22696:193::-;22842:39;22859:4;22865:2;22869:7;22842:39;;;;;;;;;;;;:16;:39::i;:::-;22696:193;;;:::o;27692:1679::-;27772:27;27802;27821:7;27802:18;:27::i;:::-;27772:57;;27842:12;27873:19;27842:52;;27908:27;27937:23;27964:35;27991:7;27964:26;:35::i;:::-;27907:92;;;;28016:13;28012:244;;;28065:68;28090:15;28107:4;28113:19;:17;:19::i;:::-;28065:24;:68::i;:::-;28060:184;;28157:43;28174:4;28180:19;:17;:19::i;:::-;28157:16;:43::i;:::-;28152:92;;28209:35;;;;;;;;;;;;;;28152:92;28060:184;28012:244;28268:51;28290:4;28304:1;28308:7;28317:1;28268:21;:51::i;:::-;28359:15;28356:101;;;28440:1;28419:19;28412:30;28356:101;28566:1;12241:3;28536:1;:26;;28535:32;28507:18;:24;28526:4;28507:24;;;;;;;;;;;;;;;;:60;;;;;;;;;;;28613:176;28650:4;28721:53;28736:4;28750:1;28754:19;28721:14;:53::i;:::-;12618:8;12484;28674:43;28673:101;28613:18;:176::i;:::-;28584:17;:26;28602:7;28584:26;;;;;;;;;;;:205;;;;28861:1;12618:8;28810:19;:47;:52;28806:370;;28883:19;28915:1;28905:7;:11;28883:33;;28975:1;28941:17;:30;28959:11;28941:30;;;;;;;;;;;;:35;28937:224;;29022:13;;29007:11;:28;29003:139;;29099:19;29066:17;:30;29084:11;29066:30;;;;;;;;;;;:52;;;;29003:139;28937:224;28864:312;28806:370;29231:7;29227:1;29204:35;;29213:4;29204:35;;;;;;;;;;;;29250:50;29271:4;29285:1;29289:7;29298:1;29250:20;:50::i;:::-;29338:12;;:14;;;;;;;;;;;;;27761:1610;;;;27692:1679;;:::o;17081:633::-;17148:7;17168:12;17183:7;17168:22;;17251:4;17232:15;:13;:15::i;:::-;:23;17228:419;;17285:13;;17278:4;:20;17274:373;;;17323:14;17340:17;:23;17358:4;17340:23;;;;;;;;;;;;17323:40;;17420:1;12484:8;17392:6;:24;:29;17388:240;;17452:113;17469:1;17459:6;:11;17452:113;;17512:17;:25;17530:6;;;;;;;17512:25;;;;;;;;;;;;17503:34;;17452:113;;;17598:6;17591:13;;;;;;17388:240;17300:347;17274:373;17228:419;17675:31;;;;;;;;;;;;;;17081:633;;;;:::o;2154:191::-;2228:16;2247:6;;;;;;;;;;;2228:25;;2273:8;2264:6;;:17;;;;;;;;;;;;;;;;;;2328:8;2297:40;;2318:8;2297:40;;;;;;;;;;;;2217:128;2154:191;:::o;27475:112::-;27552:27;27562:2;27566:8;27552:27;;;;;;;;;;;;:9;:27::i;:::-;27475:112;;:::o;22897:407::-;23072:31;23085:4;23091:2;23095:7;23072:12;:31::i;:::-;23136:1;23118:2;:14;;;:19;23114:183;;23157:56;23188:4;23194:2;23198:7;23207:5;23157:30;:56::i;:::-;23152:145;;23241:40;;;;;;;;;;;;;;23152:145;23114:183;22897:407;;;;:::o;2981:534::-;3037:13;3078:1;3069:5;:10;3065:53;;3096:10;;;;;;;;;;;;;;;;;;;;;3065:53;3128:12;3143:5;3128:20;;3159:14;3184:78;3199:1;3191:4;:9;3184:78;;3217:8;;;;;:::i;:::-;;;;3248:2;3240:10;;;;;:::i;:::-;;;3184:78;;;3272:19;3304:6;3294:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3272:39;;3322:154;3338:1;3329:5;:10;3322:154;;3366:1;3356:11;;;;;:::i;:::-;;;3433:2;3425:5;:10;;;;:::i;:::-;3412:2;:24;;;;:::i;:::-;3399:39;;3382:6;3389;3382:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3462:2;3453:11;;;;;:::i;:::-;;;3322:154;;;3500:6;3486:21;;;;;2981:534;;;;:::o;20637:392::-;20739:27;20768:23;20809:38;20850:15;:24;20866:7;20850:24;;;;;;;;;;;20809:65;;20934:18;20911:41;;20991:19;20985:26;20966:45;;20896:126;20637:392;;;:::o;20232:397::-;20381:11;20451:16;20444:5;20440:28;20431:37;;20512:16;20501:9;20497:32;20484:45;;20594:15;20583:9;20580:30;20572:5;20561:9;20558:20;20555:56;20545:66;;20232:397;;;;;:::o;23312:159::-;;;;;:::o;30003:311::-;30138:7;30158:16;12681:3;30184:19;:41;;30158:68;;12681:3;30252:31;30263:4;30269:2;30273:9;30252:10;:31::i;:::-;30244:40;;:62;;30237:69;;;30003:311;;;;;:::o;18096:450::-;18176:14;18344:16;18337:5;18333:28;18324:37;;18521:5;18507:11;18482:23;18478:41;18475:52;18468:5;18465:63;18455:73;;18096:450;;;;:::o;23479:158::-;;;;;:::o;1045:98::-;1098:7;1125:10;1118:17;;1045:98;:::o;26778:689::-;26909:19;26915:2;26919:8;26909:5;:19::i;:::-;26988:1;26970:2;:14;;;:19;26966:483;;27010:11;27024:13;;27010:27;;27056:13;27078:8;27072:3;:14;27056:30;;27105:233;27136:62;27175:1;27179:2;27183:7;;;;;;27192:5;27136:30;:62::i;:::-;27131:167;;27234:40;;;;;;;;;;;;;;27131:167;27333:3;27325:5;:11;27105:233;;27420:3;27403:13;;:20;27399:34;;27425:8;;;27399:34;26991:458;;26966:483;26778:689;;;:::o;23645:716::-;23808:4;23854:2;23829:45;;;23875:19;:17;:19::i;:::-;23896:4;23902:7;23911:5;23829:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23825:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24129:1;24112:6;:13;:18;24108:235;;24158:40;;;;;;;;;;;;;;24108:235;24301:6;24295:13;24286:6;24282:2;24278:15;24271:38;23825:529;23998:54;;;23988:64;;;:6;:64;;;;23981:71;;;23645:716;;;;;;:::o;29848:147::-;29985:6;29848:147;;;;;:::o;24369:1442::-;24442:20;24465:13;;24442:36;;24505:1;24493:8;:13;24489:44;;24515:18;;;;;;;;;;;;;;24489:44;24546:61;24576:1;24580:2;24584:12;24598:8;24546:21;:61::i;:::-;24716:1;12181:2;24686:1;:26;;24685:32;24673:8;:45;24647:18;:22;24666:2;24647:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;24769:139;24806:2;24860:33;24883:1;24887:2;24891:1;24860:14;:33::i;:::-;24827:30;24848:8;24827:20;:30::i;:::-;:66;24769:18;:139::i;:::-;24735:17;:31;24753:12;24735:31;;;;;;;;;;;:173;;;;24925:16;24956:11;24985:8;24970:12;:23;24956:37;;25060:16;25056:2;25052:25;25040:37;;25280:12;25248:8;25223:1;25174:25;25149:1;25124;25097:215;25392:1;25378:12;25374:20;25332:279;25433:3;25424:7;25421:16;25332:279;;25584:7;25574:8;25571:1;25544:25;25541:1;25538;25533:59;25486:1;25477:7;25473:15;25462:26;;25332:279;;;25336:77;25656:1;25644:8;:13;25640:45;;25666:19;;;;;;;;;;;;;;25640:45;25718:3;25702:13;:19;;;;24620:1113;;25743:60;25772:1;25776:2;25780:12;25794:8;25743:20;:60::i;:::-;24431:1380;24369:1442;;:::o;18554:324::-;18624:14;18857:1;18847:8;18844:15;18818:24;18814:46;18804:56;;18554:324;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:75::-;467:6;500:2;494:9;484:19;;434:75;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:149;797:7;837:66;830:5;826:78;815:89;;761:149;;;:::o;916:120::-;988:23;1005:5;988:23;:::i;:::-;981:5;978:34;968:62;;1026:1;1023;1016:12;968:62;916:120;:::o;1042:137::-;1087:5;1125:6;1112:20;1103:29;;1141:32;1167:5;1141:32;:::i;:::-;1042:137;;;;:::o;1185:327::-;1243:6;1292:2;1280:9;1271:7;1267:23;1263:32;1260:119;;;1298:79;;:::i;:::-;1260:119;1418:1;1443:52;1487:7;1478:6;1467:9;1463:22;1443:52;:::i;:::-;1433:62;;1389:116;1185:327;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:329::-;5301:6;5350:2;5338:9;5329:7;5325:23;5321:32;5318:119;;;5356:79;;:::i;:::-;5318:119;5476:1;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5447:117;5242:329;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:117::-;6311:1;6308;6301:12;6325:117;6434:1;6431;6424:12;6448:180;6496:77;6493:1;6486:88;6593:4;6590:1;6583:15;6617:4;6614:1;6607:15;6634:281;6717:27;6739:4;6717:27;:::i;:::-;6709:6;6705:40;6847:6;6835:10;6832:22;6811:18;6799:10;6796:34;6793:62;6790:88;;;6858:18;;:::i;:::-;6790:88;6898:10;6894:2;6887:22;6677:238;6634:281;;:::o;6921:129::-;6955:6;6982:20;;:::i;:::-;6972:30;;7011:33;7039:4;7031:6;7011:33;:::i;:::-;6921:129;;;:::o;7056:308::-;7118:4;7208:18;7200:6;7197:30;7194:56;;;7230:18;;:::i;:::-;7194:56;7268:29;7290:6;7268:29;:::i;:::-;7260:37;;7352:4;7346;7342:15;7334:23;;7056:308;;;:::o;7370:146::-;7467:6;7462:3;7457;7444:30;7508:1;7499:6;7494:3;7490:16;7483:27;7370:146;;;:::o;7522:425::-;7600:5;7625:66;7641:49;7683:6;7641:49;:::i;:::-;7625:66;:::i;:::-;7616:75;;7714:6;7707:5;7700:21;7752:4;7745:5;7741:16;7790:3;7781:6;7776:3;7772:16;7769:25;7766:112;;;7797:79;;:::i;:::-;7766:112;7887:54;7934:6;7929:3;7924;7887:54;:::i;:::-;7606:341;7522:425;;;;;:::o;7967:340::-;8023:5;8072:3;8065:4;8057:6;8053:17;8049:27;8039:122;;8080:79;;:::i;:::-;8039:122;8197:6;8184:20;8222:79;8297:3;8289:6;8282:4;8274:6;8270:17;8222:79;:::i;:::-;8213:88;;8029:278;7967:340;;;;:::o;8313:509::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:63;8797:7;8788:6;8777:9;8773:22;8742:63;:::i;:::-;8732:73;;8528:287;8313:509;;;;:::o;8828:474::-;8896:6;8904;8953:2;8941:9;8932:7;8928:23;8924:32;8921:119;;;8959:79;;:::i;:::-;8921:119;9079:1;9104:53;9149:7;9140:6;9129:9;9125:22;9104:53;:::i;:::-;9094:63;;9050:117;9206:2;9232:53;9277:7;9268:6;9257:9;9253:22;9232:53;:::i;:::-;9222:63;;9177:118;8828:474;;;;;:::o;9308:116::-;9378:21;9393:5;9378:21;:::i;:::-;9371:5;9368:32;9358:60;;9414:1;9411;9404:12;9358:60;9308:116;:::o;9430:133::-;9473:5;9511:6;9498:20;9489:29;;9527:30;9551:5;9527:30;:::i;:::-;9430:133;;;;:::o;9569:468::-;9634:6;9642;9691:2;9679:9;9670:7;9666:23;9662:32;9659:119;;;9697:79;;:::i;:::-;9659:119;9817:1;9842:53;9887:7;9878:6;9867:9;9863:22;9842:53;:::i;:::-;9832:63;;9788:117;9944:2;9970:50;10012:7;10003:6;9992:9;9988:22;9970:50;:::i;:::-;9960:60;;9915:115;9569:468;;;;;:::o;10043:307::-;10104:4;10194:18;10186:6;10183:30;10180:56;;;10216:18;;:::i;:::-;10180:56;10254:29;10276:6;10254:29;:::i;:::-;10246:37;;10338:4;10332;10328:15;10320:23;;10043:307;;;:::o;10356:423::-;10433:5;10458:65;10474:48;10515:6;10474:48;:::i;:::-;10458:65;:::i;:::-;10449:74;;10546:6;10539:5;10532:21;10584:4;10577:5;10573:16;10622:3;10613:6;10608:3;10604:16;10601:25;10598:112;;;10629:79;;:::i;:::-;10598:112;10719:54;10766:6;10761:3;10756;10719:54;:::i;:::-;10439:340;10356:423;;;;;:::o;10798:338::-;10853:5;10902:3;10895:4;10887:6;10883:17;10879:27;10869:122;;10910:79;;:::i;:::-;10869:122;11027:6;11014:20;11052:78;11126:3;11118:6;11111:4;11103:6;11099:17;11052:78;:::i;:::-;11043:87;;10859:277;10798:338;;;;:::o;11142:943::-;11237:6;11245;11253;11261;11310:3;11298:9;11289:7;11285:23;11281:33;11278:120;;;11317:79;;:::i;:::-;11278:120;11437:1;11462:53;11507:7;11498:6;11487:9;11483:22;11462:53;:::i;:::-;11452:63;;11408:117;11564:2;11590:53;11635:7;11626:6;11615:9;11611:22;11590:53;:::i;:::-;11580:63;;11535:118;11692:2;11718:53;11763:7;11754:6;11743:9;11739:22;11718:53;:::i;:::-;11708:63;;11663:118;11848:2;11837:9;11833:18;11820:32;11879:18;11871:6;11868:30;11865:117;;;11901:79;;:::i;:::-;11865:117;12006:62;12060:7;12051:6;12040:9;12036:22;12006:62;:::i;:::-;11996:72;;11791:287;11142:943;;;;;;;:::o;12091:648::-;12166:6;12174;12223:2;12211:9;12202:7;12198:23;12194:32;12191:119;;;12229:79;;:::i;:::-;12191:119;12349:1;12374:50;12416:7;12407:6;12396:9;12392:22;12374:50;:::i;:::-;12364:60;;12320:114;12501:2;12490:9;12486:18;12473:32;12532:18;12524:6;12521:30;12518:117;;;12554:79;;:::i;:::-;12518:117;12659:63;12714:7;12705:6;12694:9;12690:22;12659:63;:::i;:::-;12649:73;;12444:288;12091:648;;;;;:::o;12745:474::-;12813:6;12821;12870:2;12858:9;12849:7;12845:23;12841:32;12838:119;;;12876:79;;:::i;:::-;12838:119;12996:1;13021:53;13066:7;13057:6;13046:9;13042:22;13021:53;:::i;:::-;13011:63;;12967:117;13123:2;13149:53;13194:7;13185:6;13174:9;13170:22;13149:53;:::i;:::-;13139:63;;13094:118;12745:474;;;;;:::o;13225:180::-;13273:77;13270:1;13263:88;13370:4;13367:1;13360:15;13394:4;13391:1;13384:15;13411:320;13455:6;13492:1;13486:4;13482:12;13472:22;;13539:1;13533:4;13529:12;13560:18;13550:81;;13616:4;13608:6;13604:17;13594:27;;13550:81;13678:2;13670:6;13667:14;13647:18;13644:38;13641:84;;13697:18;;:::i;:::-;13641:84;13462:269;13411:320;;;:::o;13737:332::-;13858:4;13896:2;13885:9;13881:18;13873:26;;13909:71;13977:1;13966:9;13962:17;13953:6;13909:71;:::i;:::-;13990:72;14058:2;14047:9;14043:18;14034:6;13990:72;:::i;:::-;13737:332;;;;;:::o;14075:137::-;14129:5;14160:6;14154:13;14145:22;;14176:30;14200:5;14176:30;:::i;:::-;14075:137;;;;:::o;14218:345::-;14285:6;14334:2;14322:9;14313:7;14309:23;14305:32;14302:119;;;14340:79;;:::i;:::-;14302:119;14460:1;14485:61;14538:7;14529:6;14518:9;14514:22;14485:61;:::i;:::-;14475:71;;14431:125;14218:345;;;;:::o;14569:181::-;14709:33;14705:1;14697:6;14693:14;14686:57;14569:181;:::o;14756:366::-;14898:3;14919:67;14983:2;14978:3;14919:67;:::i;:::-;14912:74;;14995:93;15084:3;14995:93;:::i;:::-;15113:2;15108:3;15104:12;15097:19;;14756:366;;;:::o;15128:419::-;15294:4;15332:2;15321:9;15317:18;15309:26;;15381:9;15375:4;15371:20;15367:1;15356:9;15352:17;15345:47;15409:131;15535:4;15409:131;:::i;:::-;15401:139;;15128:419;;;:::o;15553:147::-;15654:11;15691:3;15676:18;;15553:147;;;;:::o;15706:114::-;;:::o;15826:398::-;15985:3;16006:83;16087:1;16082:3;16006:83;:::i;:::-;15999:90;;16098:93;16187:3;16098:93;:::i;:::-;16216:1;16211:3;16207:11;16200:18;;15826:398;;;:::o;16230:379::-;16414:3;16436:147;16579:3;16436:147;:::i;:::-;16429:154;;16600:3;16593:10;;16230:379;;;:::o;16615:166::-;16755:18;16751:1;16743:6;16739:14;16732:42;16615:166;:::o;16787:366::-;16929:3;16950:67;17014:2;17009:3;16950:67;:::i;:::-;16943:74;;17026:93;17115:3;17026:93;:::i;:::-;17144:2;17139:3;17135:12;17128:19;;16787:366;;;:::o;17159:419::-;17325:4;17363:2;17352:9;17348:18;17340:26;;17412:9;17406:4;17402:20;17398:1;17387:9;17383:17;17376:47;17440:131;17566:4;17440:131;:::i;:::-;17432:139;;17159:419;;;:::o;17584:141::-;17633:4;17656:3;17648:11;;17679:3;17676:1;17669:14;17713:4;17710:1;17700:18;17692:26;;17584:141;;;:::o;17731:93::-;17768:6;17815:2;17810;17803:5;17799:14;17795:23;17785:33;;17731:93;;;:::o;17830:107::-;17874:8;17924:5;17918:4;17914:16;17893:37;;17830:107;;;;:::o;17943:393::-;18012:6;18062:1;18050:10;18046:18;18085:97;18115:66;18104:9;18085:97;:::i;:::-;18203:39;18233:8;18222:9;18203:39;:::i;:::-;18191:51;;18275:4;18271:9;18264:5;18260:21;18251:30;;18324:4;18314:8;18310:19;18303:5;18300:30;18290:40;;18019:317;;17943:393;;;;;:::o;18342:60::-;18370:3;18391:5;18384:12;;18342:60;;;:::o;18408:142::-;18458:9;18491:53;18509:34;18518:24;18536:5;18518:24;:::i;:::-;18509:34;:::i;:::-;18491:53;:::i;:::-;18478:66;;18408:142;;;:::o;18556:75::-;18599:3;18620:5;18613:12;;18556:75;;;:::o;18637:269::-;18747:39;18778:7;18747:39;:::i;:::-;18808:91;18857:41;18881:16;18857:41;:::i;:::-;18849:6;18842:4;18836:11;18808:91;:::i;:::-;18802:4;18795:105;18713:193;18637:269;;;:::o;18912:73::-;18957:3;18912:73;:::o;18991:189::-;19068:32;;:::i;:::-;19109:65;19167:6;19159;19153:4;19109:65;:::i;:::-;19044:136;18991:189;;:::o;19186:186::-;19246:120;19263:3;19256:5;19253:14;19246:120;;;19317:39;19354:1;19347:5;19317:39;:::i;:::-;19290:1;19283:5;19279:13;19270:22;;19246:120;;;19186:186;;:::o;19378:543::-;19479:2;19474:3;19471:11;19468:446;;;19513:38;19545:5;19513:38;:::i;:::-;19597:29;19615:10;19597:29;:::i;:::-;19587:8;19583:44;19780:2;19768:10;19765:18;19762:49;;;19801:8;19786:23;;19762:49;19824:80;19880:22;19898:3;19880:22;:::i;:::-;19870:8;19866:37;19853:11;19824:80;:::i;:::-;19483:431;;19468:446;19378:543;;;:::o;19927:117::-;19981:8;20031:5;20025:4;20021:16;20000:37;;19927:117;;;;:::o;20050:169::-;20094:6;20127:51;20175:1;20171:6;20163:5;20160:1;20156:13;20127:51;:::i;:::-;20123:56;20208:4;20202;20198:15;20188:25;;20101:118;20050:169;;;;:::o;20224:295::-;20300:4;20446:29;20471:3;20465:4;20446:29;:::i;:::-;20438:37;;20508:3;20505:1;20501:11;20495:4;20492:21;20484:29;;20224:295;;;;:::o;20524:1395::-;20641:37;20674:3;20641:37;:::i;:::-;20743:18;20735:6;20732:30;20729:56;;;20765:18;;:::i;:::-;20729:56;20809:38;20841:4;20835:11;20809:38;:::i;:::-;20894:67;20954:6;20946;20940:4;20894:67;:::i;:::-;20988:1;21012:4;20999:17;;21044:2;21036:6;21033:14;21061:1;21056:618;;;;21718:1;21735:6;21732:77;;;21784:9;21779:3;21775:19;21769:26;21760:35;;21732:77;21835:67;21895:6;21888:5;21835:67;:::i;:::-;21829:4;21822:81;21691:222;21026:887;;21056:618;21108:4;21104:9;21096:6;21092:22;21142:37;21174:4;21142:37;:::i;:::-;21201:1;21215:208;21229:7;21226:1;21223:14;21215:208;;;21308:9;21303:3;21299:19;21293:26;21285:6;21278:42;21359:1;21351:6;21347:14;21337:24;;21406:2;21395:9;21391:18;21378:31;;21252:4;21249:1;21245:12;21240:17;;21215:208;;;21451:6;21442:7;21439:19;21436:179;;;21509:9;21504:3;21500:19;21494:26;21552:48;21594:4;21586:6;21582:17;21571:9;21552:48;:::i;:::-;21544:6;21537:64;21459:156;21436:179;21661:1;21657;21649:6;21645:14;21641:22;21635:4;21628:36;21063:611;;;21026:887;;20616:1303;;;20524:1395;;:::o;21925:180::-;21973:77;21970:1;21963:88;22070:4;22067:1;22060:15;22094:4;22091:1;22084:15;22111:191;22151:3;22170:20;22188:1;22170:20;:::i;:::-;22165:25;;22204:20;22222:1;22204:20;:::i;:::-;22199:25;;22247:1;22244;22240:9;22233:16;;22268:3;22265:1;22262:10;22259:36;;;22275:18;;:::i;:::-;22259:36;22111:191;;;;:::o;22308:174::-;22448:26;22444:1;22436:6;22432:14;22425:50;22308:174;:::o;22488:366::-;22630:3;22651:67;22715:2;22710:3;22651:67;:::i;:::-;22644:74;;22727:93;22816:3;22727:93;:::i;:::-;22845:2;22840:3;22836:12;22829:19;;22488:366;;;:::o;22860:419::-;23026:4;23064:2;23053:9;23049:18;23041:26;;23113:9;23107:4;23103:20;23099:1;23088:9;23084:17;23077:47;23141:131;23267:4;23141:131;:::i;:::-;23133:139;;22860:419;;;:::o;23285:180::-;23425:32;23421:1;23413:6;23409:14;23402:56;23285:180;:::o;23471:366::-;23613:3;23634:67;23698:2;23693:3;23634:67;:::i;:::-;23627:74;;23710:93;23799:3;23710:93;:::i;:::-;23828:2;23823:3;23819:12;23812:19;;23471:366;;;:::o;23843:419::-;24009:4;24047:2;24036:9;24032:18;24024:26;;24096:9;24090:4;24086:20;24082:1;24071:9;24067:17;24060:47;24124:131;24250:4;24124:131;:::i;:::-;24116:139;;23843:419;;;:::o;24268:194::-;24308:4;24328:20;24346:1;24328:20;:::i;:::-;24323:25;;24362:20;24380:1;24362:20;:::i;:::-;24357:25;;24406:1;24403;24399:9;24391:17;;24430:1;24424:4;24421:11;24418:37;;;24435:18;;:::i;:::-;24418:37;24268:194;;;;:::o;24468:348::-;24508:7;24531:20;24549:1;24531:20;:::i;:::-;24526:25;;24565:20;24583:1;24565:20;:::i;:::-;24560:25;;24753:1;24685:66;24681:74;24678:1;24675:81;24670:1;24663:9;24656:17;24652:105;24649:131;;;24760:18;;:::i;:::-;24649:131;24808:1;24805;24801:9;24790:20;;24468:348;;;;:::o;24822:169::-;24962:21;24958:1;24950:6;24946:14;24939:45;24822:169;:::o;24997:366::-;25139:3;25160:67;25224:2;25219:3;25160:67;:::i;:::-;25153:74;;25236:93;25325:3;25236:93;:::i;:::-;25354:2;25349:3;25345:12;25338:19;;24997:366;;;:::o;25369:419::-;25535:4;25573:2;25562:9;25558:18;25550:26;;25622:9;25616:4;25612:20;25608:1;25597:9;25593:17;25586:47;25650:131;25776:4;25650:131;:::i;:::-;25642:139;;25369:419;;;:::o;25794:165::-;25934:17;25930:1;25922:6;25918:14;25911:41;25794:165;:::o;25965:366::-;26107:3;26128:67;26192:2;26187:3;26128:67;:::i;:::-;26121:74;;26204:93;26293:3;26204:93;:::i;:::-;26322:2;26317:3;26313:12;26306:19;;25965:366;;;:::o;26337:419::-;26503:4;26541:2;26530:9;26526:18;26518:26;;26590:9;26584:4;26580:20;26576:1;26565:9;26561:17;26554:47;26618:131;26744:4;26618:131;:::i;:::-;26610:139;;26337:419;;;:::o;26762:222::-;26902:34;26898:1;26890:6;26886:14;26879:58;26971:5;26966:2;26958:6;26954:15;26947:30;26762:222;:::o;26990:366::-;27132:3;27153:67;27217:2;27212:3;27153:67;:::i;:::-;27146:74;;27229:93;27318:3;27229:93;:::i;:::-;27347:2;27342:3;27338:12;27331:19;;26990:366;;;:::o;27362:419::-;27528:4;27566:2;27555:9;27551:18;27543:26;;27615:9;27609:4;27605:20;27601:1;27590:9;27586:17;27579:47;27643:131;27769:4;27643:131;:::i;:::-;27635:139;;27362:419;;;:::o;27787:240::-;27927:34;27923:1;27915:6;27911:14;27904:58;27996:23;27991:2;27983:6;27979:15;27972:48;27787:240;:::o;28033:366::-;28175:3;28196:67;28260:2;28255:3;28196:67;:::i;:::-;28189:74;;28272:93;28361:3;28272:93;:::i;:::-;28390:2;28385:3;28381:12;28374:19;;28033:366;;;:::o;28405:419::-;28571:4;28609:2;28598:9;28594:18;28586:26;;28658:9;28652:4;28648:20;28644:1;28633:9;28629:17;28622:47;28686:131;28812:4;28686:131;:::i;:::-;28678:139;;28405:419;;;:::o;28830:168::-;28970:20;28966:1;28958:6;28954:14;28947:44;28830:168;:::o;29004:366::-;29146:3;29167:67;29231:2;29226:3;29167:67;:::i;:::-;29160:74;;29243:93;29332:3;29243:93;:::i;:::-;29361:2;29356:3;29352:12;29345:19;;29004:366;;;:::o;29376:419::-;29542:4;29580:2;29569:9;29565:18;29557:26;;29629:9;29623:4;29619:20;29615:1;29604:9;29600:17;29593:47;29657:131;29783:4;29657:131;:::i;:::-;29649:139;;29376:419;;;:::o;29801:180::-;29941:32;29937:1;29929:6;29925:14;29918:56;29801:180;:::o;29987:366::-;30129:3;30150:67;30214:2;30209:3;30150:67;:::i;:::-;30143:74;;30226:93;30315:3;30226:93;:::i;:::-;30344:2;30339:3;30335:12;30328:19;;29987:366;;;:::o;30359:419::-;30525:4;30563:2;30552:9;30548:18;30540:26;;30612:9;30606:4;30602:20;30598:1;30587:9;30583:17;30576:47;30640:131;30766:4;30640:131;:::i;:::-;30632:139;;30359:419;;;:::o;30784:148::-;30886:11;30923:3;30908:18;;30784:148;;;;:::o;30962:874::-;31065:3;31102:5;31096:12;31131:36;31157:9;31131:36;:::i;:::-;31183:89;31265:6;31260:3;31183:89;:::i;:::-;31176:96;;31303:1;31292:9;31288:17;31319:1;31314:166;;;;31494:1;31489:341;;;;31281:549;;31314:166;31398:4;31394:9;31383;31379:25;31374:3;31367:38;31460:6;31453:14;31446:22;31438:6;31434:35;31429:3;31425:45;31418:52;;31314:166;;31489:341;31556:38;31588:5;31556:38;:::i;:::-;31616:1;31630:154;31644:6;31641:1;31638:13;31630:154;;;31718:7;31712:14;31708:1;31703:3;31699:11;31692:35;31768:1;31759:7;31755:15;31744:26;;31666:4;31663:1;31659:12;31654:17;;31630:154;;;31813:6;31808:3;31804:16;31797:23;;31496:334;;31281:549;;31069:767;;30962:874;;;;:::o;31842:390::-;31948:3;31976:39;32009:5;31976:39;:::i;:::-;32031:89;32113:6;32108:3;32031:89;:::i;:::-;32024:96;;32129:65;32187:6;32182:3;32175:4;32168:5;32164:16;32129:65;:::i;:::-;32219:6;32214:3;32210:16;32203:23;;31952:280;31842:390;;;;:::o;32238:429::-;32415:3;32437:92;32525:3;32516:6;32437:92;:::i;:::-;32430:99;;32546:95;32637:3;32628:6;32546:95;:::i;:::-;32539:102;;32658:3;32651:10;;32238:429;;;;;:::o;32673:225::-;32813:34;32809:1;32801:6;32797:14;32790:58;32882:8;32877:2;32869:6;32865:15;32858:33;32673:225;:::o;32904:366::-;33046:3;33067:67;33131:2;33126:3;33067:67;:::i;:::-;33060:74;;33143:93;33232:3;33143:93;:::i;:::-;33261:2;33256:3;33252:12;33245:19;;32904:366;;;:::o;33276:419::-;33442:4;33480:2;33469:9;33465:18;33457:26;;33529:9;33523:4;33519:20;33515:1;33504:9;33500:17;33493:47;33557:131;33683:4;33557:131;:::i;:::-;33549:139;;33276:419;;;:::o;33701:182::-;33841:34;33837:1;33829:6;33825:14;33818:58;33701:182;:::o;33889:366::-;34031:3;34052:67;34116:2;34111:3;34052:67;:::i;:::-;34045:74;;34128:93;34217:3;34128:93;:::i;:::-;34246:2;34241:3;34237:12;34230:19;;33889:366;;;:::o;34261:419::-;34427:4;34465:2;34454:9;34450:18;34442:26;;34514:9;34508:4;34504:20;34500:1;34489:9;34485:17;34478:47;34542:131;34668:4;34542:131;:::i;:::-;34534:139;;34261:419;;;:::o;34686:233::-;34725:3;34748:24;34766:5;34748:24;:::i;:::-;34739:33;;34794:66;34787:5;34784:77;34781:103;;34864:18;;:::i;:::-;34781:103;34911:1;34904:5;34900:13;34893:20;;34686:233;;;:::o;34925:180::-;34973:77;34970:1;34963:88;35070:4;35067:1;35060:15;35094:4;35091:1;35084:15;35111:185;35151:1;35168:20;35186:1;35168:20;:::i;:::-;35163:25;;35202:20;35220:1;35202:20;:::i;:::-;35197:25;;35241:1;35231:35;;35246:18;;:::i;:::-;35231:35;35288:1;35285;35281:9;35276:14;;35111:185;;;;:::o;35302:176::-;35334:1;35351:20;35369:1;35351:20;:::i;:::-;35346:25;;35385:20;35403:1;35385:20;:::i;:::-;35380:25;;35424:1;35414:35;;35429:18;;:::i;:::-;35414:35;35470:1;35467;35463:9;35458:14;;35302:176;;;;:::o;35484:180::-;35532:77;35529:1;35522:88;35629:4;35626:1;35619:15;35653:4;35650:1;35643:15;35670:98;35721:6;35755:5;35749:12;35739:22;;35670:98;;;:::o;35774:168::-;35857:11;35891:6;35886:3;35879:19;35931:4;35926:3;35922:14;35907:29;;35774:168;;;;:::o;35948:373::-;36034:3;36062:38;36094:5;36062:38;:::i;:::-;36116:70;36179:6;36174:3;36116:70;:::i;:::-;36109:77;;36195:65;36253:6;36248:3;36241:4;36234:5;36230:16;36195:65;:::i;:::-;36285:29;36307:6;36285:29;:::i;:::-;36280:3;36276:39;36269:46;;36038:283;35948:373;;;;:::o;36327:640::-;36522:4;36560:3;36549:9;36545:19;36537:27;;36574:71;36642:1;36631:9;36627:17;36618:6;36574:71;:::i;:::-;36655:72;36723:2;36712:9;36708:18;36699:6;36655:72;:::i;:::-;36737;36805:2;36794:9;36790:18;36781:6;36737:72;:::i;:::-;36856:9;36850:4;36846:20;36841:2;36830:9;36826:18;36819:48;36884:76;36955:4;36946:6;36884:76;:::i;:::-;36876:84;;36327:640;;;;;;;:::o;36973:141::-;37029:5;37060:6;37054:13;37045:22;;37076:32;37102:5;37076:32;:::i;:::-;36973:141;;;;:::o;37120:349::-;37189:6;37238:2;37226:9;37217:7;37213:23;37209:32;37206:119;;;37244:79;;:::i;:::-;37206:119;37364:1;37389:63;37444:7;37435:6;37424:9;37420:22;37389:63;:::i;:::-;37379:73;;37335:127;37120:349;;;;:::o

Swarm Source

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