ERC-721
Overview
Max Total Supply
353 O.O
Holders
121
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 O.OLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
OutlawOwls_FFC
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-09 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: erc721a/contracts/IERC721A.sol // ERC721A Contracts v4.1.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set through `_extraData`. uint24 extraData; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); // ============================== // IERC2309 // ============================== /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` (inclusive) is transferred from `from` to `to`, * as defined in the ERC2309 standard. See `_mintERC2309` for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } // File: erc721a/contracts/ERC721A.sol // ERC721A Contracts v4.1.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, * including the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at `_startTokenId()` * (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The bit position of `extraData` in packed ownership. uint256 private constant BITPOS_EXTRA_DATA = 232; // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`. uint256 private constant BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; // The mask of the lower 160 bits for addresses. uint256 private constant BITMASK_ADDRESS = (1 << 160) - 1; // The maximum `quantity` that can be minted with `_mintERC2309`. // This limit is to prevent overflows on the address data entries. // For a limit of 5000, a total of 3.689e15 calls to `_mintERC2309` // is required to cause an overflow, which is unrealistic. uint256 private constant MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` // - [232..255] `extraData` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Sets the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { 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; } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ 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); } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev Packs ownership data into a single uint256. */ 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)) } } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ 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))) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, it can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Returns the `nextInitialized` flag set if `quantity` equals 1. */ 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)) } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * See {_mint}. * * Emits a {Transfer} event for each mint. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _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(); } } } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event for each mint. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // `balance` and `numberMinted` have a maximum limit of 2**64. // `tokenId` has a maximum limit of 2**256. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 tokenId = startTokenId; uint256 end = startTokenId + quantity; do { emit Transfer(address(0), to, tokenId++); } while (tokenId < end); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * This function is intended for efficient minting only during contract creation. * * It emits only one {ConsecutiveTransfer} as defined in * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309), * instead of a sequence of {Transfer} event(s). * * Calling this function outside of contract creation WILL make your contract * non-compliant with the ERC721 standard. * For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309 * {ConsecutiveTransfer} event is only permissible during contract creation. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {ConsecutiveTransfer} event. */ function _mintERC2309(address to, uint256 quantity) internal { 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); // Overflows are unrealistic due to the above check for `quantity` to be below the limit. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 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); } /** * @dev Returns the storage slot and value for the approved address of `tokenId`. */ function _getApprovedAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { mapping(uint256 => address) storage tokenApprovalsPtr = _tokenApprovals; // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId]`. assembly { // Compute the slot. mstore(0x00, tokenId) mstore(0x20, tokenApprovalsPtr.slot) approvedAddressSlot := keccak256(0x00, 0x40) // Load the slot's value from storage. approvedAddress := sload(approvedAddressSlot) } } /** * @dev Returns whether the `approvedAddress` is equals to `from` or `msgSender`. */ function _isOwnerOrApproved( address approvedAddress, address from, address msgSender ) private pure returns (bool result) { assembly { // Mask `from` to the lower 160 bits, in case the upper bits somehow aren't clean. from := and(from, BITMASK_ADDRESS) // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean. msgSender := and(msgSender, BITMASK_ADDRESS) // `msgSender == from || msgSender == approvedAddress`. result := or(eq(msgSender, from), eq(msgSender, approvedAddress)) } } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId); // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _packOwnershipData( to, BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId); if (approvalCheck) { // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _packOwnershipData( from, (BITMASK_BURNED | BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ 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)) } } } } /** * @dev Directly sets the extra data for the ownership data `index`. */ function _setExtraDataAt(uint256 index, uint24 extraData) internal { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; // Cast `extraData` with assembly to avoid redundant masking. assembly { extraDataCasted := extraData } packed = (packed & BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } /** * @dev Returns the next extra data for the packed ownership data. * The returned result is shifted into position. */ 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; } /** * @dev Called during each token transfer to set the 24bit `extraData` field. * Intended to be overridden by the cosumer contract. * * `previousExtraData` - the value of `extraData` before transfer. * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. * This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. * This includes minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } } // File: Contracts/OutlawOwls_FFC.sol pragma solidity ^0.8.4; contract OutlawOwls_FFC is ERC721A, Ownable { string public baseURI; string private baseExtension = ".json"; uint256 public costPublic = 0.07 ether; uint256 public costWL = 0.05 ether; uint256 public costEB = 0.03 ether; uint16 public maxSupply = 3700; uint8 public maxMintAmount = 3; bool public isPublicSale = false; bool public isWLSale = false; bool public isEBSale = false; bool public isFMSale = false; mapping(address => uint8) private mintedPerAddress; address[] private whitelistAddresses; address[] private earlyBirdAddresses; address[] private freeMintAddresses; constructor( string memory _name, string memory _symbol ) ERC721A(_name, _symbol) {} function _startTokenId() internal view virtual override returns (uint256) { return 1; } //MINT function mint(uint8 _quantity) external payable { require(_quantity > 0, "User can't mint 0 tokens."); uint256 supply = totalSupply(); require(supply + _quantity <= maxSupply, "Not enough tokens left."); if (msg.sender != owner()) { require(_quantity + mintedPerAddress[msg.sender] <= maxMintAmount, "Exceeded the limit."); //Free Mint if (isFMSale && isFreeMinter(msg.sender)) { if (mintedPerAddress[msg.sender] == 0) { require(msg.value >= (costEB * (_quantity - 1)), "FM: Not enough Ether sent."); } else { require(msg.value >= (costEB * _quantity), "FM: Not enough Ether sent."); } } //Early Bird else if (isEBSale && isEarlyBird(msg.sender)) { require(msg.value >= (costEB * _quantity), "EB: Not enough Ether sent."); } //Whitelist else if (isWLSale && isWhitelist(msg.sender)) { require(msg.value >= (costWL * _quantity), "WL: Not enough Ether sent."); } //Public else if (isPublicSale) { require(msg.value >= (costPublic * _quantity), "Not enough Ether sent."); } else { revert("Minting was not successful!"); } } _safeMint(msg.sender, _quantity); mintedPerAddress[msg.sender] = mintedPerAddress[msg.sender] + _quantity; } //SET PRESALE ACCESS //FreeMint function isFreeMinter(address _user) public view returns (bool) { for(uint256 i = 0; i<freeMintAddresses.length; i++) { if (freeMintAddresses[i] == _user) { return true; } } return false; } //FreeMint function isEarlyBird(address _user) public view returns (bool) { for(uint256 i = 0; i<earlyBirdAddresses.length; i++) { if (earlyBirdAddresses[i] == _user) { return true; } } return false; } //Whitelist function isWhitelist(address _user) public view returns (bool) { for(uint256 i = 0; i<whitelistAddresses.length; i++) { if (whitelistAddresses[i] == _user) { return true; } } return false; } //SET PRESALE LISTS //Whitelist function setWhitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistAddresses; whitelistAddresses = _users; } //EarlyBird function setEarlyBirdUsers(address[] calldata _users) public onlyOwner { delete earlyBirdAddresses; earlyBirdAddresses = _users; } //FreeMint function setFreeMintUsers(address[] calldata _users) public onlyOwner { delete freeMintAddresses; freeMintAddresses = _users; } //SET PRICES //Whitelist function setCostWL(uint256 _newCost) public onlyOwner { costWL = _newCost; } //EarlyBird function setCostEB(uint256 _newCost) public onlyOwner { costEB = _newCost; } //PublicSale function setCostPublic(uint256 _newCost) public onlyOwner { costPublic = _newCost; } //SET SALE STATES //Whitelist function setWhitelistPresale(bool _isActive) public onlyOwner { isWLSale= _isActive; } //EarlyBird function setEarlyBirdPresale(bool _isActive) public onlyOwner { isEBSale= _isActive; } //FreeMint function setFreeMintPresale(bool _isActive) public onlyOwner { isFMSale= _isActive; } //PublicSale function setPublicSale(bool _isActive) public onlyOwner { isPublicSale= _isActive; } //GENERAL SETTINGS //SetCollectionSize function setCollectionSize(uint16 _newSize) public onlyOwner { require(_newSize >= totalSupply(), "The new size can't be smaller than the total supply."); maxSupply = _newSize; } //SetMaxMintAmount function setMaxMintAmount(uint8 _newAmount) public onlyOwner { maxMintAmount = _newAmount; } //SetURL function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } //SetBaseExtension function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } //Airdrop per Mint function sendAirdropsPerMint(address[] calldata _users) external payable onlyOwner { for(uint256 i = 0; i<_users.length; i++) { if (_users[i] != address(0)) { _safeMint(_users[i], 1); mintedPerAddress[_users[i]] = mintedPerAddress[_users[i]] + 1; } } } //Airdrop per Transfer function sendAirdropsPerTransfer(address[] calldata _users, uint16[] calldata _tokenid) external payable onlyOwner { require (_users.length == _tokenid.length, "Count of Addresses and Tokens don't match."); for(uint256 i = 0; i<_users.length; i++) { if (_users[i] != address(0)) { safeTransferFrom(msg.sender, _users[i], _tokenid[i]); mintedPerAddress[_users[i]] = mintedPerAddress[_users[i]] + 1; } } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory cbaseURI = _baseURI(); return bytes(cbaseURI).length != 0 ? string(abi.encodePacked(cbaseURI, _toString(tokenId), baseExtension)) : ''; } function _baseURI() internal view override returns (string memory) { return baseURI; } function getAllOwners() public view onlyOwner returns(address[] memory) { address[] memory owners = new address[](totalSupply()); for (uint256 i = 0; i < totalSupply(); i++) { owners[i] = ownerOf(i+1); } return owners; } function renounceOwnership() public virtual override onlyOwner { //empty } //WITHDRAW //Simple Withdraw function withdraw(uint256 _amount) external payable onlyOwner { _amount = _amount; payable(owner()).transfer(_amount); } //Withdraw All function withdrawAll() external payable onlyOwner { payable(owner()).transfer(address(this).balance); } //Withdraw to other Address function withdrawToAddress(address _withdrawAddress, uint256 _amount) external payable onlyOwner { _amount = _amount; payable(_withdrawAddress).transfer(_amount); } //Withdraw All to other Address function withdrawAllToAddress(address _withdrawAddress) external payable onlyOwner { payable(_withdrawAddress).transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costEB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"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":"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":"isEBSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isEarlyBird","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFMSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isFreeMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWLSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_quantity","type":"uint8"}],"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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"sendAirdropsPerMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint16[]","name":"_tokenid","type":"uint16[]"}],"name":"sendAirdropsPerTransfer","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newSize","type":"uint16"}],"name":"setCollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCostEB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCostPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCostWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setEarlyBirdPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"setEarlyBirdUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setFreeMintPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"setFreeMintUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newAmount","type":"uint8"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setWhitelistPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"setWhitelistUsers","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawAddress","type":"address"}],"name":"withdrawAllToAddress","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToAddress","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90805190602001906200005192919062000298565b5066f8b0a10e470000600b5566b1a2bc2ec50000600c55666a94d74f430000600d55610e74600e60006101000a81548161ffff021916908361ffff1602179055506003600e60026101000a81548160ff021916908360ff1602179055506000600e60036101000a81548160ff0219169083151502179055506000600e60046101000a81548160ff0219169083151502179055506000600e60056101000a81548160ff0219169083151502179055506000600e60066101000a81548160ff0219169083151502179055503480156200012757600080fd5b506040516200556d3803806200556d83398181016040528101906200014d9190620003c6565b818181600290805190602001906200016792919062000298565b5080600390805190602001906200018092919062000298565b5062000191620001c160201b60201c565b6000819055505050620001b9620001ad620001ca60201b60201c565b620001d260201b60201c565b5050620005cf565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002a690620004e0565b90600052602060002090601f016020900481019282620002ca576000855562000316565b82601f10620002e557805160ff191683800117855562000316565b8280016001018555821562000316579182015b8281111562000315578251825591602001919060010190620002f8565b5b50905062000325919062000329565b5090565b5b80821115620003445760008160009055506001016200032a565b5090565b60006200035f620003598462000474565b6200044b565b9050828152602081018484840111156200037e576200037d620005af565b5b6200038b848285620004aa565b509392505050565b600082601f830112620003ab57620003aa620005aa565b5b8151620003bd84826020860162000348565b91505092915050565b60008060408385031215620003e057620003df620005b9565b5b600083015167ffffffffffffffff811115620004015762000400620005b4565b5b6200040f8582860162000393565b925050602083015167ffffffffffffffff811115620004335762000432620005b4565b5b620004418582860162000393565b9150509250929050565b6000620004576200046a565b905062000465828262000516565b919050565b6000604051905090565b600067ffffffffffffffff8211156200049257620004916200057b565b5b6200049d82620005be565b9050602081019050919050565b60005b83811015620004ca578082015181840152602081019050620004ad565b83811115620004da576000848401525b50505050565b60006002820490506001821680620004f957607f821691505b6020821081141562000510576200050f6200054c565b5b50919050565b6200052182620005be565b810181811067ffffffffffffffff821117156200054357620005426200057b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b614f8e80620005df6000396000f3fe6080604052600436106102ff5760003560e01c80636352211e11610190578063a22cb465116100dc578063ced2053b11610095578063e51dcc991161006f578063e51dcc9914610af1578063e985e9c514610b1c578063f2fde38b14610b59578063fd46d78714610b82576102ff565b8063ced2053b14610a74578063d5abeb0114610a9d578063da3ef23f14610ac8576102ff565b8063a22cb46514610954578063a5a865dc1461097d578063b88d4fde146109a8578063bc2ae68f146109d1578063c683630d146109fa578063c87b56dd14610a37576102ff565b806375549490116101495780638da5cb5b116101235780638da5cb5b146108aa57806395d89b41146108d55780639ac1eed0146109005780639b8bf8161461092b576102ff565b8063755494901461083a57806382a7ea4014610877578063853828b6146108a0576102ff565b80636352211e1461073757806363cc1113146107745780636c0360eb1461079f5780636ecd2306146107ca57806370a08231146107e6578063715018a614610823576102ff565b80632beab4b71161024f5780633dfed45f1161020857806354c560ef116101e257806354c560ef1461069357806354c99bb9146106bc57806355f804b3146106e55780635aca1bb61461070e576102ff565b80633dfed45f1461062557806342842e0e1461064e5780634d38e5fa14610677576102ff565b80632beab4b7146105565780632e1a7d4d1461057f5780632f9a7c581461059b578063355dbc3a146105c457806335bdac34146105e057806335eee3c8146105fc576102ff565b80630bdb7c92116102bc578063227f259d11610296578063227f259d146104bb578063239c70ae146104e657806323b872dd14610511578063266fa32f1461053a576102ff565b80630bdb7c921461042857806316c127461461046557806318160ddd14610490576102ff565b806301ffc9a71461030457806306afd5921461034157806306fdde031461036c578063081812fc14610397578063095ea7b3146103d45780630a50e79a146103fd575b600080fd5b34801561031057600080fd5b5061032b6004803603810190610326919061404d565b610bab565b60405161033891906145c7565b60405180910390f35b34801561034d57600080fd5b50610356610c3d565b604051610363919061479f565b60405180910390f35b34801561037857600080fd5b50610381610c43565b60405161038e91906145e2565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b9919061411d565b610cd5565b6040516103cb919061453e565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190613f12565b610d51565b005b34801561040957600080fd5b50610412610e92565b60405161041f91906145c7565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190613d8f565b610ea5565b60405161045c91906145c7565b60405180910390f35b34801561047157600080fd5b5061047a610f54565b60405161048791906145a5565b60405180910390f35b34801561049c57600080fd5b506104a56110b5565b6040516104b2919061479f565b60405180910390f35b3480156104c757600080fd5b506104d06110cc565b6040516104dd91906145c7565b60405180910390f35b3480156104f257600080fd5b506104fb6110df565b60405161050891906147ba565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190613dfc565b6110f2565b005b610554600480360381019061054f9190613f9f565b611417565b005b34801561056257600080fd5b5061057d60048036038101906105789190613f52565b6116ba565b005b6105996004803603810190610594919061411d565b61175a565b005b3480156105a757600080fd5b506105c260048036038101906105bd919061411d565b611827565b005b6105de60048036038101906105d99190613f52565b6118ad565b005b6105fa60048036038101906105f59190613f12565b611adb565b005b34801561060857600080fd5b50610623600480360381019061061e9190613f52565b611ba2565b005b34801561063157600080fd5b5061064c6004803603810190610647919061411d565b611c42565b005b34801561065a57600080fd5b5061067560048036038101906106709190613dfc565b611cc8565b005b610691600480360381019061068c9190613d8f565b611ce8565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190613f52565b611dae565b005b3480156106c857600080fd5b506106e360048036038101906106de9190614020565b611e4e565b005b3480156106f157600080fd5b5061070c600480360381019061070791906140a7565b611ee7565b005b34801561071a57600080fd5b5061073560048036038101906107309190614020565b611f7d565b005b34801561074357600080fd5b5061075e6004803603810190610759919061411d565b612016565b60405161076b919061453e565b60405180910390f35b34801561078057600080fd5b50610789612028565b604051610796919061479f565b60405180910390f35b3480156107ab57600080fd5b506107b461202e565b6040516107c191906145e2565b60405180910390f35b6107e460048036038101906107df919061414a565b6120bc565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613d8f565b6125ff565b60405161081a919061479f565b60405180910390f35b34801561082f57600080fd5b506108386126b8565b005b34801561084657600080fd5b50610861600480360381019061085c9190613d8f565b612736565b60405161086e91906145c7565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614020565b6127e5565b005b6108a861287e565b005b3480156108b657600080fd5b506108bf61294a565b6040516108cc919061453e565b60405180910390f35b3480156108e157600080fd5b506108ea612974565b6040516108f791906145e2565b60405180910390f35b34801561090c57600080fd5b50610915612a06565b60405161092291906145c7565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d91906140f0565b612a19565b005b34801561096057600080fd5b5061097b60048036038101906109769190613ed2565b612b03565b005b34801561098957600080fd5b50610992612c7b565b60405161099f91906145c7565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca9190613e4f565b612c8e565b005b3480156109dd57600080fd5b506109f860048036038101906109f39190614020565b612d01565b005b348015610a0657600080fd5b50610a216004803603810190610a1c9190613d8f565b612d9a565b604051610a2e91906145c7565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a59919061411d565b612e49565b604051610a6b91906145e2565b60405180910390f35b348015610a8057600080fd5b50610a9b6004803603810190610a96919061411d565b612eeb565b005b348015610aa957600080fd5b50610ab2612f71565b604051610abf9190614784565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea91906140a7565b612f85565b005b348015610afd57600080fd5b50610b0661301b565b604051610b13919061479f565b60405180910390f35b348015610b2857600080fd5b50610b436004803603810190610b3e9190613dbc565b613021565b604051610b5091906145c7565b60405180910390f35b348015610b6557600080fd5b50610b806004803603810190610b7b9190613d8f565b6130b5565b005b348015610b8e57600080fd5b50610ba96004803603810190610ba4919061414a565b6131ad565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c365750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600c5481565b606060028054610c5290614ad9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7e90614ad9565b8015610ccb5780601f10610ca057610100808354040283529160200191610ccb565b820191906000526020600020905b815481529060010190602001808311610cae57829003601f168201915b5050505050905090565b6000610ce082613247565b610d16576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d5c82612016565b90508073ffffffffffffffffffffffffffffffffffffffff16610d7d6132a6565b73ffffffffffffffffffffffffffffffffffffffff1614610de057610da981610da46132a6565b613021565b610ddf576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600e60049054906101000a900460ff1681565b600080600090505b601280549050811015610f49578273ffffffffffffffffffffffffffffffffffffffff1660128281548110610ee557610ee4614be3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f36576001915050610f4f565b8080610f4190614b3c565b915050610ead565b50600090505b919050565b6060610f5e6132ae565b73ffffffffffffffffffffffffffffffffffffffff16610f7c61294a565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990614724565b60405180910390fd5b6000610fdc6110b5565b67ffffffffffffffff811115610ff557610ff4614c12565b5b6040519080825280602002602001820160405280156110235781602001602082028036833780820191505090505b50905060005b6110316110b5565b8110156110ad5761104d60018261104891906148ed565b612016565b8282815181106110605761105f614be3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806110a590614b3c565b915050611029565b508091505090565b60006110bf6132b6565b6001546000540303905090565b600e60069054906101000a900460ff1681565b600e60029054906101000a900460ff1681565b60006110fd826132bf565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611164576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806111708461338d565b9150915061118681876111816132a6565b6133af565b6111d25761119b866111966132a6565b613021565b6111d1576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611239576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124686868660016133f3565b801561125157600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061131f856112fb8888876133f9565b7c020000000000000000000000000000000000000000000000000000000017613421565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841614156113a75760006001850190506000600460008381526020019081526020016000205414156113a55760005481146113a4578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461140f868686600161344c565b505050505050565b61141f6132ae565b73ffffffffffffffffffffffffffffffffffffffff1661143d61294a565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90614724565b60405180910390fd5b8181905084849050146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d2906146c4565b60405180910390fd5b60005b848490508110156116b357600073ffffffffffffffffffffffffffffffffffffffff1685858381811061151457611513614be3565b5b90506020020160208101906115299190613d8f565b73ffffffffffffffffffffffffffffffffffffffff16146116a0576115a13386868481811061155b5761155a614be3565b5b90506020020160208101906115709190613d8f565b85858581811061158357611582614be3565b5b905060200201602081019061159891906140f0565b61ffff16611cc8565b6001600f60008787858181106115ba576115b9614be3565b5b90506020020160208101906115cf9190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116219190614943565b600f600087878581811061163857611637614be3565b5b905060200201602081019061164d9190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505b80806116ab90614b3c565b9150506114de565b5050505050565b6116c26132ae565b73ffffffffffffffffffffffffffffffffffffffff166116e061294a565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614724565b60405180910390fd5b601060006117449190613a0c565b818160109190611755929190613a2d565b505050565b6117626132ae565b73ffffffffffffffffffffffffffffffffffffffff1661178061294a565b73ffffffffffffffffffffffffffffffffffffffff16146117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614724565b60405180910390fd5b6117de61294a565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611823573d6000803e3d6000fd5b5050565b61182f6132ae565b73ffffffffffffffffffffffffffffffffffffffff1661184d61294a565b73ffffffffffffffffffffffffffffffffffffffff16146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a90614724565b60405180910390fd5b80600b8190555050565b6118b56132ae565b73ffffffffffffffffffffffffffffffffffffffff166118d361294a565b73ffffffffffffffffffffffffffffffffffffffff1614611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090614724565b60405180910390fd5b60005b82829050811015611ad657600073ffffffffffffffffffffffffffffffffffffffff1683838381811061196257611961614be3565b5b90506020020160208101906119779190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1614611ac3576119c48383838181106119a8576119a7614be3565b5b90506020020160208101906119bd9190613d8f565b6001613452565b6001600f60008585858181106119dd576119dc614be3565b5b90506020020160208101906119f29190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a449190614943565b600f6000858585818110611a5b57611a5a614be3565b5b9050602002016020810190611a709190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505b8080611ace90614b3c565b91505061192c565b505050565b611ae36132ae565b73ffffffffffffffffffffffffffffffffffffffff16611b0161294a565b73ffffffffffffffffffffffffffffffffffffffff1614611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e90614724565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b9d573d6000803e3d6000fd5b505050565b611baa6132ae565b73ffffffffffffffffffffffffffffffffffffffff16611bc861294a565b73ffffffffffffffffffffffffffffffffffffffff1614611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1590614724565b60405180910390fd5b60126000611c2c9190613a0c565b818160129190611c3d929190613a2d565b505050565b611c4a6132ae565b73ffffffffffffffffffffffffffffffffffffffff16611c6861294a565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb590614724565b60405180910390fd5b80600d8190555050565b611ce383838360405180602001604052806000815250612c8e565b505050565b611cf06132ae565b73ffffffffffffffffffffffffffffffffffffffff16611d0e61294a565b73ffffffffffffffffffffffffffffffffffffffff1614611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5b90614724565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611daa573d6000803e3d6000fd5b5050565b611db66132ae565b73ffffffffffffffffffffffffffffffffffffffff16611dd461294a565b73ffffffffffffffffffffffffffffffffffffffff1614611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2190614724565b60405180910390fd5b60116000611e389190613a0c565b818160119190611e49929190613a2d565b505050565b611e566132ae565b73ffffffffffffffffffffffffffffffffffffffff16611e7461294a565b73ffffffffffffffffffffffffffffffffffffffff1614611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190614724565b60405180910390fd5b80600e60066101000a81548160ff02191690831515021790555050565b611eef6132ae565b73ffffffffffffffffffffffffffffffffffffffff16611f0d61294a565b73ffffffffffffffffffffffffffffffffffffffff1614611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90614724565b60405180910390fd5b8060099080519060200190611f79929190613acd565b5050565b611f856132ae565b73ffffffffffffffffffffffffffffffffffffffff16611fa361294a565b73ffffffffffffffffffffffffffffffffffffffff1614611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090614724565b60405180910390fd5b80600e60036101000a81548160ff02191690831515021790555050565b6000612021826132bf565b9050919050565b600b5481565b6009805461203b90614ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461206790614ad9565b80156120b45780601f10612089576101008083540402835291602001916120b4565b820191906000526020600020905b81548152906001019060200180831161209757829003601f168201915b505050505081565b60008160ff1611612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f9906146e4565b60405180910390fd5b600061210c6110b5565b9050600e60009054906101000a900461ffff1661ffff168260ff168261213291906148ed565b1115612173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216a90614664565b60405180910390fd5b61217b61294a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461253f57600e60029054906101000a900460ff1660ff16600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16836122189190614943565b60ff16111561225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390614644565b60405180910390fd5b600e60069054906101000a900460ff16801561227d575061227c33610ea5565b5b15612397576000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16141561233e576001826122e791906149d4565b60ff16600d546122f7919061497a565b341015612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090614604565b60405180910390fd5b612392565b8160ff16600d5461234f919061497a565b341015612391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238890614604565b60405180910390fd5b5b61253e565b600e60059054906101000a900460ff1680156123b857506123b733612736565b5b15612415578160ff16600d546123ce919061497a565b341015612410576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612407906146a4565b60405180910390fd5b61253d565b600e60049054906101000a900460ff168015612436575061243533612d9a565b5b15612493578160ff16600c5461244c919061497a565b34101561248e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248590614684565b60405180910390fd5b61253c565b600e60039054906101000a900460ff1615612500578160ff16600b546124b9919061497a565b3410156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290614764565b60405180910390fd5b61253b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290614744565b60405180910390fd5b5b5b5b5b61254c338360ff16613452565b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125a49190614943565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612667576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6126c06132ae565b73ffffffffffffffffffffffffffffffffffffffff166126de61294a565b73ffffffffffffffffffffffffffffffffffffffff1614612734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272b90614724565b60405180910390fd5b565b600080600090505b6011805490508110156127da578273ffffffffffffffffffffffffffffffffffffffff166011828154811061277657612775614be3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127c75760019150506127e0565b80806127d290614b3c565b91505061273e565b50600090505b919050565b6127ed6132ae565b73ffffffffffffffffffffffffffffffffffffffff1661280b61294a565b73ffffffffffffffffffffffffffffffffffffffff1614612861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285890614724565b60405180910390fd5b80600e60056101000a81548160ff02191690831515021790555050565b6128866132ae565b73ffffffffffffffffffffffffffffffffffffffff166128a461294a565b73ffffffffffffffffffffffffffffffffffffffff16146128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f190614724565b60405180910390fd5b61290261294a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612947573d6000803e3d6000fd5b50565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461298390614ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546129af90614ad9565b80156129fc5780601f106129d1576101008083540402835291602001916129fc565b820191906000526020600020905b8154815290600101906020018083116129df57829003601f168201915b5050505050905090565b600e60059054906101000a900460ff1681565b612a216132ae565b73ffffffffffffffffffffffffffffffffffffffff16612a3f61294a565b73ffffffffffffffffffffffffffffffffffffffff1614612a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8c90614724565b60405180910390fd5b612a9d6110b5565b8161ffff161015612ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ada90614704565b60405180910390fd5b80600e60006101000a81548161ffff021916908361ffff16021790555050565b612b0b6132a6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b70576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000612b7d6132a6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612c2a6132a6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c6f91906145c7565b60405180910390a35050565b600e60039054906101000a900460ff1681565b612c998484846110f2565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612cfb57612cc484848484613470565b612cfa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b612d096132ae565b73ffffffffffffffffffffffffffffffffffffffff16612d2761294a565b73ffffffffffffffffffffffffffffffffffffffff1614612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490614724565b60405180910390fd5b80600e60046101000a81548160ff02191690831515021790555050565b600080600090505b601080549050811015612e3e578273ffffffffffffffffffffffffffffffffffffffff1660108281548110612dda57612dd9614be3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e2b576001915050612e44565b8080612e3690614b3c565b915050612da2565b50600090505b919050565b6060612e5482613247565b612e8a576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e946135d0565b9050600081511415612eb55760405180602001604052806000815250612ee3565b80612ebf84613662565b600a604051602001612ed39392919061450d565b6040516020818303038152906040525b915050919050565b612ef36132ae565b73ffffffffffffffffffffffffffffffffffffffff16612f1161294a565b73ffffffffffffffffffffffffffffffffffffffff1614612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90614724565b60405180910390fd5b80600c8190555050565b600e60009054906101000a900461ffff1681565b612f8d6132ae565b73ffffffffffffffffffffffffffffffffffffffff16612fab61294a565b73ffffffffffffffffffffffffffffffffffffffff1614613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff890614724565b60405180910390fd5b80600a9080519060200190613017929190613acd565b5050565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6130bd6132ae565b73ffffffffffffffffffffffffffffffffffffffff166130db61294a565b73ffffffffffffffffffffffffffffffffffffffff1614613131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312890614724565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614624565b60405180910390fd5b6131aa816136bc565b50565b6131b56132ae565b73ffffffffffffffffffffffffffffffffffffffff166131d361294a565b73ffffffffffffffffffffffffffffffffffffffff1614613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322090614724565b60405180910390fd5b80600e60026101000a81548160ff021916908360ff16021790555050565b6000816132526132b6565b11158015613261575060005482105b801561329f575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600033905090565b60006001905090565b600080829050806132ce6132b6565b11613356576000548110156133555760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415613353575b600081141561334957600460008360019003935083815260200190815260200160002054905061331e565b8092505050613388565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8613410868684613782565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b61346c82826040518060200160405280600081525061378b565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134966132a6565b8786866040518563ffffffff1660e01b81526004016134b89493929190614559565b602060405180830381600087803b1580156134d257600080fd5b505af192505050801561350357506040513d601f19601f82011682018060405250810190613500919061407a565b60015b61357d573d8060008114613533576040519150601f19603f3d011682016040523d82523d6000602084013e613538565b606091505b50600081511415613575576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600980546135df90614ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461360b90614ad9565b80156136585780601f1061362d57610100808354040283529160200191613658565b820191906000526020600020905b81548152906001019060200180831161363b57829003601f168201915b5050505050905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b80156136a857600183039250600a81066030018353600a81049050613688565b508181036020830392508083525050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60009392505050565b6137958383613828565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461382357600080549050600083820390505b6137d56000868380600101945086613470565b61380b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106137c257816000541461382057600080fd5b50505b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613895576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214156138d0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6138dd60008483856133f3565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506139548361394560008660006133f9565b61394e856139fc565b17613421565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613978578060008190555050506139f7600084838561344c565b505050565b60006001821460e11b9050919050565b5080546000825590600052602060002090810190613a2a9190613b53565b50565b828054828255906000526020600020908101928215613abc579160200282015b82811115613abb57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613a4d565b5b509050613ac99190613b53565b5090565b828054613ad990614ad9565b90600052602060002090601f016020900481019282613afb5760008555613b42565b82601f10613b1457805160ff1916838001178555613b42565b82800160010185558215613b42579182015b82811115613b41578251825591602001919060010190613b26565b5b509050613b4f9190613b53565b5090565b5b80821115613b6c576000816000905550600101613b54565b5090565b6000613b83613b7e846147fa565b6147d5565b905082815260208101848484011115613b9f57613b9e614c50565b5b613baa848285614a97565b509392505050565b6000613bc5613bc08461482b565b6147d5565b905082815260208101848484011115613be157613be0614c50565b5b613bec848285614a97565b509392505050565b600081359050613c0381614ece565b92915050565b60008083601f840112613c1f57613c1e614c46565b5b8235905067ffffffffffffffff811115613c3c57613c3b614c41565b5b602083019150836020820283011115613c5857613c57614c4b565b5b9250929050565b60008083601f840112613c7557613c74614c46565b5b8235905067ffffffffffffffff811115613c9257613c91614c41565b5b602083019150836020820283011115613cae57613cad614c4b565b5b9250929050565b600081359050613cc481614ee5565b92915050565b600081359050613cd981614efc565b92915050565b600081519050613cee81614efc565b92915050565b600082601f830112613d0957613d08614c46565b5b8135613d19848260208601613b70565b91505092915050565b600082601f830112613d3757613d36614c46565b5b8135613d47848260208601613bb2565b91505092915050565b600081359050613d5f81614f13565b92915050565b600081359050613d7481614f2a565b92915050565b600081359050613d8981614f41565b92915050565b600060208284031215613da557613da4614c5a565b5b6000613db384828501613bf4565b91505092915050565b60008060408385031215613dd357613dd2614c5a565b5b6000613de185828601613bf4565b9250506020613df285828601613bf4565b9150509250929050565b600080600060608486031215613e1557613e14614c5a565b5b6000613e2386828701613bf4565b9350506020613e3486828701613bf4565b9250506040613e4586828701613d65565b9150509250925092565b60008060008060808587031215613e6957613e68614c5a565b5b6000613e7787828801613bf4565b9450506020613e8887828801613bf4565b9350506040613e9987828801613d65565b925050606085013567ffffffffffffffff811115613eba57613eb9614c55565b5b613ec687828801613cf4565b91505092959194509250565b60008060408385031215613ee957613ee8614c5a565b5b6000613ef785828601613bf4565b9250506020613f0885828601613cb5565b9150509250929050565b60008060408385031215613f2957613f28614c5a565b5b6000613f3785828601613bf4565b9250506020613f4885828601613d65565b9150509250929050565b60008060208385031215613f6957613f68614c5a565b5b600083013567ffffffffffffffff811115613f8757613f86614c55565b5b613f9385828601613c09565b92509250509250929050565b60008060008060408587031215613fb957613fb8614c5a565b5b600085013567ffffffffffffffff811115613fd757613fd6614c55565b5b613fe387828801613c09565b9450945050602085013567ffffffffffffffff81111561400657614005614c55565b5b61401287828801613c5f565b925092505092959194509250565b60006020828403121561403657614035614c5a565b5b600061404484828501613cb5565b91505092915050565b60006020828403121561406357614062614c5a565b5b600061407184828501613cca565b91505092915050565b6000602082840312156140905761408f614c5a565b5b600061409e84828501613cdf565b91505092915050565b6000602082840312156140bd576140bc614c5a565b5b600082013567ffffffffffffffff8111156140db576140da614c55565b5b6140e784828501613d22565b91505092915050565b60006020828403121561410657614105614c5a565b5b600061411484828501613d50565b91505092915050565b60006020828403121561413357614132614c5a565b5b600061414184828501613d65565b91505092915050565b6000602082840312156141605761415f614c5a565b5b600061416e84828501613d7a565b91505092915050565b6000614183838361418f565b60208301905092915050565b61419881614a08565b82525050565b6141a781614a08565b82525050565b60006141b882614881565b6141c281856148af565b93506141cd8361485c565b8060005b838110156141fe5781516141e58882614177565b97506141f0836148a2565b9250506001810190506141d1565b5085935050505092915050565b61421481614a1a565b82525050565b60006142258261488c565b61422f81856148c0565b935061423f818560208601614aa6565b61424881614c5f565b840191505092915050565b600061425e82614897565b61426881856148d1565b9350614278818560208601614aa6565b61428181614c5f565b840191505092915050565b600061429782614897565b6142a181856148e2565b93506142b1818560208601614aa6565b80840191505092915050565b600081546142ca81614ad9565b6142d481866148e2565b945060018216600081146142ef576001811461430057614333565b60ff19831686528186019350614333565b6143098561486c565b60005b8381101561432b5781548189015260018201915060208101905061430c565b838801955050505b50505092915050565b6000614349601a836148d1565b915061435482614c70565b602082019050919050565b600061436c6026836148d1565b915061437782614c99565b604082019050919050565b600061438f6013836148d1565b915061439a82614ce8565b602082019050919050565b60006143b26017836148d1565b91506143bd82614d11565b602082019050919050565b60006143d5601a836148d1565b91506143e082614d3a565b602082019050919050565b60006143f8601a836148d1565b915061440382614d63565b602082019050919050565b600061441b602a836148d1565b915061442682614d8c565b604082019050919050565b600061443e6019836148d1565b915061444982614ddb565b602082019050919050565b60006144616034836148d1565b915061446c82614e04565b604082019050919050565b60006144846020836148d1565b915061448f82614e53565b602082019050919050565b60006144a7601b836148d1565b91506144b282614e7c565b602082019050919050565b60006144ca6016836148d1565b91506144d582614ea5565b602082019050919050565b6144e981614a52565b82525050565b6144f881614a80565b82525050565b61450781614a8a565b82525050565b6000614519828661428c565b9150614525828561428c565b915061453182846142bd565b9150819050949350505050565b6000602082019050614553600083018461419e565b92915050565b600060808201905061456e600083018761419e565b61457b602083018661419e565b61458860408301856144ef565b818103606083015261459a818461421a565b905095945050505050565b600060208201905081810360008301526145bf81846141ad565b905092915050565b60006020820190506145dc600083018461420b565b92915050565b600060208201905081810360008301526145fc8184614253565b905092915050565b6000602082019050818103600083015261461d8161433c565b9050919050565b6000602082019050818103600083015261463d8161435f565b9050919050565b6000602082019050818103600083015261465d81614382565b9050919050565b6000602082019050818103600083015261467d816143a5565b9050919050565b6000602082019050818103600083015261469d816143c8565b9050919050565b600060208201905081810360008301526146bd816143eb565b9050919050565b600060208201905081810360008301526146dd8161440e565b9050919050565b600060208201905081810360008301526146fd81614431565b9050919050565b6000602082019050818103600083015261471d81614454565b9050919050565b6000602082019050818103600083015261473d81614477565b9050919050565b6000602082019050818103600083015261475d8161449a565b9050919050565b6000602082019050818103600083015261477d816144bd565b9050919050565b600060208201905061479960008301846144e0565b92915050565b60006020820190506147b460008301846144ef565b92915050565b60006020820190506147cf60008301846144fe565b92915050565b60006147df6147f0565b90506147eb8282614b0b565b919050565b6000604051905090565b600067ffffffffffffffff82111561481557614814614c12565b5b61481e82614c5f565b9050602081019050919050565b600067ffffffffffffffff82111561484657614845614c12565b5b61484f82614c5f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148f882614a80565b915061490383614a80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561493857614937614b85565b5b828201905092915050565b600061494e82614a8a565b915061495983614a8a565b92508260ff0382111561496f5761496e614b85565b5b828201905092915050565b600061498582614a80565b915061499083614a80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149c9576149c8614b85565b5b828202905092915050565b60006149df82614a8a565b91506149ea83614a8a565b9250828210156149fd576149fc614b85565b5b828203905092915050565b6000614a1382614a60565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614ac4578082015181840152602081019050614aa9565b83811115614ad3576000848401525b50505050565b60006002820490506001821680614af157607f821691505b60208210811415614b0557614b04614bb4565b5b50919050565b614b1482614c5f565b810181811067ffffffffffffffff82111715614b3357614b32614c12565b5b80604052505050565b6000614b4782614a80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b7a57614b79614b85565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f464d3a204e6f7420656e6f7567682045746865722073656e742e000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863656564656420746865206c696d69742e00000000000000000000000000600082015250565b7f4e6f7420656e6f75676820746f6b656e73206c6566742e000000000000000000600082015250565b7f574c3a204e6f7420656e6f7567682045746865722073656e742e000000000000600082015250565b7f45423a204e6f7420656e6f7567682045746865722073656e742e000000000000600082015250565b7f436f756e74206f662041646472657373657320616e6420546f6b656e7320646f60008201527f6e2774206d617463682e00000000000000000000000000000000000000000000602082015250565b7f557365722063616e2774206d696e74203020746f6b656e732e00000000000000600082015250565b7f546865206e65772073697a652063616e277420626520736d616c6c657220746860008201527f616e2074686520746f74616c20737570706c792e000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e6720776173206e6f74207375636365737366756c210000000000600082015250565b7f4e6f7420656e6f7567682045746865722073656e742e00000000000000000000600082015250565b614ed781614a08565b8114614ee257600080fd5b50565b614eee81614a1a565b8114614ef957600080fd5b50565b614f0581614a26565b8114614f1057600080fd5b50565b614f1c81614a52565b8114614f2757600080fd5b50565b614f3381614a80565b8114614f3e57600080fd5b50565b614f4a81614a8a565b8114614f5557600080fd5b5056fea2646970667358221220b4392c6aa2a1e8fded8b65f34f6f12eac841ce28379f0793412e56dcf03caec964736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000204f75746c6177204f776c732062792046756e6b7920466f7265737420436c756200000000000000000000000000000000000000000000000000000000000000034f2e4f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c80636352211e11610190578063a22cb465116100dc578063ced2053b11610095578063e51dcc991161006f578063e51dcc9914610af1578063e985e9c514610b1c578063f2fde38b14610b59578063fd46d78714610b82576102ff565b8063ced2053b14610a74578063d5abeb0114610a9d578063da3ef23f14610ac8576102ff565b8063a22cb46514610954578063a5a865dc1461097d578063b88d4fde146109a8578063bc2ae68f146109d1578063c683630d146109fa578063c87b56dd14610a37576102ff565b806375549490116101495780638da5cb5b116101235780638da5cb5b146108aa57806395d89b41146108d55780639ac1eed0146109005780639b8bf8161461092b576102ff565b8063755494901461083a57806382a7ea4014610877578063853828b6146108a0576102ff565b80636352211e1461073757806363cc1113146107745780636c0360eb1461079f5780636ecd2306146107ca57806370a08231146107e6578063715018a614610823576102ff565b80632beab4b71161024f5780633dfed45f1161020857806354c560ef116101e257806354c560ef1461069357806354c99bb9146106bc57806355f804b3146106e55780635aca1bb61461070e576102ff565b80633dfed45f1461062557806342842e0e1461064e5780634d38e5fa14610677576102ff565b80632beab4b7146105565780632e1a7d4d1461057f5780632f9a7c581461059b578063355dbc3a146105c457806335bdac34146105e057806335eee3c8146105fc576102ff565b80630bdb7c92116102bc578063227f259d11610296578063227f259d146104bb578063239c70ae146104e657806323b872dd14610511578063266fa32f1461053a576102ff565b80630bdb7c921461042857806316c127461461046557806318160ddd14610490576102ff565b806301ffc9a71461030457806306afd5921461034157806306fdde031461036c578063081812fc14610397578063095ea7b3146103d45780630a50e79a146103fd575b600080fd5b34801561031057600080fd5b5061032b6004803603810190610326919061404d565b610bab565b60405161033891906145c7565b60405180910390f35b34801561034d57600080fd5b50610356610c3d565b604051610363919061479f565b60405180910390f35b34801561037857600080fd5b50610381610c43565b60405161038e91906145e2565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b9919061411d565b610cd5565b6040516103cb919061453e565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190613f12565b610d51565b005b34801561040957600080fd5b50610412610e92565b60405161041f91906145c7565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190613d8f565b610ea5565b60405161045c91906145c7565b60405180910390f35b34801561047157600080fd5b5061047a610f54565b60405161048791906145a5565b60405180910390f35b34801561049c57600080fd5b506104a56110b5565b6040516104b2919061479f565b60405180910390f35b3480156104c757600080fd5b506104d06110cc565b6040516104dd91906145c7565b60405180910390f35b3480156104f257600080fd5b506104fb6110df565b60405161050891906147ba565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190613dfc565b6110f2565b005b610554600480360381019061054f9190613f9f565b611417565b005b34801561056257600080fd5b5061057d60048036038101906105789190613f52565b6116ba565b005b6105996004803603810190610594919061411d565b61175a565b005b3480156105a757600080fd5b506105c260048036038101906105bd919061411d565b611827565b005b6105de60048036038101906105d99190613f52565b6118ad565b005b6105fa60048036038101906105f59190613f12565b611adb565b005b34801561060857600080fd5b50610623600480360381019061061e9190613f52565b611ba2565b005b34801561063157600080fd5b5061064c6004803603810190610647919061411d565b611c42565b005b34801561065a57600080fd5b5061067560048036038101906106709190613dfc565b611cc8565b005b610691600480360381019061068c9190613d8f565b611ce8565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190613f52565b611dae565b005b3480156106c857600080fd5b506106e360048036038101906106de9190614020565b611e4e565b005b3480156106f157600080fd5b5061070c600480360381019061070791906140a7565b611ee7565b005b34801561071a57600080fd5b5061073560048036038101906107309190614020565b611f7d565b005b34801561074357600080fd5b5061075e6004803603810190610759919061411d565b612016565b60405161076b919061453e565b60405180910390f35b34801561078057600080fd5b50610789612028565b604051610796919061479f565b60405180910390f35b3480156107ab57600080fd5b506107b461202e565b6040516107c191906145e2565b60405180910390f35b6107e460048036038101906107df919061414a565b6120bc565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613d8f565b6125ff565b60405161081a919061479f565b60405180910390f35b34801561082f57600080fd5b506108386126b8565b005b34801561084657600080fd5b50610861600480360381019061085c9190613d8f565b612736565b60405161086e91906145c7565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614020565b6127e5565b005b6108a861287e565b005b3480156108b657600080fd5b506108bf61294a565b6040516108cc919061453e565b60405180910390f35b3480156108e157600080fd5b506108ea612974565b6040516108f791906145e2565b60405180910390f35b34801561090c57600080fd5b50610915612a06565b60405161092291906145c7565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d91906140f0565b612a19565b005b34801561096057600080fd5b5061097b60048036038101906109769190613ed2565b612b03565b005b34801561098957600080fd5b50610992612c7b565b60405161099f91906145c7565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca9190613e4f565b612c8e565b005b3480156109dd57600080fd5b506109f860048036038101906109f39190614020565b612d01565b005b348015610a0657600080fd5b50610a216004803603810190610a1c9190613d8f565b612d9a565b604051610a2e91906145c7565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a59919061411d565b612e49565b604051610a6b91906145e2565b60405180910390f35b348015610a8057600080fd5b50610a9b6004803603810190610a96919061411d565b612eeb565b005b348015610aa957600080fd5b50610ab2612f71565b604051610abf9190614784565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea91906140a7565b612f85565b005b348015610afd57600080fd5b50610b0661301b565b604051610b13919061479f565b60405180910390f35b348015610b2857600080fd5b50610b436004803603810190610b3e9190613dbc565b613021565b604051610b5091906145c7565b60405180910390f35b348015610b6557600080fd5b50610b806004803603810190610b7b9190613d8f565b6130b5565b005b348015610b8e57600080fd5b50610ba96004803603810190610ba4919061414a565b6131ad565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c365750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600c5481565b606060028054610c5290614ad9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7e90614ad9565b8015610ccb5780601f10610ca057610100808354040283529160200191610ccb565b820191906000526020600020905b815481529060010190602001808311610cae57829003601f168201915b5050505050905090565b6000610ce082613247565b610d16576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d5c82612016565b90508073ffffffffffffffffffffffffffffffffffffffff16610d7d6132a6565b73ffffffffffffffffffffffffffffffffffffffff1614610de057610da981610da46132a6565b613021565b610ddf576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600e60049054906101000a900460ff1681565b600080600090505b601280549050811015610f49578273ffffffffffffffffffffffffffffffffffffffff1660128281548110610ee557610ee4614be3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f36576001915050610f4f565b8080610f4190614b3c565b915050610ead565b50600090505b919050565b6060610f5e6132ae565b73ffffffffffffffffffffffffffffffffffffffff16610f7c61294a565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990614724565b60405180910390fd5b6000610fdc6110b5565b67ffffffffffffffff811115610ff557610ff4614c12565b5b6040519080825280602002602001820160405280156110235781602001602082028036833780820191505090505b50905060005b6110316110b5565b8110156110ad5761104d60018261104891906148ed565b612016565b8282815181106110605761105f614be3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806110a590614b3c565b915050611029565b508091505090565b60006110bf6132b6565b6001546000540303905090565b600e60069054906101000a900460ff1681565b600e60029054906101000a900460ff1681565b60006110fd826132bf565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611164576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806111708461338d565b9150915061118681876111816132a6565b6133af565b6111d25761119b866111966132a6565b613021565b6111d1576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611239576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124686868660016133f3565b801561125157600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061131f856112fb8888876133f9565b7c020000000000000000000000000000000000000000000000000000000017613421565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841614156113a75760006001850190506000600460008381526020019081526020016000205414156113a55760005481146113a4578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461140f868686600161344c565b505050505050565b61141f6132ae565b73ffffffffffffffffffffffffffffffffffffffff1661143d61294a565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90614724565b60405180910390fd5b8181905084849050146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d2906146c4565b60405180910390fd5b60005b848490508110156116b357600073ffffffffffffffffffffffffffffffffffffffff1685858381811061151457611513614be3565b5b90506020020160208101906115299190613d8f565b73ffffffffffffffffffffffffffffffffffffffff16146116a0576115a13386868481811061155b5761155a614be3565b5b90506020020160208101906115709190613d8f565b85858581811061158357611582614be3565b5b905060200201602081019061159891906140f0565b61ffff16611cc8565b6001600f60008787858181106115ba576115b9614be3565b5b90506020020160208101906115cf9190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116219190614943565b600f600087878581811061163857611637614be3565b5b905060200201602081019061164d9190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505b80806116ab90614b3c565b9150506114de565b5050505050565b6116c26132ae565b73ffffffffffffffffffffffffffffffffffffffff166116e061294a565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614724565b60405180910390fd5b601060006117449190613a0c565b818160109190611755929190613a2d565b505050565b6117626132ae565b73ffffffffffffffffffffffffffffffffffffffff1661178061294a565b73ffffffffffffffffffffffffffffffffffffffff16146117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614724565b60405180910390fd5b6117de61294a565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611823573d6000803e3d6000fd5b5050565b61182f6132ae565b73ffffffffffffffffffffffffffffffffffffffff1661184d61294a565b73ffffffffffffffffffffffffffffffffffffffff16146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a90614724565b60405180910390fd5b80600b8190555050565b6118b56132ae565b73ffffffffffffffffffffffffffffffffffffffff166118d361294a565b73ffffffffffffffffffffffffffffffffffffffff1614611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090614724565b60405180910390fd5b60005b82829050811015611ad657600073ffffffffffffffffffffffffffffffffffffffff1683838381811061196257611961614be3565b5b90506020020160208101906119779190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1614611ac3576119c48383838181106119a8576119a7614be3565b5b90506020020160208101906119bd9190613d8f565b6001613452565b6001600f60008585858181106119dd576119dc614be3565b5b90506020020160208101906119f29190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a449190614943565b600f6000858585818110611a5b57611a5a614be3565b5b9050602002016020810190611a709190613d8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505b8080611ace90614b3c565b91505061192c565b505050565b611ae36132ae565b73ffffffffffffffffffffffffffffffffffffffff16611b0161294a565b73ffffffffffffffffffffffffffffffffffffffff1614611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e90614724565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b9d573d6000803e3d6000fd5b505050565b611baa6132ae565b73ffffffffffffffffffffffffffffffffffffffff16611bc861294a565b73ffffffffffffffffffffffffffffffffffffffff1614611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1590614724565b60405180910390fd5b60126000611c2c9190613a0c565b818160129190611c3d929190613a2d565b505050565b611c4a6132ae565b73ffffffffffffffffffffffffffffffffffffffff16611c6861294a565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb590614724565b60405180910390fd5b80600d8190555050565b611ce383838360405180602001604052806000815250612c8e565b505050565b611cf06132ae565b73ffffffffffffffffffffffffffffffffffffffff16611d0e61294a565b73ffffffffffffffffffffffffffffffffffffffff1614611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5b90614724565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611daa573d6000803e3d6000fd5b5050565b611db66132ae565b73ffffffffffffffffffffffffffffffffffffffff16611dd461294a565b73ffffffffffffffffffffffffffffffffffffffff1614611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2190614724565b60405180910390fd5b60116000611e389190613a0c565b818160119190611e49929190613a2d565b505050565b611e566132ae565b73ffffffffffffffffffffffffffffffffffffffff16611e7461294a565b73ffffffffffffffffffffffffffffffffffffffff1614611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190614724565b60405180910390fd5b80600e60066101000a81548160ff02191690831515021790555050565b611eef6132ae565b73ffffffffffffffffffffffffffffffffffffffff16611f0d61294a565b73ffffffffffffffffffffffffffffffffffffffff1614611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90614724565b60405180910390fd5b8060099080519060200190611f79929190613acd565b5050565b611f856132ae565b73ffffffffffffffffffffffffffffffffffffffff16611fa361294a565b73ffffffffffffffffffffffffffffffffffffffff1614611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090614724565b60405180910390fd5b80600e60036101000a81548160ff02191690831515021790555050565b6000612021826132bf565b9050919050565b600b5481565b6009805461203b90614ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461206790614ad9565b80156120b45780601f10612089576101008083540402835291602001916120b4565b820191906000526020600020905b81548152906001019060200180831161209757829003601f168201915b505050505081565b60008160ff1611612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f9906146e4565b60405180910390fd5b600061210c6110b5565b9050600e60009054906101000a900461ffff1661ffff168260ff168261213291906148ed565b1115612173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216a90614664565b60405180910390fd5b61217b61294a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461253f57600e60029054906101000a900460ff1660ff16600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16836122189190614943565b60ff16111561225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390614644565b60405180910390fd5b600e60069054906101000a900460ff16801561227d575061227c33610ea5565b5b15612397576000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16141561233e576001826122e791906149d4565b60ff16600d546122f7919061497a565b341015612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090614604565b60405180910390fd5b612392565b8160ff16600d5461234f919061497a565b341015612391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238890614604565b60405180910390fd5b5b61253e565b600e60059054906101000a900460ff1680156123b857506123b733612736565b5b15612415578160ff16600d546123ce919061497a565b341015612410576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612407906146a4565b60405180910390fd5b61253d565b600e60049054906101000a900460ff168015612436575061243533612d9a565b5b15612493578160ff16600c5461244c919061497a565b34101561248e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248590614684565b60405180910390fd5b61253c565b600e60039054906101000a900460ff1615612500578160ff16600b546124b9919061497a565b3410156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290614764565b60405180910390fd5b61253b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290614744565b60405180910390fd5b5b5b5b5b61254c338360ff16613452565b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125a49190614943565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612667576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6126c06132ae565b73ffffffffffffffffffffffffffffffffffffffff166126de61294a565b73ffffffffffffffffffffffffffffffffffffffff1614612734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272b90614724565b60405180910390fd5b565b600080600090505b6011805490508110156127da578273ffffffffffffffffffffffffffffffffffffffff166011828154811061277657612775614be3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127c75760019150506127e0565b80806127d290614b3c565b91505061273e565b50600090505b919050565b6127ed6132ae565b73ffffffffffffffffffffffffffffffffffffffff1661280b61294a565b73ffffffffffffffffffffffffffffffffffffffff1614612861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285890614724565b60405180910390fd5b80600e60056101000a81548160ff02191690831515021790555050565b6128866132ae565b73ffffffffffffffffffffffffffffffffffffffff166128a461294a565b73ffffffffffffffffffffffffffffffffffffffff16146128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f190614724565b60405180910390fd5b61290261294a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612947573d6000803e3d6000fd5b50565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461298390614ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546129af90614ad9565b80156129fc5780601f106129d1576101008083540402835291602001916129fc565b820191906000526020600020905b8154815290600101906020018083116129df57829003601f168201915b5050505050905090565b600e60059054906101000a900460ff1681565b612a216132ae565b73ffffffffffffffffffffffffffffffffffffffff16612a3f61294a565b73ffffffffffffffffffffffffffffffffffffffff1614612a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8c90614724565b60405180910390fd5b612a9d6110b5565b8161ffff161015612ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ada90614704565b60405180910390fd5b80600e60006101000a81548161ffff021916908361ffff16021790555050565b612b0b6132a6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b70576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000612b7d6132a6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612c2a6132a6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c6f91906145c7565b60405180910390a35050565b600e60039054906101000a900460ff1681565b612c998484846110f2565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612cfb57612cc484848484613470565b612cfa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b612d096132ae565b73ffffffffffffffffffffffffffffffffffffffff16612d2761294a565b73ffffffffffffffffffffffffffffffffffffffff1614612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490614724565b60405180910390fd5b80600e60046101000a81548160ff02191690831515021790555050565b600080600090505b601080549050811015612e3e578273ffffffffffffffffffffffffffffffffffffffff1660108281548110612dda57612dd9614be3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e2b576001915050612e44565b8080612e3690614b3c565b915050612da2565b50600090505b919050565b6060612e5482613247565b612e8a576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e946135d0565b9050600081511415612eb55760405180602001604052806000815250612ee3565b80612ebf84613662565b600a604051602001612ed39392919061450d565b6040516020818303038152906040525b915050919050565b612ef36132ae565b73ffffffffffffffffffffffffffffffffffffffff16612f1161294a565b73ffffffffffffffffffffffffffffffffffffffff1614612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90614724565b60405180910390fd5b80600c8190555050565b600e60009054906101000a900461ffff1681565b612f8d6132ae565b73ffffffffffffffffffffffffffffffffffffffff16612fab61294a565b73ffffffffffffffffffffffffffffffffffffffff1614613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff890614724565b60405180910390fd5b80600a9080519060200190613017929190613acd565b5050565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6130bd6132ae565b73ffffffffffffffffffffffffffffffffffffffff166130db61294a565b73ffffffffffffffffffffffffffffffffffffffff1614613131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312890614724565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614624565b60405180910390fd5b6131aa816136bc565b50565b6131b56132ae565b73ffffffffffffffffffffffffffffffffffffffff166131d361294a565b73ffffffffffffffffffffffffffffffffffffffff1614613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322090614724565b60405180910390fd5b80600e60026101000a81548160ff021916908360ff16021790555050565b6000816132526132b6565b11158015613261575060005482105b801561329f575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600033905090565b60006001905090565b600080829050806132ce6132b6565b11613356576000548110156133555760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415613353575b600081141561334957600460008360019003935083815260200190815260200160002054905061331e565b8092505050613388565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8613410868684613782565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b61346c82826040518060200160405280600081525061378b565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134966132a6565b8786866040518563ffffffff1660e01b81526004016134b89493929190614559565b602060405180830381600087803b1580156134d257600080fd5b505af192505050801561350357506040513d601f19601f82011682018060405250810190613500919061407a565b60015b61357d573d8060008114613533576040519150601f19603f3d011682016040523d82523d6000602084013e613538565b606091505b50600081511415613575576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600980546135df90614ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461360b90614ad9565b80156136585780601f1061362d57610100808354040283529160200191613658565b820191906000526020600020905b81548152906001019060200180831161363b57829003601f168201915b5050505050905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b80156136a857600183039250600a81066030018353600a81049050613688565b508181036020830392508083525050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60009392505050565b6137958383613828565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461382357600080549050600083820390505b6137d56000868380600101945086613470565b61380b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106137c257816000541461382057600080fd5b50505b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613895576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214156138d0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6138dd60008483856133f3565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506139548361394560008660006133f9565b61394e856139fc565b17613421565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613978578060008190555050506139f7600084838561344c565b505050565b60006001821460e11b9050919050565b5080546000825590600052602060002090810190613a2a9190613b53565b50565b828054828255906000526020600020908101928215613abc579160200282015b82811115613abb57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613a4d565b5b509050613ac99190613b53565b5090565b828054613ad990614ad9565b90600052602060002090601f016020900481019282613afb5760008555613b42565b82601f10613b1457805160ff1916838001178555613b42565b82800160010185558215613b42579182015b82811115613b41578251825591602001919060010190613b26565b5b509050613b4f9190613b53565b5090565b5b80821115613b6c576000816000905550600101613b54565b5090565b6000613b83613b7e846147fa565b6147d5565b905082815260208101848484011115613b9f57613b9e614c50565b5b613baa848285614a97565b509392505050565b6000613bc5613bc08461482b565b6147d5565b905082815260208101848484011115613be157613be0614c50565b5b613bec848285614a97565b509392505050565b600081359050613c0381614ece565b92915050565b60008083601f840112613c1f57613c1e614c46565b5b8235905067ffffffffffffffff811115613c3c57613c3b614c41565b5b602083019150836020820283011115613c5857613c57614c4b565b5b9250929050565b60008083601f840112613c7557613c74614c46565b5b8235905067ffffffffffffffff811115613c9257613c91614c41565b5b602083019150836020820283011115613cae57613cad614c4b565b5b9250929050565b600081359050613cc481614ee5565b92915050565b600081359050613cd981614efc565b92915050565b600081519050613cee81614efc565b92915050565b600082601f830112613d0957613d08614c46565b5b8135613d19848260208601613b70565b91505092915050565b600082601f830112613d3757613d36614c46565b5b8135613d47848260208601613bb2565b91505092915050565b600081359050613d5f81614f13565b92915050565b600081359050613d7481614f2a565b92915050565b600081359050613d8981614f41565b92915050565b600060208284031215613da557613da4614c5a565b5b6000613db384828501613bf4565b91505092915050565b60008060408385031215613dd357613dd2614c5a565b5b6000613de185828601613bf4565b9250506020613df285828601613bf4565b9150509250929050565b600080600060608486031215613e1557613e14614c5a565b5b6000613e2386828701613bf4565b9350506020613e3486828701613bf4565b9250506040613e4586828701613d65565b9150509250925092565b60008060008060808587031215613e6957613e68614c5a565b5b6000613e7787828801613bf4565b9450506020613e8887828801613bf4565b9350506040613e9987828801613d65565b925050606085013567ffffffffffffffff811115613eba57613eb9614c55565b5b613ec687828801613cf4565b91505092959194509250565b60008060408385031215613ee957613ee8614c5a565b5b6000613ef785828601613bf4565b9250506020613f0885828601613cb5565b9150509250929050565b60008060408385031215613f2957613f28614c5a565b5b6000613f3785828601613bf4565b9250506020613f4885828601613d65565b9150509250929050565b60008060208385031215613f6957613f68614c5a565b5b600083013567ffffffffffffffff811115613f8757613f86614c55565b5b613f9385828601613c09565b92509250509250929050565b60008060008060408587031215613fb957613fb8614c5a565b5b600085013567ffffffffffffffff811115613fd757613fd6614c55565b5b613fe387828801613c09565b9450945050602085013567ffffffffffffffff81111561400657614005614c55565b5b61401287828801613c5f565b925092505092959194509250565b60006020828403121561403657614035614c5a565b5b600061404484828501613cb5565b91505092915050565b60006020828403121561406357614062614c5a565b5b600061407184828501613cca565b91505092915050565b6000602082840312156140905761408f614c5a565b5b600061409e84828501613cdf565b91505092915050565b6000602082840312156140bd576140bc614c5a565b5b600082013567ffffffffffffffff8111156140db576140da614c55565b5b6140e784828501613d22565b91505092915050565b60006020828403121561410657614105614c5a565b5b600061411484828501613d50565b91505092915050565b60006020828403121561413357614132614c5a565b5b600061414184828501613d65565b91505092915050565b6000602082840312156141605761415f614c5a565b5b600061416e84828501613d7a565b91505092915050565b6000614183838361418f565b60208301905092915050565b61419881614a08565b82525050565b6141a781614a08565b82525050565b60006141b882614881565b6141c281856148af565b93506141cd8361485c565b8060005b838110156141fe5781516141e58882614177565b97506141f0836148a2565b9250506001810190506141d1565b5085935050505092915050565b61421481614a1a565b82525050565b60006142258261488c565b61422f81856148c0565b935061423f818560208601614aa6565b61424881614c5f565b840191505092915050565b600061425e82614897565b61426881856148d1565b9350614278818560208601614aa6565b61428181614c5f565b840191505092915050565b600061429782614897565b6142a181856148e2565b93506142b1818560208601614aa6565b80840191505092915050565b600081546142ca81614ad9565b6142d481866148e2565b945060018216600081146142ef576001811461430057614333565b60ff19831686528186019350614333565b6143098561486c565b60005b8381101561432b5781548189015260018201915060208101905061430c565b838801955050505b50505092915050565b6000614349601a836148d1565b915061435482614c70565b602082019050919050565b600061436c6026836148d1565b915061437782614c99565b604082019050919050565b600061438f6013836148d1565b915061439a82614ce8565b602082019050919050565b60006143b26017836148d1565b91506143bd82614d11565b602082019050919050565b60006143d5601a836148d1565b91506143e082614d3a565b602082019050919050565b60006143f8601a836148d1565b915061440382614d63565b602082019050919050565b600061441b602a836148d1565b915061442682614d8c565b604082019050919050565b600061443e6019836148d1565b915061444982614ddb565b602082019050919050565b60006144616034836148d1565b915061446c82614e04565b604082019050919050565b60006144846020836148d1565b915061448f82614e53565b602082019050919050565b60006144a7601b836148d1565b91506144b282614e7c565b602082019050919050565b60006144ca6016836148d1565b91506144d582614ea5565b602082019050919050565b6144e981614a52565b82525050565b6144f881614a80565b82525050565b61450781614a8a565b82525050565b6000614519828661428c565b9150614525828561428c565b915061453182846142bd565b9150819050949350505050565b6000602082019050614553600083018461419e565b92915050565b600060808201905061456e600083018761419e565b61457b602083018661419e565b61458860408301856144ef565b818103606083015261459a818461421a565b905095945050505050565b600060208201905081810360008301526145bf81846141ad565b905092915050565b60006020820190506145dc600083018461420b565b92915050565b600060208201905081810360008301526145fc8184614253565b905092915050565b6000602082019050818103600083015261461d8161433c565b9050919050565b6000602082019050818103600083015261463d8161435f565b9050919050565b6000602082019050818103600083015261465d81614382565b9050919050565b6000602082019050818103600083015261467d816143a5565b9050919050565b6000602082019050818103600083015261469d816143c8565b9050919050565b600060208201905081810360008301526146bd816143eb565b9050919050565b600060208201905081810360008301526146dd8161440e565b9050919050565b600060208201905081810360008301526146fd81614431565b9050919050565b6000602082019050818103600083015261471d81614454565b9050919050565b6000602082019050818103600083015261473d81614477565b9050919050565b6000602082019050818103600083015261475d8161449a565b9050919050565b6000602082019050818103600083015261477d816144bd565b9050919050565b600060208201905061479960008301846144e0565b92915050565b60006020820190506147b460008301846144ef565b92915050565b60006020820190506147cf60008301846144fe565b92915050565b60006147df6147f0565b90506147eb8282614b0b565b919050565b6000604051905090565b600067ffffffffffffffff82111561481557614814614c12565b5b61481e82614c5f565b9050602081019050919050565b600067ffffffffffffffff82111561484657614845614c12565b5b61484f82614c5f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148f882614a80565b915061490383614a80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561493857614937614b85565b5b828201905092915050565b600061494e82614a8a565b915061495983614a8a565b92508260ff0382111561496f5761496e614b85565b5b828201905092915050565b600061498582614a80565b915061499083614a80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149c9576149c8614b85565b5b828202905092915050565b60006149df82614a8a565b91506149ea83614a8a565b9250828210156149fd576149fc614b85565b5b828203905092915050565b6000614a1382614a60565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614ac4578082015181840152602081019050614aa9565b83811115614ad3576000848401525b50505050565b60006002820490506001821680614af157607f821691505b60208210811415614b0557614b04614bb4565b5b50919050565b614b1482614c5f565b810181811067ffffffffffffffff82111715614b3357614b32614c12565b5b80604052505050565b6000614b4782614a80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b7a57614b79614b85565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f464d3a204e6f7420656e6f7567682045746865722073656e742e000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863656564656420746865206c696d69742e00000000000000000000000000600082015250565b7f4e6f7420656e6f75676820746f6b656e73206c6566742e000000000000000000600082015250565b7f574c3a204e6f7420656e6f7567682045746865722073656e742e000000000000600082015250565b7f45423a204e6f7420656e6f7567682045746865722073656e742e000000000000600082015250565b7f436f756e74206f662041646472657373657320616e6420546f6b656e7320646f60008201527f6e2774206d617463682e00000000000000000000000000000000000000000000602082015250565b7f557365722063616e2774206d696e74203020746f6b656e732e00000000000000600082015250565b7f546865206e65772073697a652063616e277420626520736d616c6c657220746860008201527f616e2074686520746f74616c20737570706c792e000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e6720776173206e6f74207375636365737366756c210000000000600082015250565b7f4e6f7420656e6f7567682045746865722073656e742e00000000000000000000600082015250565b614ed781614a08565b8114614ee257600080fd5b50565b614eee81614a1a565b8114614ef957600080fd5b50565b614f0581614a26565b8114614f1057600080fd5b50565b614f1c81614a52565b8114614f2757600080fd5b50565b614f3381614a80565b8114614f3e57600080fd5b50565b614f4a81614a8a565b8114614f5557600080fd5b5056fea2646970667358221220b4392c6aa2a1e8fded8b65f34f6f12eac841ce28379f0793412e56dcf03caec964736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000204f75746c6177204f776c732062792046756e6b7920466f7265737420436c756200000000000000000000000000000000000000000000000000000000000000034f2e4f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Outlaw Owls by Funky Forest Club
Arg [1] : _symbol (string): O.O
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [3] : 4f75746c6177204f776c732062792046756e6b7920466f7265737420436c7562
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 4f2e4f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
48256:8006:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18050:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48433:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23697:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25643:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25191:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48632:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50802:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55122:274;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17104:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48702:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48554:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34908:2800;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54166:495;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51692:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55537:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52471:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53795:335;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55866:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52047:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52355:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26533:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56098:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51870:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52862:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53499:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52987:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23486:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48388:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48313:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49168:1588;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18729:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55404:88;;;;;;;;;;;;;:::i;:::-;;51091:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52738:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55708:117;;;:::i;:::-;;1990:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23866:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48667:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53138:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25919:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48593:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26789:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52613:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51381:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54669:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52236:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48517:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53635:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48474:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26298:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2899:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53371:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18050:615;18135:4;18450:10;18435:25;;:11;:25;;;;:102;;;;18527:10;18512:25;;:11;:25;;;;18435:102;:179;;;;18604:10;18589:25;;:11;:25;;;;18435:179;18415:199;;18050:615;;;:::o;48433:34::-;;;;:::o;23697:100::-;23751:13;23784:5;23777:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23697:100;:::o;25643:204::-;25711:7;25736:16;25744:7;25736;:16::i;:::-;25731:64;;25761:34;;;;;;;;;;;;;;25731:64;25815:15;:24;25831:7;25815:24;;;;;;;;;;;;;;;;;;;;;25808:31;;25643:204;;;:::o;25191:386::-;25264:13;25280:16;25288:7;25280;:16::i;:::-;25264:32;;25336:5;25313:28;;:19;:17;:19::i;:::-;:28;;;25309:175;;25361:44;25378:5;25385:19;:17;:19::i;:::-;25361:16;:44::i;:::-;25356:128;;25433:35;;;;;;;;;;;;;;25356:128;25309:175;25523:2;25496:15;:24;25512:7;25496:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25561:7;25557:2;25541:28;;25550:5;25541:28;;;;;;;;;;;;25253:324;25191:386;;:::o;48632:28::-;;;;;;;;;;;;;:::o;50802:265::-;50861:4;50882:9;50894:1;50882:13;;50878:159;50899:17;:24;;;;50897:1;:26;50878:159;;;50973:5;50949:29;;:17;50967:1;50949:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:29;;;50945:81;;;51006:4;50999:11;;;;;50945:81;50925:3;;;;;:::i;:::-;;;;50878:159;;;;51054:5;51047:12;;50802:265;;;;:::o;55122:274::-;55176:16;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55205:23:::1;55245:13;:11;:13::i;:::-;55231:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55205:54;;55275:9;55270:95;55294:13;:11;:13::i;:::-;55290:1;:17;55270:95;;;55341:12;55351:1;55349;:3;;;;:::i;:::-;55341:7;:12::i;:::-;55329:6;55336:1;55329:9;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;::::0;::::1;55309:3;;;;;:::i;:::-;;;;55270:95;;;;55382:6;55375:13;;;55122:274:::0;:::o;17104:315::-;17157:7;17385:15;:13;:15::i;:::-;17370:12;;17354:13;;:28;:46;17347:53;;17104:315;:::o;48702:28::-;;;;;;;;;;;;;:::o;48554:30::-;;;;;;;;;;;;;:::o;34908:2800::-;35042:27;35072;35091:7;35072:18;:27::i;:::-;35042:57;;35157:4;35116:45;;35132:19;35116:45;;;35112:86;;35170:28;;;;;;;;;;;;;;35112:86;35212:27;35241:23;35268:28;35288:7;35268:19;:28::i;:::-;35211:85;;;;35396:62;35415:15;35432:4;35438:19;:17;:19::i;:::-;35396:18;:62::i;:::-;35391:174;;35478:43;35495:4;35501:19;:17;:19::i;:::-;35478:16;:43::i;:::-;35473:92;;35530:35;;;;;;;;;;;;;;35473:92;35391:174;35596:1;35582:16;;:2;:16;;;35578:52;;;35607:23;;;;;;;;;;;;;;35578:52;35643:43;35665:4;35671:2;35675:7;35684:1;35643:21;:43::i;:::-;35779:15;35776:160;;;35919:1;35898:19;35891:30;35776:160;36314:18;:24;36333:4;36314:24;;;;;;;;;;;;;;;;36312:26;;;;;;;;;;;;36383:18;:22;36402:2;36383:22;;;;;;;;;;;;;;;;36381:24;;;;;;;;;;;36705:145;36742:2;36790:45;36805:4;36811:2;36815:19;36790:14;:45::i;:::-;14332:8;36763:72;36705:18;:145::i;:::-;36676:17;:26;36694:7;36676:26;;;;;;;;;;;:174;;;;37020:1;14332:8;36970:19;:46;:51;36966:626;;;37042:19;37074:1;37064:7;:11;37042:33;;37231:1;37197:17;:30;37215:11;37197:30;;;;;;;;;;;;:35;37193:384;;;37335:13;;37320:11;:28;37316:242;;37515:19;37482:17;:30;37500:11;37482:30;;;;;;;;;;;:52;;;;37316:242;37193:384;37023:569;36966:626;37639:7;37635:2;37620:27;;37629:4;37620:27;;;;;;;;;;;;37658:42;37679:4;37685:2;37689:7;37698:1;37658:20;:42::i;:::-;35031:2677;;;34908:2800;;;:::o;54166:495::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54318:8:::1;;:15;;54301:6;;:13;;:32;54292:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;54395:9;54391:263;54412:6;;:13;;54410:1;:15;54391:263;;;54472:1;54451:23;;:6;;54458:1;54451:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:23;;;54447:196;;54495:52;54512:10;54524:6;;54531:1;54524:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54535:8;;54544:1;54535:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54495:52;;:16;:52::i;:::-;54626:1;54596:16;:27;54613:6;;54620:1;54613:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54596:27;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;54566:16;:27;54583:6;;54590:1;54583:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54566:27;;;;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;54447:196;54427:3;;;;;:::i;:::-;;;;54391:263;;;;54166:495:::0;;;;:::o;51692:153::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51781:18:::1;;51774:25;;;;:::i;:::-;51831:6;;51810:18;:27;;;;;;;:::i;:::-;;51692:153:::0;;:::o;55537:143::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55646:7:::1;:5;:7::i;:::-;55638:25;;:34;55664:7;55638:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55537:143:::0;:::o;52471:98::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52553:8:::1;52540:10;:21;;;;52471:98:::0;:::o;53795:335::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53893:9:::1;53889:234;53910:6;;:13;;53908:1;:15;53889:234;;;53970:1;53949:23;;:6;;53956:1;53949:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:23;;;53945:167;;53993:23;54003:6;;54010:1;54003:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54014:1;53993:9;:23::i;:::-;54095:1;54065:16;:27;54082:6;;54089:1;54082:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54065:27;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;54035:16;:27;54052:6;;54059:1;54052:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54035:27;;;;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;53945:167;53925:3;;;;;:::i;:::-;;;;53889:234;;;;53795:335:::0;;:::o;55866:187::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56010:16:::1;56002:34;;:43;56037:7;56002:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55866:187:::0;;:::o;52047:150::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52135:17:::1;;52128:24;;;;:::i;:::-;52183:6;;52163:17;:26;;;;;;;:::i;:::-;;52047:150:::0;;:::o;52355:90::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52429:8:::1;52420:6;:17;;;;52355:90:::0;:::o;26533:185::-;26671:39;26688:4;26694:2;26698:7;26671:39;;;;;;;;;;;;:16;:39::i;:::-;26533:185;;;:::o;56098:159::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56200:16:::1;56192:34;;:57;56227:21;56192:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56098:159:::0;:::o;51870:153::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51959:18:::1;;51952:25;;;;:::i;:::-;52009:6;;51988:18;:27;;;;;;;:::i;:::-;;51870:153:::0;;:::o;52862:99::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52944:9:::1;52934:8;;:19;;;;;;;;;;;;;;;;;;52862:99:::0;:::o;53499:104::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53584:11:::1;53574:7;:21;;;;;;;;;;;;:::i;:::-;;53499:104:::0;:::o;52987:98::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53068:9:::1;53054:12;;:23;;;;;;;;;;;;;;;;;;52987:98:::0;:::o;23486:144::-;23550:7;23593:27;23612:7;23593:18;:27::i;:::-;23570:52;;23486:144;;;:::o;48388:38::-;;;;:::o;48313:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49168:1588::-;49247:1;49235:9;:13;;;49227:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;49289:14;49306:13;:11;:13::i;:::-;49289:30;;49360:9;;;;;;;;;;;49338:31;;49347:9;49338:18;;:6;:18;;;;:::i;:::-;:31;;49330:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49436:7;:5;:7::i;:::-;49422:21;;:10;:21;;;49418:1196;;49512:13;;;;;;;;;;;49468:57;;49480:16;:28;49497:10;49480:28;;;;;;;;;;;;;;;;;;;;;;;;;49468:9;:40;;;;:::i;:::-;:57;;;;49460:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;49607:8;;;;;;;;;;;:36;;;;;49619:24;49632:10;49619:12;:24::i;:::-;49607:36;49603:1000;;;49700:1;49668:16;:28;49685:10;49668:28;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;49664:281;;;49770:1;49758:9;:13;;;;:::i;:::-;49748:24;;:6;;:24;;;;:::i;:::-;49734:9;:39;;49726:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;49664:281;;;49884:9;49875:18;;:6;;:18;;;;:::i;:::-;49861:9;:33;;49853:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;49664:281;49603:1000;;;50010:8;;;;;;;;;;;:35;;;;;50022:23;50034:10;50022:11;:23::i;:::-;50010:35;50006:597;;;50097:9;50088:18;;:6;;:18;;;;:::i;:::-;50074:9;:33;;50066:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50006:597;;;50202:8;;;;;;;;;;;:35;;;;;50214:23;50226:10;50214:11;:23::i;:::-;50202:35;50198:405;;;50289:9;50280:18;;:6;;:18;;;;:::i;:::-;50266:9;:33;;50258:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50198:405;;;50391:12;;;;;;;;;;;50387:216;;;50459:9;50446:22;;:10;;:22;;;;:::i;:::-;50432:9;:37;;50424:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50387:216;;;50550:37;;;;;;;;;;:::i;:::-;;;;;;;;50387:216;50198:405;50006:597;49603:1000;49418:1196;50634:32;50644:10;50656:9;50634:32;;:9;:32::i;:::-;50739:9;50708:16;:28;50725:10;50708:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;50677:16;:28;50694:10;50677:28;;;;;;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;49216:1540;49168:1588;:::o;18729:224::-;18793:7;18834:1;18817:19;;:5;:19;;;18813:60;;;18845:28;;;;;;;;;;;;;;18813:60;13284:13;18891:18;:25;18910:5;18891:25;;;;;;;;;;;;;;;;:54;18884:61;;18729:224;;;:::o;55404:88::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55404:88::o;51091:265::-;51148:4;51169:9;51181:1;51169:13;;51165:161;51186:18;:25;;;;51184:1;:27;51165:161;;;51262:5;51237:30;;:18;51256:1;51237:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;51233:82;;;51295:4;51288:11;;;;;51233:82;51213:3;;;;;:::i;:::-;;;;51165:161;;;;51343:5;51336:12;;51091:265;;;;:::o;52738:100::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52821:9:::1;52811:8;;:19;;;;;;;;;;;;;;;;;;52738:100:::0;:::o;55708:117::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55777:7:::1;:5;:7::i;:::-;55769:25;;:48;55795:21;55769:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55708:117::o:0;1990:87::-;2036:7;2063:6;;;;;;;;;;;2056:13;;1990:87;:::o;23866:104::-;23922:13;23955:7;23948:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23866:104;:::o;48667:28::-;;;;;;;;;;;;;:::o;53138:201::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53230:13:::1;:11;:13::i;:::-;53218:8;:25;;;;53210:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;53323:8;53311:9;;:20;;;;;;;;;;;;;;;;;;53138:201:::0;:::o;25919:308::-;26030:19;:17;:19::i;:::-;26018:31;;:8;:31;;;26014:61;;;26058:17;;;;;;;;;;;;;;26014:61;26140:8;26088:18;:39;26107:19;:17;:19::i;:::-;26088:39;;;;;;;;;;;;;;;:49;26128:8;26088:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;26200:8;26164:55;;26179:19;:17;:19::i;:::-;26164:55;;;26210:8;26164:55;;;;;;:::i;:::-;;;;;;;;25919:308;;:::o;48593:32::-;;;;;;;;;;;;;:::o;26789:399::-;26956:31;26969:4;26975:2;26979:7;26956:12;:31::i;:::-;27020:1;27002:2;:14;;;:19;26998:183;;27041:56;27072:4;27078:2;27082:7;27091:5;27041:30;:56::i;:::-;27036:145;;27125:40;;;;;;;;;;;;;;27036:145;26998:183;26789:399;;;;:::o;52613:100::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52696:9:::1;52686:8;;:19;;;;;;;;;;;;;;;;;;52613:100:::0;:::o;51381:265::-;51438:4;51459:9;51471:1;51459:13;;51455:161;51476:18;:25;;;;51474:1;:27;51455:161;;;51552:5;51527:30;;:18;51546:1;51527:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;51523:82;;;51585:4;51578:11;;;;;51523:82;51503:3;;;;;:::i;:::-;;;;51455:161;;;;51633:5;51626:12;;51381:265;;;;:::o;54669:336::-;54742:13;54773:16;54781:7;54773;:16::i;:::-;54768:59;;54798:29;;;;;;;;;;;;;;54768:59;54840:22;54865:10;:8;:10::i;:::-;54840:35;;54919:1;54899:8;54893:22;:27;;:104;;;;;;;;;;;;;;;;;54947:8;54957:18;54967:7;54957:9;:18::i;:::-;54977:13;54930:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54893:104;54886:111;;;54669:336;;;:::o;52236:90::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52310:8:::1;52301:6;:17;;;;52236:90:::0;:::o;48517:30::-;;;;;;;;;;;;;:::o;53635:128::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53738:17:::1;53722:13;:33;;;;;;;;;;;;:::i;:::-;;53635:128:::0;:::o;48474:34::-;;;;:::o;26298:164::-;26395:4;26419:18;:25;26438:5;26419:25;;;;;;;;;;;;;;;:35;26445:8;26419:35;;;;;;;;;;;;;;;;;;;;;;;;;26412:42;;26298:164;;;;:::o;2899:201::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3008:1:::1;2988:22;;:8;:22;;;;2980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3064:28;3083:8;3064:18;:28::i;:::-;2899:201:::0;:::o;53371:106::-;2221:12;:10;:12::i;:::-;2210:23;;:7;:5;:7::i;:::-;:23;;;2202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53459:10:::1;53443:13;;:26;;;;;;;;;;;;;;;;;;53371:106:::0;:::o;27443:273::-;27500:4;27556:7;27537:15;:13;:15::i;:::-;:26;;:66;;;;;27590:13;;27580:7;:23;27537:66;:152;;;;;27688:1;14054:8;27641:17;:26;27659:7;27641:26;;;;;;;;;;;;:43;:48;27537:152;27517:172;;27443:273;;;:::o;46004:105::-;46064:7;46091:10;46084:17;;46004:105;:::o;714:98::-;767:7;794:10;787:17;;714:98;:::o;49051:101::-;49116:7;49143:1;49136:8;;49051:101;:::o;20403:1129::-;20470:7;20490:12;20505:7;20490:22;;20573:4;20554:15;:13;:15::i;:::-;:23;20550:915;;20607:13;;20600:4;:20;20596:869;;;20645:14;20662:17;:23;20680:4;20662:23;;;;;;;;;;;;20645:40;;20778:1;14054:8;20751:6;:23;:28;20747:699;;;21270:113;21287:1;21277:6;:11;21270:113;;;21330:17;:25;21348:6;;;;;;;21330:25;;;;;;;;;;;;21321:34;;21270:113;;;21416:6;21409:13;;;;;;20747:699;20622:843;20596:869;20550:915;21493:31;;;;;;;;;;;;;;20403:1129;;;;:::o;33244:652::-;33339:27;33368:23;33409:53;33465:15;33409:71;;33651:7;33645:4;33638:21;33686:22;33680:4;33673:36;33762:4;33756;33746:21;33723:44;;33858:19;33852:26;33833:45;;33589:300;33244:652;;;:::o;34009:645::-;34151:11;34313:15;34307:4;34303:26;34295:34;;34472:15;34461:9;34457:31;34444:44;;34619:15;34608:9;34605:30;34598:4;34587:9;34584:19;34581:55;34571:65;;34009:645;;;;;:::o;44837:159::-;;;;;:::o;43149:309::-;43284:7;43304:16;14455:3;43330:19;:40;;43304:67;;14455:3;43397:31;43408:4;43414:2;43418:9;43397:10;:31::i;:::-;43389:40;;:61;;43382:68;;;43149:309;;;;;:::o;22977:447::-;23057:14;23225:15;23218:5;23214:27;23205:36;;23399:5;23385:11;23361:22;23357:40;23354:51;23347:5;23344:62;23334:72;;22977:447;;;;:::o;45655:158::-;;;;;:::o;27800:104::-;27869:27;27879:2;27883:8;27869:27;;;;;;;;;;;;:9;:27::i;:::-;27800:104;;:::o;41659:716::-;41822:4;41868:2;41843:45;;;41889:19;:17;:19::i;:::-;41910:4;41916:7;41925:5;41843:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41839:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42143:1;42126:6;:13;:18;42122:235;;;42172:40;;;;;;;;;;;;;;42122:235;42315:6;42309:13;42300:6;42296:2;42292:15;42285:38;41839:529;42012:54;;;42002:64;;;:6;:64;;;;41995:71;;;41659:716;;;;;;:::o;55013:100::-;55065:13;55098:7;55091:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55013:100;:::o;46215:1960::-;46272:17;46691:3;46684:4;46678:11;46674:21;46667:28;;46782:3;46776:4;46769:17;46888:3;47344:5;47474:1;47469:3;47465:11;47458:18;;47611:2;47605:4;47601:13;47597:2;47593:22;47588:3;47580:36;47652:2;47646:4;47642:13;47634:21;;47236:697;47671:4;47236:697;;;47862:1;47857:3;47853:11;47846:18;;47913:2;47907:4;47903:13;47899:2;47895:22;47890:3;47882:36;47766:2;47760:4;47756:13;47748:21;;47236:697;;;47240:430;47972:3;47967;47963:13;48087:2;48082:3;48078:12;48071:19;;48150:6;48145:3;48138:19;46311:1857;;46215:1960;;;:::o;3260:191::-;3334:16;3353:6;;;;;;;;;;;3334:25;;3379:8;3370:6;;:17;;;;;;;;;;;;;;;;;;3434:8;3403:40;;3424:8;3403:40;;;;;;;;;;;;3323:128;3260:191;:::o;44034:147::-;44171:6;44034:147;;;;;:::o;28320:681::-;28443:19;28449:2;28453:8;28443:5;:19::i;:::-;28522:1;28504:2;:14;;;:19;28500:483;;28544:11;28558:13;;28544:27;;28590:13;28612:8;28606:3;:14;28590:30;;28639:233;28670:62;28709:1;28713:2;28717:7;;;;;;28726:5;28670:30;:62::i;:::-;28665:167;;28768:40;;;;;;;;;;;;;;28665:167;28867:3;28859:5;:11;28639:233;;28954:3;28937:13;;:20;28933:34;;28959:8;;;28933:34;28525:458;;28500:483;28320:681;;;:::o;29274:1529::-;29339:20;29362:13;;29339:36;;29404:1;29390:16;;:2;:16;;;29386:48;;;29415:19;;;;;;;;;;;;;;29386:48;29461:1;29449:8;:13;29445:44;;;29471:18;;;;;;;;;;;;;;29445:44;29502:61;29532:1;29536:2;29540:12;29554:8;29502:21;:61::i;:::-;30045:1;13421:2;30016:1;:25;;30015:31;30003:8;:44;29977:18;:22;29996:2;29977:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;30324:139;30361:2;30415:33;30438:1;30442:2;30446:1;30415:14;:33::i;:::-;30382:30;30403:8;30382:20;:30::i;:::-;:66;30324:18;:139::i;:::-;30290:17;:31;30308:12;30290:31;;;;;;;;;;;:173;;;;30480:15;30498:12;30480:30;;30525:11;30554:8;30539:12;:23;30525:37;;30577:101;30629:9;;;;;;30625:2;30604:35;;30621:1;30604:35;;;;;;;;;;;;30673:3;30663:7;:13;30577:101;;30710:3;30694:13;:19;;;;29751:974;;30735:60;30764:1;30768:2;30772:12;30786:8;30735:20;:60::i;:::-;29328:1475;29274:1529;;:::o;24807:322::-;24877:14;25108:1;25098:8;25095:15;25070:23;25066:45;25056:55;;24807:322;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1593:567::-;1665:8;1675:6;1725:3;1718:4;1710:6;1706:17;1702:27;1692:122;;1733:79;;:::i;:::-;1692:122;1846:6;1833:20;1823:30;;1876:18;1868:6;1865:30;1862:117;;;1898:79;;:::i;:::-;1862:117;2012:4;2004:6;2000:17;1988:29;;2066:3;2058:4;2050:6;2046:17;2036:8;2032:32;2029:41;2026:128;;;2073:79;;:::i;:::-;2026:128;1593:567;;;;;:::o;2166:133::-;2209:5;2247:6;2234:20;2225:29;;2263:30;2287:5;2263:30;:::i;:::-;2166:133;;;;:::o;2305:137::-;2350:5;2388:6;2375:20;2366:29;;2404:32;2430:5;2404:32;:::i;:::-;2305:137;;;;:::o;2448:141::-;2504:5;2535:6;2529:13;2520:22;;2551:32;2577:5;2551:32;:::i;:::-;2448:141;;;;:::o;2608:338::-;2663:5;2712:3;2705:4;2697:6;2693:17;2689:27;2679:122;;2720:79;;:::i;:::-;2679:122;2837:6;2824:20;2862:78;2936:3;2928:6;2921:4;2913:6;2909:17;2862:78;:::i;:::-;2853:87;;2669:277;2608:338;;;;:::o;2966:340::-;3022:5;3071:3;3064:4;3056:6;3052:17;3048:27;3038:122;;3079:79;;:::i;:::-;3038:122;3196:6;3183:20;3221:79;3296:3;3288:6;3281:4;3273:6;3269:17;3221:79;:::i;:::-;3212:88;;3028:278;2966:340;;;;:::o;3312:137::-;3357:5;3395:6;3382:20;3373:29;;3411:32;3437:5;3411:32;:::i;:::-;3312:137;;;;:::o;3455:139::-;3501:5;3539:6;3526:20;3517:29;;3555:33;3582:5;3555:33;:::i;:::-;3455:139;;;;:::o;3600:135::-;3644:5;3682:6;3669:20;3660:29;;3698:31;3723:5;3698:31;:::i;:::-;3600:135;;;;:::o;3741:329::-;3800:6;3849:2;3837:9;3828:7;3824:23;3820:32;3817:119;;;3855:79;;:::i;:::-;3817:119;3975:1;4000:53;4045:7;4036:6;4025:9;4021:22;4000:53;:::i;:::-;3990:63;;3946:117;3741:329;;;;:::o;4076:474::-;4144:6;4152;4201:2;4189:9;4180:7;4176:23;4172:32;4169:119;;;4207:79;;:::i;:::-;4169:119;4327:1;4352:53;4397:7;4388:6;4377:9;4373:22;4352:53;:::i;:::-;4342:63;;4298:117;4454:2;4480:53;4525:7;4516:6;4505:9;4501:22;4480:53;:::i;:::-;4470:63;;4425:118;4076:474;;;;;:::o;4556:619::-;4633:6;4641;4649;4698:2;4686:9;4677:7;4673:23;4669:32;4666:119;;;4704:79;;:::i;:::-;4666:119;4824:1;4849:53;4894:7;4885:6;4874:9;4870:22;4849:53;:::i;:::-;4839:63;;4795:117;4951:2;4977:53;5022:7;5013:6;5002:9;4998:22;4977:53;:::i;:::-;4967:63;;4922:118;5079:2;5105:53;5150:7;5141:6;5130:9;5126:22;5105:53;:::i;:::-;5095:63;;5050:118;4556:619;;;;;:::o;5181:943::-;5276:6;5284;5292;5300;5349:3;5337:9;5328:7;5324:23;5320:33;5317:120;;;5356:79;;:::i;:::-;5317:120;5476:1;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5447:117;5603:2;5629:53;5674:7;5665:6;5654:9;5650:22;5629:53;:::i;:::-;5619:63;;5574:118;5731:2;5757:53;5802:7;5793:6;5782:9;5778:22;5757:53;:::i;:::-;5747:63;;5702:118;5887:2;5876:9;5872:18;5859:32;5918:18;5910:6;5907:30;5904:117;;;5940:79;;:::i;:::-;5904:117;6045:62;6099:7;6090:6;6079:9;6075:22;6045:62;:::i;:::-;6035:72;;5830:287;5181:943;;;;;;;:::o;6130:468::-;6195:6;6203;6252:2;6240:9;6231:7;6227:23;6223:32;6220:119;;;6258:79;;:::i;:::-;6220:119;6378:1;6403:53;6448:7;6439:6;6428:9;6424:22;6403:53;:::i;:::-;6393:63;;6349:117;6505:2;6531:50;6573:7;6564:6;6553:9;6549:22;6531:50;:::i;:::-;6521:60;;6476:115;6130:468;;;;;:::o;6604:474::-;6672:6;6680;6729:2;6717:9;6708:7;6704:23;6700:32;6697:119;;;6735:79;;:::i;:::-;6697:119;6855:1;6880:53;6925:7;6916:6;6905:9;6901:22;6880:53;:::i;:::-;6870:63;;6826:117;6982:2;7008:53;7053:7;7044:6;7033:9;7029:22;7008:53;:::i;:::-;6998:63;;6953:118;6604:474;;;;;:::o;7084:559::-;7170:6;7178;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7381:1;7370:9;7366:17;7353:31;7411:18;7403:6;7400:30;7397:117;;;7433:79;;:::i;:::-;7397:117;7546:80;7618:7;7609:6;7598:9;7594:22;7546:80;:::i;:::-;7528:98;;;;7324:312;7084:559;;;;;:::o;7649:932::-;7770:6;7778;7786;7794;7843:2;7831:9;7822:7;7818:23;7814:32;7811:119;;;7849:79;;:::i;:::-;7811:119;7997:1;7986:9;7982:17;7969:31;8027:18;8019:6;8016:30;8013:117;;;8049:79;;:::i;:::-;8013:117;8162:80;8234:7;8225:6;8214:9;8210:22;8162:80;:::i;:::-;8144:98;;;;7940:312;8319:2;8308:9;8304:18;8291:32;8350:18;8342:6;8339:30;8336:117;;;8372:79;;:::i;:::-;8336:117;8485:79;8556:7;8547:6;8536:9;8532:22;8485:79;:::i;:::-;8467:97;;;;8262:312;7649:932;;;;;;;:::o;8587:323::-;8643:6;8692:2;8680:9;8671:7;8667:23;8663:32;8660:119;;;8698:79;;:::i;:::-;8660:119;8818:1;8843:50;8885:7;8876:6;8865:9;8861:22;8843:50;:::i;:::-;8833:60;;8789:114;8587:323;;;;:::o;8916:327::-;8974:6;9023:2;9011:9;9002:7;8998:23;8994:32;8991:119;;;9029:79;;:::i;:::-;8991:119;9149:1;9174:52;9218:7;9209:6;9198:9;9194:22;9174:52;:::i;:::-;9164:62;;9120:116;8916:327;;;;:::o;9249:349::-;9318:6;9367:2;9355:9;9346:7;9342:23;9338:32;9335:119;;;9373:79;;:::i;:::-;9335:119;9493:1;9518:63;9573:7;9564:6;9553:9;9549:22;9518:63;:::i;:::-;9508:73;;9464:127;9249:349;;;;:::o;9604:509::-;9673:6;9722:2;9710:9;9701:7;9697:23;9693:32;9690:119;;;9728:79;;:::i;:::-;9690:119;9876:1;9865:9;9861:17;9848:31;9906:18;9898:6;9895:30;9892:117;;;9928:79;;:::i;:::-;9892:117;10033:63;10088:7;10079:6;10068:9;10064:22;10033:63;:::i;:::-;10023:73;;9819:287;9604:509;;;;:::o;10119:327::-;10177:6;10226:2;10214:9;10205:7;10201:23;10197:32;10194:119;;;10232:79;;:::i;:::-;10194:119;10352:1;10377:52;10421:7;10412:6;10401:9;10397:22;10377:52;:::i;:::-;10367:62;;10323:116;10119:327;;;;:::o;10452:329::-;10511:6;10560:2;10548:9;10539:7;10535:23;10531:32;10528:119;;;10566:79;;:::i;:::-;10528:119;10686:1;10711:53;10756:7;10747:6;10736:9;10732:22;10711:53;:::i;:::-;10701:63;;10657:117;10452:329;;;;:::o;10787:325::-;10844:6;10893:2;10881:9;10872:7;10868:23;10864:32;10861:119;;;10899:79;;:::i;:::-;10861:119;11019:1;11044:51;11087:7;11078:6;11067:9;11063:22;11044:51;:::i;:::-;11034:61;;10990:115;10787:325;;;;:::o;11118:179::-;11187:10;11208:46;11250:3;11242:6;11208:46;:::i;:::-;11286:4;11281:3;11277:14;11263:28;;11118:179;;;;:::o;11303:108::-;11380:24;11398:5;11380:24;:::i;:::-;11375:3;11368:37;11303:108;;:::o;11417:118::-;11504:24;11522:5;11504:24;:::i;:::-;11499:3;11492:37;11417:118;;:::o;11571:732::-;11690:3;11719:54;11767:5;11719:54;:::i;:::-;11789:86;11868:6;11863:3;11789:86;:::i;:::-;11782:93;;11899:56;11949:5;11899:56;:::i;:::-;11978:7;12009:1;11994:284;12019:6;12016:1;12013:13;11994:284;;;12095:6;12089:13;12122:63;12181:3;12166:13;12122:63;:::i;:::-;12115:70;;12208:60;12261:6;12208:60;:::i;:::-;12198:70;;12054:224;12041:1;12038;12034:9;12029:14;;11994:284;;;11998:14;12294:3;12287:10;;11695:608;;;11571:732;;;;:::o;12309:109::-;12390:21;12405:5;12390:21;:::i;:::-;12385:3;12378:34;12309:109;;:::o;12424:360::-;12510:3;12538:38;12570:5;12538:38;:::i;:::-;12592:70;12655:6;12650:3;12592:70;:::i;:::-;12585:77;;12671:52;12716:6;12711:3;12704:4;12697:5;12693:16;12671:52;:::i;:::-;12748:29;12770:6;12748:29;:::i;:::-;12743:3;12739:39;12732:46;;12514:270;12424:360;;;;:::o;12790:364::-;12878:3;12906:39;12939:5;12906:39;:::i;:::-;12961:71;13025:6;13020:3;12961:71;:::i;:::-;12954:78;;13041:52;13086:6;13081:3;13074:4;13067:5;13063:16;13041:52;:::i;:::-;13118:29;13140:6;13118:29;:::i;:::-;13113:3;13109:39;13102:46;;12882:272;12790:364;;;;:::o;13160:377::-;13266:3;13294:39;13327:5;13294:39;:::i;:::-;13349:89;13431:6;13426:3;13349:89;:::i;:::-;13342:96;;13447:52;13492:6;13487:3;13480:4;13473:5;13469:16;13447:52;:::i;:::-;13524:6;13519:3;13515:16;13508:23;;13270:267;13160:377;;;;:::o;13567:845::-;13670:3;13707:5;13701:12;13736:36;13762:9;13736:36;:::i;:::-;13788:89;13870:6;13865:3;13788:89;:::i;:::-;13781:96;;13908:1;13897:9;13893:17;13924:1;13919:137;;;;14070:1;14065:341;;;;13886:520;;13919:137;14003:4;13999:9;13988;13984:25;13979:3;13972:38;14039:6;14034:3;14030:16;14023:23;;13919:137;;14065:341;14132:38;14164:5;14132:38;:::i;:::-;14192:1;14206:154;14220:6;14217:1;14214:13;14206:154;;;14294:7;14288:14;14284:1;14279:3;14275:11;14268:35;14344:1;14335:7;14331:15;14320:26;;14242:4;14239:1;14235:12;14230:17;;14206:154;;;14389:6;14384:3;14380:16;14373:23;;14072:334;;13886:520;;13674:738;;13567:845;;;;:::o;14418:366::-;14560:3;14581:67;14645:2;14640:3;14581:67;:::i;:::-;14574:74;;14657:93;14746:3;14657:93;:::i;:::-;14775:2;14770:3;14766:12;14759:19;;14418:366;;;:::o;14790:::-;14932:3;14953:67;15017:2;15012:3;14953:67;:::i;:::-;14946:74;;15029:93;15118:3;15029:93;:::i;:::-;15147:2;15142:3;15138:12;15131:19;;14790:366;;;:::o;15162:::-;15304:3;15325:67;15389:2;15384:3;15325:67;:::i;:::-;15318:74;;15401:93;15490:3;15401:93;:::i;:::-;15519:2;15514:3;15510:12;15503:19;;15162:366;;;:::o;15534:::-;15676:3;15697:67;15761:2;15756:3;15697:67;:::i;:::-;15690:74;;15773:93;15862:3;15773:93;:::i;:::-;15891:2;15886:3;15882:12;15875:19;;15534:366;;;:::o;15906:::-;16048:3;16069:67;16133:2;16128:3;16069:67;:::i;:::-;16062:74;;16145:93;16234:3;16145:93;:::i;:::-;16263:2;16258:3;16254:12;16247:19;;15906:366;;;:::o;16278:::-;16420:3;16441:67;16505:2;16500:3;16441:67;:::i;:::-;16434:74;;16517:93;16606:3;16517:93;:::i;:::-;16635:2;16630:3;16626:12;16619:19;;16278:366;;;:::o;16650:::-;16792:3;16813:67;16877:2;16872:3;16813:67;:::i;:::-;16806:74;;16889:93;16978:3;16889:93;:::i;:::-;17007:2;17002:3;16998:12;16991:19;;16650:366;;;:::o;17022:::-;17164:3;17185:67;17249:2;17244:3;17185:67;:::i;:::-;17178:74;;17261:93;17350:3;17261:93;:::i;:::-;17379:2;17374:3;17370:12;17363:19;;17022:366;;;:::o;17394:::-;17536:3;17557:67;17621:2;17616:3;17557:67;:::i;:::-;17550:74;;17633:93;17722:3;17633:93;:::i;:::-;17751:2;17746:3;17742:12;17735:19;;17394:366;;;:::o;17766:::-;17908:3;17929:67;17993:2;17988:3;17929:67;:::i;:::-;17922:74;;18005:93;18094:3;18005:93;:::i;:::-;18123:2;18118:3;18114:12;18107:19;;17766:366;;;:::o;18138:::-;18280:3;18301:67;18365:2;18360:3;18301:67;:::i;:::-;18294:74;;18377:93;18466:3;18377:93;:::i;:::-;18495:2;18490:3;18486:12;18479:19;;18138:366;;;:::o;18510:::-;18652:3;18673:67;18737:2;18732:3;18673:67;:::i;:::-;18666:74;;18749:93;18838:3;18749:93;:::i;:::-;18867:2;18862:3;18858:12;18851:19;;18510:366;;;:::o;18882:115::-;18967:23;18984:5;18967:23;:::i;:::-;18962:3;18955:36;18882:115;;:::o;19003:118::-;19090:24;19108:5;19090:24;:::i;:::-;19085:3;19078:37;19003:118;;:::o;19127:112::-;19210:22;19226:5;19210:22;:::i;:::-;19205:3;19198:35;19127:112;;:::o;19245:589::-;19470:3;19492:95;19583:3;19574:6;19492:95;:::i;:::-;19485:102;;19604:95;19695:3;19686:6;19604:95;:::i;:::-;19597:102;;19716:92;19804:3;19795:6;19716:92;:::i;:::-;19709:99;;19825:3;19818:10;;19245:589;;;;;;:::o;19840:222::-;19933:4;19971:2;19960:9;19956:18;19948:26;;19984:71;20052:1;20041:9;20037:17;20028:6;19984:71;:::i;:::-;19840:222;;;;:::o;20068:640::-;20263:4;20301:3;20290:9;20286:19;20278:27;;20315:71;20383:1;20372:9;20368:17;20359:6;20315:71;:::i;:::-;20396:72;20464:2;20453:9;20449:18;20440:6;20396:72;:::i;:::-;20478;20546:2;20535:9;20531:18;20522:6;20478:72;:::i;:::-;20597:9;20591:4;20587:20;20582:2;20571:9;20567:18;20560:48;20625:76;20696:4;20687:6;20625:76;:::i;:::-;20617:84;;20068:640;;;;;;;:::o;20714:373::-;20857:4;20895:2;20884:9;20880:18;20872:26;;20944:9;20938:4;20934:20;20930:1;20919:9;20915:17;20908:47;20972:108;21075:4;21066:6;20972:108;:::i;:::-;20964:116;;20714:373;;;;:::o;21093:210::-;21180:4;21218:2;21207:9;21203:18;21195:26;;21231:65;21293:1;21282:9;21278:17;21269:6;21231:65;:::i;:::-;21093:210;;;;:::o;21309:313::-;21422:4;21460:2;21449:9;21445:18;21437:26;;21509:9;21503:4;21499:20;21495:1;21484:9;21480:17;21473:47;21537:78;21610:4;21601:6;21537:78;:::i;:::-;21529:86;;21309:313;;;;:::o;21628:419::-;21794:4;21832:2;21821:9;21817:18;21809:26;;21881:9;21875:4;21871:20;21867:1;21856:9;21852:17;21845:47;21909:131;22035:4;21909:131;:::i;:::-;21901:139;;21628:419;;;:::o;22053:::-;22219:4;22257:2;22246:9;22242:18;22234:26;;22306:9;22300:4;22296:20;22292:1;22281:9;22277:17;22270:47;22334:131;22460:4;22334:131;:::i;:::-;22326:139;;22053:419;;;:::o;22478:::-;22644:4;22682:2;22671:9;22667:18;22659:26;;22731:9;22725:4;22721:20;22717:1;22706:9;22702:17;22695:47;22759:131;22885:4;22759:131;:::i;:::-;22751:139;;22478:419;;;:::o;22903:::-;23069:4;23107:2;23096:9;23092:18;23084:26;;23156:9;23150:4;23146:20;23142:1;23131:9;23127:17;23120:47;23184:131;23310:4;23184:131;:::i;:::-;23176:139;;22903:419;;;:::o;23328:::-;23494:4;23532:2;23521:9;23517:18;23509:26;;23581:9;23575:4;23571:20;23567:1;23556:9;23552:17;23545:47;23609:131;23735:4;23609:131;:::i;:::-;23601:139;;23328:419;;;:::o;23753:::-;23919:4;23957:2;23946:9;23942:18;23934:26;;24006:9;24000:4;23996:20;23992:1;23981:9;23977:17;23970:47;24034:131;24160:4;24034:131;:::i;:::-;24026:139;;23753:419;;;:::o;24178:::-;24344:4;24382:2;24371:9;24367:18;24359:26;;24431:9;24425:4;24421:20;24417:1;24406:9;24402:17;24395:47;24459:131;24585:4;24459:131;:::i;:::-;24451:139;;24178:419;;;:::o;24603:::-;24769:4;24807:2;24796:9;24792:18;24784:26;;24856:9;24850:4;24846:20;24842:1;24831:9;24827:17;24820:47;24884:131;25010:4;24884:131;:::i;:::-;24876:139;;24603:419;;;:::o;25028:::-;25194:4;25232:2;25221:9;25217:18;25209:26;;25281:9;25275:4;25271:20;25267:1;25256:9;25252:17;25245:47;25309:131;25435:4;25309:131;:::i;:::-;25301:139;;25028:419;;;:::o;25453:::-;25619:4;25657:2;25646:9;25642:18;25634:26;;25706:9;25700:4;25696:20;25692:1;25681:9;25677:17;25670:47;25734:131;25860:4;25734:131;:::i;:::-;25726:139;;25453:419;;;:::o;25878:::-;26044:4;26082:2;26071:9;26067:18;26059:26;;26131:9;26125:4;26121:20;26117:1;26106:9;26102:17;26095:47;26159:131;26285:4;26159:131;:::i;:::-;26151:139;;25878:419;;;:::o;26303:::-;26469:4;26507:2;26496:9;26492:18;26484:26;;26556:9;26550:4;26546:20;26542:1;26531:9;26527:17;26520:47;26584:131;26710:4;26584:131;:::i;:::-;26576:139;;26303:419;;;:::o;26728:218::-;26819:4;26857:2;26846:9;26842:18;26834:26;;26870:69;26936:1;26925:9;26921:17;26912:6;26870:69;:::i;:::-;26728:218;;;;:::o;26952:222::-;27045:4;27083:2;27072:9;27068:18;27060:26;;27096:71;27164:1;27153:9;27149:17;27140:6;27096:71;:::i;:::-;26952:222;;;;:::o;27180:214::-;27269:4;27307:2;27296:9;27292:18;27284:26;;27320:67;27384:1;27373:9;27369:17;27360:6;27320:67;:::i;:::-;27180:214;;;;:::o;27400:129::-;27434:6;27461:20;;:::i;:::-;27451:30;;27490:33;27518:4;27510:6;27490:33;:::i;:::-;27400:129;;;:::o;27535:75::-;27568:6;27601:2;27595:9;27585:19;;27535:75;:::o;27616:307::-;27677:4;27767:18;27759:6;27756:30;27753:56;;;27789:18;;:::i;:::-;27753:56;27827:29;27849:6;27827:29;:::i;:::-;27819:37;;27911:4;27905;27901:15;27893:23;;27616:307;;;:::o;27929:308::-;27991:4;28081:18;28073:6;28070:30;28067:56;;;28103:18;;:::i;:::-;28067:56;28141:29;28163:6;28141:29;:::i;:::-;28133:37;;28225:4;28219;28215:15;28207:23;;27929:308;;;:::o;28243:132::-;28310:4;28333:3;28325:11;;28363:4;28358:3;28354:14;28346:22;;28243:132;;;:::o;28381:141::-;28430:4;28453:3;28445:11;;28476:3;28473:1;28466:14;28510:4;28507:1;28497:18;28489:26;;28381:141;;;:::o;28528:114::-;28595:6;28629:5;28623:12;28613:22;;28528:114;;;:::o;28648:98::-;28699:6;28733:5;28727:12;28717:22;;28648:98;;;:::o;28752:99::-;28804:6;28838:5;28832:12;28822:22;;28752:99;;;:::o;28857:113::-;28927:4;28959;28954:3;28950:14;28942:22;;28857:113;;;:::o;28976:184::-;29075:11;29109:6;29104:3;29097:19;29149:4;29144:3;29140:14;29125:29;;28976:184;;;;:::o;29166:168::-;29249:11;29283:6;29278:3;29271:19;29323:4;29318:3;29314:14;29299:29;;29166:168;;;;:::o;29340:169::-;29424:11;29458:6;29453:3;29446:19;29498:4;29493:3;29489:14;29474:29;;29340:169;;;;:::o;29515:148::-;29617:11;29654:3;29639:18;;29515:148;;;;:::o;29669:305::-;29709:3;29728:20;29746:1;29728:20;:::i;:::-;29723:25;;29762:20;29780:1;29762:20;:::i;:::-;29757:25;;29916:1;29848:66;29844:74;29841:1;29838:81;29835:107;;;29922:18;;:::i;:::-;29835:107;29966:1;29963;29959:9;29952:16;;29669:305;;;;:::o;29980:237::-;30018:3;30037:18;30053:1;30037:18;:::i;:::-;30032:23;;30069:18;30085:1;30069:18;:::i;:::-;30064:23;;30159:1;30153:4;30149:12;30146:1;30143:19;30140:45;;;30165:18;;:::i;:::-;30140:45;30209:1;30206;30202:9;30195:16;;29980:237;;;;:::o;30223:348::-;30263:7;30286:20;30304:1;30286:20;:::i;:::-;30281:25;;30320:20;30338:1;30320:20;:::i;:::-;30315:25;;30508:1;30440:66;30436:74;30433:1;30430:81;30425:1;30418:9;30411:17;30407:105;30404:131;;;30515:18;;:::i;:::-;30404:131;30563:1;30560;30556:9;30545:20;;30223:348;;;;:::o;30577:185::-;30615:4;30635:18;30651:1;30635:18;:::i;:::-;30630:23;;30667:18;30683:1;30667:18;:::i;:::-;30662:23;;30704:1;30701;30698:8;30695:34;;;30709:18;;:::i;:::-;30695:34;30754:1;30751;30747:9;30739:17;;30577:185;;;;:::o;30768:96::-;30805:7;30834:24;30852:5;30834:24;:::i;:::-;30823:35;;30768:96;;;:::o;30870:90::-;30904:7;30947:5;30940:13;30933:21;30922:32;;30870:90;;;:::o;30966:149::-;31002:7;31042:66;31035:5;31031:78;31020:89;;30966:149;;;:::o;31121:89::-;31157:7;31197:6;31190:5;31186:18;31175:29;;31121:89;;;:::o;31216:126::-;31253:7;31293:42;31286:5;31282:54;31271:65;;31216:126;;;:::o;31348:77::-;31385:7;31414:5;31403:16;;31348:77;;;:::o;31431:86::-;31466:7;31506:4;31499:5;31495:16;31484:27;;31431:86;;;:::o;31523:154::-;31607:6;31602:3;31597;31584:30;31669:1;31660:6;31655:3;31651:16;31644:27;31523:154;;;:::o;31683:307::-;31751:1;31761:113;31775:6;31772:1;31769:13;31761:113;;;31860:1;31855:3;31851:11;31845:18;31841:1;31836:3;31832:11;31825:39;31797:2;31794:1;31790:10;31785:15;;31761:113;;;31892:6;31889:1;31886:13;31883:101;;;31972:1;31963:6;31958:3;31954:16;31947:27;31883:101;31732:258;31683:307;;;:::o;31996:320::-;32040:6;32077:1;32071:4;32067:12;32057:22;;32124:1;32118:4;32114:12;32145:18;32135:81;;32201:4;32193:6;32189:17;32179:27;;32135:81;32263:2;32255:6;32252:14;32232:18;32229:38;32226:84;;;32282:18;;:::i;:::-;32226:84;32047:269;31996:320;;;:::o;32322:281::-;32405:27;32427:4;32405:27;:::i;:::-;32397:6;32393:40;32535:6;32523:10;32520:22;32499:18;32487:10;32484:34;32481:62;32478:88;;;32546:18;;:::i;:::-;32478:88;32586:10;32582:2;32575:22;32365:238;32322:281;;:::o;32609:233::-;32648:3;32671:24;32689:5;32671:24;:::i;:::-;32662:33;;32717:66;32710:5;32707:77;32704:103;;;32787:18;;:::i;:::-;32704:103;32834:1;32827:5;32823:13;32816:20;;32609:233;;;:::o;32848:180::-;32896:77;32893:1;32886:88;32993:4;32990:1;32983:15;33017:4;33014:1;33007:15;33034:180;33082:77;33079:1;33072:88;33179:4;33176:1;33169:15;33203:4;33200:1;33193:15;33220:180;33268:77;33265:1;33258:88;33365:4;33362:1;33355:15;33389:4;33386:1;33379:15;33406:180;33454:77;33451:1;33444:88;33551:4;33548:1;33541:15;33575:4;33572:1;33565:15;33592:117;33701:1;33698;33691:12;33715:117;33824:1;33821;33814:12;33838:117;33947:1;33944;33937:12;33961:117;34070:1;34067;34060:12;34084:117;34193:1;34190;34183:12;34207:117;34316:1;34313;34306:12;34330:102;34371:6;34422:2;34418:7;34413:2;34406:5;34402:14;34398:28;34388:38;;34330:102;;;:::o;34438:176::-;34578:28;34574:1;34566:6;34562:14;34555:52;34438:176;:::o;34620:225::-;34760:34;34756:1;34748:6;34744:14;34737:58;34829:8;34824:2;34816:6;34812:15;34805:33;34620:225;:::o;34851:169::-;34991:21;34987:1;34979:6;34975:14;34968:45;34851:169;:::o;35026:173::-;35166:25;35162:1;35154:6;35150:14;35143:49;35026:173;:::o;35205:176::-;35345:28;35341:1;35333:6;35329:14;35322:52;35205:176;:::o;35387:::-;35527:28;35523:1;35515:6;35511:14;35504:52;35387:176;:::o;35569:229::-;35709:34;35705:1;35697:6;35693:14;35686:58;35778:12;35773:2;35765:6;35761:15;35754:37;35569:229;:::o;35804:175::-;35944:27;35940:1;35932:6;35928:14;35921:51;35804:175;:::o;35985:239::-;36125:34;36121:1;36113:6;36109:14;36102:58;36194:22;36189:2;36181:6;36177:15;36170:47;35985:239;:::o;36230:182::-;36370:34;36366:1;36358:6;36354:14;36347:58;36230:182;:::o;36418:177::-;36558:29;36554:1;36546:6;36542:14;36535:53;36418:177;:::o;36601:172::-;36741:24;36737:1;36729:6;36725:14;36718:48;36601:172;:::o;36779:122::-;36852:24;36870:5;36852:24;:::i;:::-;36845:5;36842:35;36832:63;;36891:1;36888;36881:12;36832:63;36779:122;:::o;36907:116::-;36977:21;36992:5;36977:21;:::i;:::-;36970:5;36967:32;36957:60;;37013:1;37010;37003:12;36957:60;36907:116;:::o;37029:120::-;37101:23;37118:5;37101:23;:::i;:::-;37094:5;37091:34;37081:62;;37139:1;37136;37129:12;37081:62;37029:120;:::o;37155:::-;37227:23;37244:5;37227:23;:::i;:::-;37220:5;37217:34;37207:62;;37265:1;37262;37255:12;37207:62;37155:120;:::o;37281:122::-;37354:24;37372:5;37354:24;:::i;:::-;37347:5;37344:35;37334:63;;37393:1;37390;37383:12;37334:63;37281:122;:::o;37409:118::-;37480:22;37496:5;37480:22;:::i;:::-;37473:5;37470:33;37460:61;;37517:1;37514;37507:12;37460:61;37409:118;:::o
Swarm Source
ipfs://b4392c6aa2a1e8fded8b65f34f6f12eac841ce28379f0793412e56dcf03caec9
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.