Overview
Max Total Supply
0 MW
Holders
466
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MetaWolves
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.2; import "./ERC721.sol"; import "./Pausable.sol"; import "./Ownable.sol"; import "./Counters.sol"; import "./Strings.sol"; contract MetaWolves is ERC721, Pausable, Ownable { using Counters for Counters.Counter; using Strings for uint256; Counters.Counter private _tokenIdCounter; uint64 private premintStageMinted = 0; uint64 private premintStageLimitPerWallet = 30; uint64 private premintStageTotalSupplyLimit = 2500; uint64 public premintStagePrice = 0.2 ether; uint128 private publicMintStageLimitPerWallet = 30; uint128 public publicMintStagePrice = 0.22 ether; uint128 public TotalSupply = 9999; //tokenID should be <= TotalSupply string public baseURI; string public notRevealedUri = "https://gateway.pinata.cloud/ipfs/QmVtQWaJWrJ2Tq9E9MS7MGtUGhFi4AM33FQEQUezWLFxzk"; mapping(address => uint256) private premintStageMintedInWallet; mapping(address => uint256) private publicStageMintedInWallet; mapping(uint256 => address) private tokenID2Owner; mapping(address => bool) private premintStageWhiteListed; bool public isPremintStageActive = false; bool public isPublicMintStageActive = false; bool public revealed = false; constructor() ERC721("MetaWolves", "MW") { _tokenIdCounter.increment(); } function seedPreMintStageWhiteListed(address[] memory addresses) public onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { premintStageWhiteListed[addresses[i]] = true; } } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function updatePremintStagePrice(uint64 _newPrice) external onlyOwner { premintStagePrice = ((1 / 1000) * 1 ether * _newPrice); } function updatePublicMintStagePrice(uint128 _newPrice) external onlyOwner { publicMintStagePrice = ((1 / 1000) * 1 ether * _newPrice); } function updatePremintStageLimitPerWallet(uint64 _limitPerWallet) external onlyOwner { premintStageLimitPerWallet = _limitPerWallet; } function updatePublicMintStageLimitPerWallet(uint128 _limitPerWallet) external onlyOwner { publicMintStageLimitPerWallet = _limitPerWallet; } function updatePremintStageTotalSupplyLimit(uint64 _totalSupplyLimit) external onlyOwner { premintStageTotalSupplyLimit = _totalSupplyLimit; } function updateTotalSupply(uint64 _totalSupplyLimit) external onlyOwner { TotalSupply = _totalSupplyLimit; } function togglePremintStage() external onlyOwner { isPremintStageActive = (!isPremintStageActive); } function togglePublicmintStage() external onlyOwner { isPublicMintStageActive = (!isPublicMintStageActive); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function reveal() external onlyOwner { require(revealed == false, "Already revealed"); revealed = true; } function setBaseURI(string calldata _inputBaseURI) external onlyOwner { baseURI = _inputBaseURI; } function tokenURI(uint256 _tokenID) public view virtual override returns (string memory) { require( _exists(_tokenID), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, _tokenID.toString(), ".json" ) ) : ""; } function batchMint(uint256 _batchSize) internal returns (uint256[] memory) { uint256[] memory returnTokensBM = new uint256[](_batchSize); uint256 numberMinted = 0; while (numberMinted < _batchSize) { if (tokenID2Owner[_tokenIdCounter.current()] != address(0)) { _tokenIdCounter.increment(); continue; } else { returnTokensBM[numberMinted] = _tokenIdCounter.current(); numberMinted++; mintMetaWolf(_tokenIdCounter.current()); _tokenIdCounter.increment(); } } return returnTokensBM; } function batchPremint(uint256 _batchSize) public payable whenNotPaused returns (uint256[] memory) { require(_batchSize > 0, "Mint at least 1"); require(isPremintStageActive, "isPremintStage not active"); require( premintStageWhiteListed[msg.sender] == true, "User not Whitelisted for preMint" ); require( (premintStageMintedInWallet[msg.sender] + _batchSize) <= premintStageLimitPerWallet, "Batch exceeds Premint Limit/Wallet" ); require( (premintStageMinted + _batchSize) < premintStageTotalSupplyLimit, "Batch exceeds Premint Supply" ); require( msg.value == (premintStagePrice * _batchSize), "Incorrect Price" ); uint256[] memory returnTokens = new uint256[](_batchSize); returnTokens = batchMint(_batchSize); premintStageMintedInWallet[msg.sender] += _batchSize; premintStageMinted += uint64(_batchSize); require( premintStageMinted < premintStageTotalSupplyLimit, "Try Minting Fewer" ); return returnTokens; } function batchPublicMint(uint256 _batchSize) public payable whenNotPaused returns (uint256[] memory) { require(_batchSize > 0, "Mint at least 1"); require(isPublicMintStageActive, "Public Mint not active"); require( (publicStageMintedInWallet[msg.sender] + _batchSize) < publicMintStageLimitPerWallet, "Batch exceeds Public Mint Limit/Wallet" ); require( msg.value == (publicMintStagePrice * _batchSize), "Incorrect Price" ); uint256[] memory returnTokens = new uint256[](_batchSize); returnTokens = batchMint(_batchSize); publicStageMintedInWallet[msg.sender] += _batchSize; return returnTokens; } function ownerMintMetaWolf(uint256 _tokenID) public payable onlyOwner returns (uint256) { require(tokenID2Owner[_tokenID] == address(0), "token already Minted"); mintMetaWolf(_tokenID); return _tokenID; } function batchOwnerMintMetaWolf(uint _batchSize) public payable onlyOwner returns (uint256[] memory) { uint256[] memory returnTokens = new uint256[](_batchSize); return returnTokens = batchMint(_batchSize); } function mintMetaWolf(uint256 _tokenID) private { require(_tokenID <= TotalSupply, "Total Supply Exhausted"); tokenID2Owner[_tokenID] = msg.sender; _safeMint(msg.sender, _tokenID); } function transfer(address payable _to, uint256 amount) public payable onlyOwner { uint256 transferVal = 0; if (amount == 0) { transferVal = address(this).balance; } else { transferVal = amount; } (bool sent, bytes memory data) = _to.call{value: transferVal}(""); require(sent, "Failed to send Ether"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // 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; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @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) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @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, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), 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-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a 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 _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @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`, 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"TotalSupply","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_batchSize","type":"uint256"}],"name":"batchOwnerMintMetaWolf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_batchSize","type":"uint256"}],"name":"batchPremint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_batchSize","type":"uint256"}],"name":"batchPublicMint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","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":"isPremintStageActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintStageActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"ownerMintMetaWolf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premintStagePrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintStagePrice","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"addresses","type":"address[]"}],"name":"seedPreMintStageWhiteListed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_inputBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePremintStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicmintStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"payable","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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_limitPerWallet","type":"uint64"}],"name":"updatePremintStageLimitPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_newPrice","type":"uint64"}],"name":"updatePremintStagePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_totalSupplyLimit","type":"uint64"}],"name":"updatePremintStageTotalSupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_limitPerWallet","type":"uint128"}],"name":"updatePublicMintStageLimitPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_newPrice","type":"uint128"}],"name":"updatePublicMintStagePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_totalSupplyLimit","type":"uint64"}],"name":"updateTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
7f02c68af0bb14000000000000000009c4000000000000001e000000000000000060085577030d98d59a9600000000000000000000000000000000001e600955600a80546001600160801b03191661270f1790556101006040526050608081815290620039c760a03980516200007e91600c9160209091019062000193565b506011805462ffffff191690553480156200009857600080fd5b50604080518082018252600a8152694d657461576f6c76657360b01b6020808301918252835180850190945260028452614d5760f01b908401528151919291620000e59160009162000193565b508051620000fb90600190602084019062000193565b50506006805460ff1916905550620001133362000130565b6200012a60076200018a60201b620022cc1760201c565b62000276565b600680546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80546001019055565b828054620001a19062000239565b90600052602060002090601f016020900481019282620001c5576000855562000210565b82601f10620001e057805160ff191683800117855562000210565b8280016001018555821562000210579182015b8281111562000210578251825591602001919060010190620001f3565b506200021e92915062000222565b5090565b5b808211156200021e576000815560010162000223565b600181811c908216806200024e57607f821691505b602082108114156200027057634e487b7160e01b600052602260045260246000fd5b50919050565b61374180620002866000396000f3fe6080604052600436106102db5760003560e01c806370a0823111610184578063a44b47f7116100d6578063b88d4fde1161008a578063e985e9c511610064578063e985e9c5146107f0578063f2fde38b14610839578063f7d1d8f21461085957600080fd5b8063b88d4fde14610790578063c87b56dd146107b0578063e1e5f246146107d057600080fd5b8063a9059cbb116100bb578063a9059cbb1461074a578063a957ccd51461075d578063b3c35fe11461077057600080fd5b8063a44b47f71461070c578063a475b5dd1461073557600080fd5b80637eccb63e1161013857806395d89b411161011257806395d89b41146106b75780639bd1eb57146106cc578063a22cb465146106ec57600080fd5b80637eccb63e146106605780638456cb591461067f5780638da5cb5b1461069457600080fd5b8063774f104f11610169578063774f104f146106135780637a0e7044146106265780637e7efe921461064657600080fd5b806370a08231146105d0578063715018a6146105fe57600080fd5b80633f4ba83a1161023d5780635c975abb116101f157806361bb9285116101cb57806361bb9285146105455780636352211e1461059b5780636c0360eb146105bb57600080fd5b80635c975abb146104f85780635c9fdd4c146105105780635f0e899a1461053057600080fd5b80634407d774116102225780634407d7741461046757806351830227146104b857806355f804b3146104d857600080fd5b80633f4ba83a1461043257806342842e0e1461044757600080fd5b8063095ea7b31161029457806323b872dd1161027957806323b872dd146103ea57806324825fac1461040a5780632b3ef6f01461041f57600080fd5b8063095ea7b3146103a8578063237c37f2146103ca57600080fd5b806306fdde03116102c557806306fdde0314610339578063081812fc1461035b578063081c8c441461039357600080fd5b80621ce9de146102e057806301ffc9a714610309575b600080fd5b6102f36102ee366004613363565b610879565b6040516103009190613465565b60405180910390f35b34801561031557600080fd5b50610329610324366004613285565b610c96565b6040519015158152602001610300565b34801561034557600080fd5b5061034e610d77565b60405161030091906134a9565b34801561036757600080fd5b5061037b610376366004613363565b610e09565b6040516001600160a01b039091168152602001610300565b34801561039f57600080fd5b5061034e610eaf565b3480156103b457600080fd5b506103c86103c336600461302f565b610f3d565b005b3480156103d657600080fd5b506103c86103e536600461337c565b61106f565b3480156103f657600080fd5b506103c8610405366004613094565b611116565b34801561041657600080fd5b506103c861119d565b6102f361042d366004613363565b611211565b34801561043e57600080fd5b506103c86112cb565b34801561045357600080fd5b506103c8610462366004613094565b611335565b34801561047357600080fd5b5060095461049790600160801b90046fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610300565b3480156104c457600080fd5b506011546103299062010000900460ff1681565b3480156104e457600080fd5b506103c86104f33660046132bf565b611350565b34801561050457600080fd5b5060065460ff16610329565b34801561051c57600080fd5b506103c861052b366004613331565b6113bc565b34801561053c57600080fd5b506103c8611456565b34801561055157600080fd5b50600854610582907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610300565b3480156105a757600080fd5b5061037b6105b6366004613363565b6114f0565b3480156105c757600080fd5b5061034e61157b565b3480156105dc57600080fd5b506105f06105eb366004613012565b611588565b604051908152602001610300565b34801561060a57600080fd5b506103c8611622565b6105f0610621366004613363565b61168c565b34801561063257600080fd5b506103c861064136600461337c565b611761565b34801561065257600080fd5b506011546103299060ff1681565b34801561066c57600080fd5b5060115461032990610100900460ff1681565b34801561068b57600080fd5b506103c8611803565b3480156106a057600080fd5b5060065461010090046001600160a01b031661037b565b3480156106c357600080fd5b5061034e61186b565b3480156106d857600080fd5b506103c86106e73660046131cc565b61187a565b3480156106f857600080fd5b506103c8610707366004613199565b611946565b34801561071857600080fd5b50600a54610497906fffffffffffffffffffffffffffffffff1681565b34801561074157600080fd5b506103c8611951565b6103c861075836600461302f565b611a39565b6102f361076b366004613363565b611b56565b34801561077c57600080fd5b506103c861078b36600461337c565b611df3565b34801561079c57600080fd5b506103c86107ab3660046130d5565b611e8f565b3480156107bc57600080fd5b5061034e6107cb366004613363565b611f1d565b3480156107dc57600080fd5b506103c86107eb36600461337c565b6120a7565b3480156107fc57600080fd5b5061032961080b36600461305b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561084557600080fd5b506103c8610854366004613012565b612141565b34801561086557600080fd5b506103c8610874366004613331565b612229565b606061088760065460ff1690565b156108d95760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600082116109295760405162461bcd60e51b815260206004820152600f60248201527f4d696e74206174206c656173742031000000000000000000000000000000000060448201526064016108d0565b60115460ff1661097b5760405162461bcd60e51b815260206004820152601960248201527f69735072656d696e745374616765206e6f74206163746976650000000000000060448201526064016108d0565b3360009081526010602052604090205460ff1615156001146109df5760405162461bcd60e51b815260206004820181905260248201527f55736572206e6f742057686974656c697374656420666f72207072654d696e7460448201526064016108d0565b600854336000908152600d60205260409020546801000000000000000090910467ffffffffffffffff1690610a159084906134ed565b1115610a895760405162461bcd60e51b815260206004820152602260248201527f42617463682065786365656473205072656d696e74204c696d69742f57616c6c60448201527f657400000000000000000000000000000000000000000000000000000000000060648201526084016108d0565b60085467ffffffffffffffff600160801b8204811691610aab918591166134ed565b10610af85760405162461bcd60e51b815260206004820152601c60248201527f42617463682065786365656473205072656d696e7420537570706c790000000060448201526064016108d0565b600854610b2c9083907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1661357d565b3414610b7a5760405162461bcd60e51b815260206004820152600f60248201527f496e636f7272656374205072696365000000000000000000000000000000000060448201526064016108d0565b60008267ffffffffffffffff811115610b9557610b956136b2565b604051908082528060200260200182016040528015610bbe578160200160208202803683370190505b509050610bca836122d5565b336000908152600d6020526040812080549293508592909190610bee9084906134ed565b909155505060088054849190600090610c1290849067ffffffffffffffff16613505565b82546101009290920a67ffffffffffffffff818102199093169183160217909155600854600160801b810482169116109050610c905760405162461bcd60e51b815260206004820152601160248201527f547279204d696e74696e6720466577657200000000000000000000000000000060448201526064016108d0565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610d2957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610c905750507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b606060008054610d8690613606565b80601f0160208091040260200160405190810160405280929190818152602001828054610db290613606565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610e935760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016108d0565b506000908152600460205260409020546001600160a01b031690565b600c8054610ebc90613606565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890613606565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b505050505081565b6000610f48826114f0565b9050806001600160a01b0316836001600160a01b03161415610fd25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016108d0565b336001600160a01b0382161480610fee5750610fee813361080b565b6110605760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108d0565b61106a83836123bc565b505050565b6006546001600160a01b036101009091041633146110cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6008805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6111203382612437565b6111925760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016108d0565b61106a83838361253f565b6006546001600160a01b036101009091041633146111fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6011805460ff19811660ff90911615179055565b6006546060906001600160a01b036101009091041633146112745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60008267ffffffffffffffff81111561128f5761128f6136b2565b6040519080825280602002602001820160405280156112b8578160200160208202803683370190505b5090506112c4836122d5565b9392505050565b6006546001600160a01b0361010090910416331461132b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b611333612719565b565b61106a83838360405180602001604052806000815250611e8f565b6006546001600160a01b036101009091041633146113b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b61106a600b8383612f82565b6006546001600160a01b0361010090910416331461141c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b61142d8166038d7ea4c68000613545565b600980546fffffffffffffffffffffffffffffffff928316600160801b02921691909117905550565b6006546001600160a01b036101009091041633146114b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff81166101009182900460ff1615909102179055565b6000818152600260205260408120546001600160a01b031680610c905760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016108d0565b600b8054610ebc90613606565b60006001600160a01b0382166116065760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016108d0565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b036101009091041633146116825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b61133360006127b5565b6006546000906001600160a01b036101009091041633146116ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6000828152600f60205260409020546001600160a01b0316156117545760405162461bcd60e51b815260206004820152601460248201527f746f6b656e20616c7265616479204d696e74656400000000000000000000000060448201526064016108d0565b61175d82612826565b5090565b6006546001600160a01b036101009091041633146117c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6008805467ffffffffffffffff909216600160801b027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055565b6006546001600160a01b036101009091041633146118635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6113336128c2565b606060018054610d8690613606565b6006546001600160a01b036101009091041633146118da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60005b8151811015611942576001601060008484815181106118fe576118fe61369c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061193a81613641565b9150506118dd565b5050565b61194233838361294a565b6006546001600160a01b036101009091041633146119b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60115462010000900460ff1615611a0a5760405162461bcd60e51b815260206004820152601060248201527f416c72656164792072657665616c65640000000000000000000000000000000060448201526064016108d0565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055565b6006546001600160a01b03610100909104163314611a995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b600081611aa7575047611aaa565b50805b600080846001600160a01b03168360405160006040518083038185875af1925050503d8060008114611af8576040519150601f19603f3d011682016040523d82523d6000602084013e611afd565b606091505b509150915081611b4f5760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e6420457468657200000000000000000000000060448201526064016108d0565b5050505050565b6060611b6460065460ff1690565b15611bb15760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108d0565b60008211611c015760405162461bcd60e51b815260206004820152600f60248201527f4d696e74206174206c656173742031000000000000000000000000000000000060448201526064016108d0565b601154610100900460ff16611c585760405162461bcd60e51b815260206004820152601660248201527f5075626c6963204d696e74206e6f74206163746976650000000000000000000060448201526064016108d0565b600954336000908152600e60205260409020546fffffffffffffffffffffffffffffffff90911690611c8b9084906134ed565b10611cfe5760405162461bcd60e51b815260206004820152602660248201527f42617463682065786365656473205075626c6963204d696e74204c696d69742f60448201527f57616c6c6574000000000000000000000000000000000000000000000000000060648201526084016108d0565b600954611d25908390600160801b90046fffffffffffffffffffffffffffffffff1661357d565b3414611d735760405162461bcd60e51b815260206004820152600f60248201527f496e636f7272656374205072696365000000000000000000000000000000000060448201526064016108d0565b60008267ffffffffffffffff811115611d8e57611d8e6136b2565b604051908082528060200260200182016040528015611db7578160200160208202803683370190505b509050611dc3836122d5565b336000908152600e6020526040812080549293508592909190611de79084906134ed565b90915550909392505050565b6006546001600160a01b03610100909104163314611e535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b611e648166038d7ea4c6800061359c565b600860186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b611e993383612437565b611f0b5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016108d0565b611f1784848484612a19565b50505050565b6000818152600260205260409020546060906001600160a01b0316611faa5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016108d0565b60115462010000900460ff1661204c57600c8054611fc790613606565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff390613606565b80156120405780601f1061201557610100808354040283529160200191612040565b820191906000526020600020905b81548152906001019060200180831161202357829003601f168201915b50505050509050919050565b6000612056612aa2565b9050600081511161207657604051806020016040528060008152506112c4565b8061208084612ab1565b6040516020016120919291906133d2565b6040516020818303038152906040529392505050565b6006546001600160a01b036101009091041633146121075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b600a80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001667ffffffffffffffff909216919091179055565b6006546001600160a01b036101009091041633146121a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6001600160a01b03811661221d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b612226816127b5565b50565b6006546001600160a01b036101009091041633146122895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b600980547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b80546001019055565b606060008267ffffffffffffffff8111156122f2576122f26136b2565b60405190808252806020026020018201604052801561231b578160200160208202803683370190505b50905060005b838110156123b5576000600f8161233760075490565b81526020810191909152604001600020546001600160a01b03161461236957612364600780546001019055565b612321565b60075482828151811061237e5761237e61369c565b60209081029190910101528061239381613641565b9150506123a76123a260075490565b612826565b612364600780546001019055565b5092915050565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906123fe826114f0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166124c15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016108d0565b60006124cc836114f0565b9050806001600160a01b0316846001600160a01b031614806125075750836001600160a01b03166124fc84610e09565b6001600160a01b0316145b8061253757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612552826114f0565b6001600160a01b0316146125ce5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016108d0565b6001600160a01b0382166126495760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108d0565b6126546000826123bc565b6001600160a01b038316600090815260036020526040812080546001929061267d9084906135c3565b90915550506001600160a01b03821660009081526003602052604081208054600192906126ab9084906134ed565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60065460ff1661276b5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016108d0565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600680546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546fffffffffffffffffffffffffffffffff1681111561288a5760405162461bcd60e51b815260206004820152601660248201527f546f74616c20537570706c79204578686175737465640000000000000000000060448201526064016108d0565b6000818152600f60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916339081179091556122269082612be3565b60065460ff16156129155760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108d0565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127983390565b816001600160a01b0316836001600160a01b031614156129ac5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d0565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612a2484848461253f565b612a3084848484612bfd565b611f175760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d0565b6060600b8054610d8690613606565b606081612af157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612b1b5780612b0581613641565b9150612b149050600a83613531565b9150612af5565b60008167ffffffffffffffff811115612b3657612b366136b2565b6040519080825280601f01601f191660200182016040528015612b60576020820181803683370190505b5090505b841561253757612b756001836135c3565b9150612b82600a8661365c565b612b8d9060306134ed565b60f81b818381518110612ba257612ba261369c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612bdc600a86613531565b9450612b64565b611942828260405180602001604052806000815250612daa565b60006001600160a01b0384163b15612d9f576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612c5a903390899088908890600401613429565b602060405180830381600087803b158015612c7457600080fd5b505af1925050508015612ca4575060408051601f3d908101601f19168201909252612ca1918101906132a2565b60015b612d54573d808015612cd2576040519150601f19603f3d011682016040523d82523d6000602084013e612cd7565b606091505b508051612d4c5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d0565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612537565b506001949350505050565b612db48383612e33565b612dc16000848484612bfd565b61106a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d0565b6001600160a01b038216612e895760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d0565b6000818152600260205260409020546001600160a01b031615612eee5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d0565b6001600160a01b0382166000908152600360205260408120805460019290612f179084906134ed565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612f8e90613606565b90600052602060002090601f016020900481019282612fb05760008555612ff6565b82601f10612fc95782800160ff19823516178555612ff6565b82800160010185558215612ff6579182015b82811115612ff6578235825591602001919060010190612fdb565b5061175d9291505b8082111561175d5760008155600101612ffe565b60006020828403121561302457600080fd5b81356112c4816136c8565b6000806040838503121561304257600080fd5b823561304d816136c8565b946020939093013593505050565b6000806040838503121561306e57600080fd5b8235613079816136c8565b91506020830135613089816136c8565b809150509250929050565b6000806000606084860312156130a957600080fd5b83356130b4816136c8565b925060208401356130c4816136c8565b929592945050506040919091013590565b600080600080608085870312156130eb57600080fd5b84356130f6816136c8565b9350602085810135613107816136c8565b935060408601359250606086013567ffffffffffffffff8082111561312b57600080fd5b818801915088601f83011261313f57600080fd5b813581811115613151576131516136b2565b61316384601f19601f840116016134bc565b9150808252898482850101111561317957600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156131ac57600080fd5b82356131b7816136c8565b91506020830135801515811461308957600080fd5b600060208083850312156131df57600080fd5b823567ffffffffffffffff808211156131f757600080fd5b818501915085601f83011261320b57600080fd5b81358181111561321d5761321d6136b2565b8060051b915061322e8483016134bc565b8181528481019084860184860187018a101561324957600080fd5b600095505b838610156132785780359450613263856136c8565b8483526001959095019491860191860161324e565b5098975050505050505050565b60006020828403121561329757600080fd5b81356112c4816136dd565b6000602082840312156132b457600080fd5b81516112c4816136dd565b600080602083850312156132d257600080fd5b823567ffffffffffffffff808211156132ea57600080fd5b818501915085601f8301126132fe57600080fd5b81358181111561330d57600080fd5b86602082850101111561331f57600080fd5b60209290920196919550909350505050565b60006020828403121561334357600080fd5b81356fffffffffffffffffffffffffffffffff811681146112c457600080fd5b60006020828403121561337557600080fd5b5035919050565b60006020828403121561338e57600080fd5b813567ffffffffffffffff811681146112c457600080fd5b600081518084526133be8160208601602086016135da565b601f01601f19169290920160200192915050565b600083516133e48184602088016135da565b8351908301906133f88183602088016135da565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261345b60808301846133a6565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561349d57835183529284019291840191600101613481565b50909695505050505050565b6020815260006112c460208301846133a6565b604051601f8201601f1916810167ffffffffffffffff811182821017156134e5576134e56136b2565b604052919050565b6000821982111561350057613500613670565b500190565b600067ffffffffffffffff80831681851680830382111561352857613528613670565b01949350505050565b60008261354057613540613686565b500490565b60006fffffffffffffffffffffffffffffffff8083168185168183048111821515161561357457613574613670565b02949350505050565b600081600019048311821515161561359757613597613670565b500290565b600067ffffffffffffffff8083168185168183048111821515161561357457613574613670565b6000828210156135d5576135d5613670565b500390565b60005b838110156135f55781810151838201526020016135dd565b83811115611f175750506000910152565b600181811c9082168061361a57607f821691505b6020821081141561363b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561365557613655613670565b5060010190565b60008261366b5761366b613686565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461222657600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461222657600080fdfea26469706673582212207e06d28bdd430135b8a06cbea9cdb637a8df9bbc31614fe5bcdfb201e1ef09e064736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d56745157614a57724a3254713945394d53374d4774554768466934414d33334651455155657a574c46787a6b
Deployed Bytecode
0x6080604052600436106102db5760003560e01c806370a0823111610184578063a44b47f7116100d6578063b88d4fde1161008a578063e985e9c511610064578063e985e9c5146107f0578063f2fde38b14610839578063f7d1d8f21461085957600080fd5b8063b88d4fde14610790578063c87b56dd146107b0578063e1e5f246146107d057600080fd5b8063a9059cbb116100bb578063a9059cbb1461074a578063a957ccd51461075d578063b3c35fe11461077057600080fd5b8063a44b47f71461070c578063a475b5dd1461073557600080fd5b80637eccb63e1161013857806395d89b411161011257806395d89b41146106b75780639bd1eb57146106cc578063a22cb465146106ec57600080fd5b80637eccb63e146106605780638456cb591461067f5780638da5cb5b1461069457600080fd5b8063774f104f11610169578063774f104f146106135780637a0e7044146106265780637e7efe921461064657600080fd5b806370a08231146105d0578063715018a6146105fe57600080fd5b80633f4ba83a1161023d5780635c975abb116101f157806361bb9285116101cb57806361bb9285146105455780636352211e1461059b5780636c0360eb146105bb57600080fd5b80635c975abb146104f85780635c9fdd4c146105105780635f0e899a1461053057600080fd5b80634407d774116102225780634407d7741461046757806351830227146104b857806355f804b3146104d857600080fd5b80633f4ba83a1461043257806342842e0e1461044757600080fd5b8063095ea7b31161029457806323b872dd1161027957806323b872dd146103ea57806324825fac1461040a5780632b3ef6f01461041f57600080fd5b8063095ea7b3146103a8578063237c37f2146103ca57600080fd5b806306fdde03116102c557806306fdde0314610339578063081812fc1461035b578063081c8c441461039357600080fd5b80621ce9de146102e057806301ffc9a714610309575b600080fd5b6102f36102ee366004613363565b610879565b6040516103009190613465565b60405180910390f35b34801561031557600080fd5b50610329610324366004613285565b610c96565b6040519015158152602001610300565b34801561034557600080fd5b5061034e610d77565b60405161030091906134a9565b34801561036757600080fd5b5061037b610376366004613363565b610e09565b6040516001600160a01b039091168152602001610300565b34801561039f57600080fd5b5061034e610eaf565b3480156103b457600080fd5b506103c86103c336600461302f565b610f3d565b005b3480156103d657600080fd5b506103c86103e536600461337c565b61106f565b3480156103f657600080fd5b506103c8610405366004613094565b611116565b34801561041657600080fd5b506103c861119d565b6102f361042d366004613363565b611211565b34801561043e57600080fd5b506103c86112cb565b34801561045357600080fd5b506103c8610462366004613094565b611335565b34801561047357600080fd5b5060095461049790600160801b90046fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610300565b3480156104c457600080fd5b506011546103299062010000900460ff1681565b3480156104e457600080fd5b506103c86104f33660046132bf565b611350565b34801561050457600080fd5b5060065460ff16610329565b34801561051c57600080fd5b506103c861052b366004613331565b6113bc565b34801561053c57600080fd5b506103c8611456565b34801561055157600080fd5b50600854610582907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610300565b3480156105a757600080fd5b5061037b6105b6366004613363565b6114f0565b3480156105c757600080fd5b5061034e61157b565b3480156105dc57600080fd5b506105f06105eb366004613012565b611588565b604051908152602001610300565b34801561060a57600080fd5b506103c8611622565b6105f0610621366004613363565b61168c565b34801561063257600080fd5b506103c861064136600461337c565b611761565b34801561065257600080fd5b506011546103299060ff1681565b34801561066c57600080fd5b5060115461032990610100900460ff1681565b34801561068b57600080fd5b506103c8611803565b3480156106a057600080fd5b5060065461010090046001600160a01b031661037b565b3480156106c357600080fd5b5061034e61186b565b3480156106d857600080fd5b506103c86106e73660046131cc565b61187a565b3480156106f857600080fd5b506103c8610707366004613199565b611946565b34801561071857600080fd5b50600a54610497906fffffffffffffffffffffffffffffffff1681565b34801561074157600080fd5b506103c8611951565b6103c861075836600461302f565b611a39565b6102f361076b366004613363565b611b56565b34801561077c57600080fd5b506103c861078b36600461337c565b611df3565b34801561079c57600080fd5b506103c86107ab3660046130d5565b611e8f565b3480156107bc57600080fd5b5061034e6107cb366004613363565b611f1d565b3480156107dc57600080fd5b506103c86107eb36600461337c565b6120a7565b3480156107fc57600080fd5b5061032961080b36600461305b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561084557600080fd5b506103c8610854366004613012565b612141565b34801561086557600080fd5b506103c8610874366004613331565b612229565b606061088760065460ff1690565b156108d95760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600082116109295760405162461bcd60e51b815260206004820152600f60248201527f4d696e74206174206c656173742031000000000000000000000000000000000060448201526064016108d0565b60115460ff1661097b5760405162461bcd60e51b815260206004820152601960248201527f69735072656d696e745374616765206e6f74206163746976650000000000000060448201526064016108d0565b3360009081526010602052604090205460ff1615156001146109df5760405162461bcd60e51b815260206004820181905260248201527f55736572206e6f742057686974656c697374656420666f72207072654d696e7460448201526064016108d0565b600854336000908152600d60205260409020546801000000000000000090910467ffffffffffffffff1690610a159084906134ed565b1115610a895760405162461bcd60e51b815260206004820152602260248201527f42617463682065786365656473205072656d696e74204c696d69742f57616c6c60448201527f657400000000000000000000000000000000000000000000000000000000000060648201526084016108d0565b60085467ffffffffffffffff600160801b8204811691610aab918591166134ed565b10610af85760405162461bcd60e51b815260206004820152601c60248201527f42617463682065786365656473205072656d696e7420537570706c790000000060448201526064016108d0565b600854610b2c9083907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1661357d565b3414610b7a5760405162461bcd60e51b815260206004820152600f60248201527f496e636f7272656374205072696365000000000000000000000000000000000060448201526064016108d0565b60008267ffffffffffffffff811115610b9557610b956136b2565b604051908082528060200260200182016040528015610bbe578160200160208202803683370190505b509050610bca836122d5565b336000908152600d6020526040812080549293508592909190610bee9084906134ed565b909155505060088054849190600090610c1290849067ffffffffffffffff16613505565b82546101009290920a67ffffffffffffffff818102199093169183160217909155600854600160801b810482169116109050610c905760405162461bcd60e51b815260206004820152601160248201527f547279204d696e74696e6720466577657200000000000000000000000000000060448201526064016108d0565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610d2957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610c905750507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b606060008054610d8690613606565b80601f0160208091040260200160405190810160405280929190818152602001828054610db290613606565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610e935760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016108d0565b506000908152600460205260409020546001600160a01b031690565b600c8054610ebc90613606565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890613606565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b505050505081565b6000610f48826114f0565b9050806001600160a01b0316836001600160a01b03161415610fd25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016108d0565b336001600160a01b0382161480610fee5750610fee813361080b565b6110605760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108d0565b61106a83836123bc565b505050565b6006546001600160a01b036101009091041633146110cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6008805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6111203382612437565b6111925760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016108d0565b61106a83838361253f565b6006546001600160a01b036101009091041633146111fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6011805460ff19811660ff90911615179055565b6006546060906001600160a01b036101009091041633146112745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60008267ffffffffffffffff81111561128f5761128f6136b2565b6040519080825280602002602001820160405280156112b8578160200160208202803683370190505b5090506112c4836122d5565b9392505050565b6006546001600160a01b0361010090910416331461132b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b611333612719565b565b61106a83838360405180602001604052806000815250611e8f565b6006546001600160a01b036101009091041633146113b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b61106a600b8383612f82565b6006546001600160a01b0361010090910416331461141c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b61142d8166038d7ea4c68000613545565b600980546fffffffffffffffffffffffffffffffff928316600160801b02921691909117905550565b6006546001600160a01b036101009091041633146114b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff81166101009182900460ff1615909102179055565b6000818152600260205260408120546001600160a01b031680610c905760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016108d0565b600b8054610ebc90613606565b60006001600160a01b0382166116065760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016108d0565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b036101009091041633146116825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b61133360006127b5565b6006546000906001600160a01b036101009091041633146116ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6000828152600f60205260409020546001600160a01b0316156117545760405162461bcd60e51b815260206004820152601460248201527f746f6b656e20616c7265616479204d696e74656400000000000000000000000060448201526064016108d0565b61175d82612826565b5090565b6006546001600160a01b036101009091041633146117c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6008805467ffffffffffffffff909216600160801b027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055565b6006546001600160a01b036101009091041633146118635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6113336128c2565b606060018054610d8690613606565b6006546001600160a01b036101009091041633146118da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60005b8151811015611942576001601060008484815181106118fe576118fe61369c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061193a81613641565b9150506118dd565b5050565b61194233838361294a565b6006546001600160a01b036101009091041633146119b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60115462010000900460ff1615611a0a5760405162461bcd60e51b815260206004820152601060248201527f416c72656164792072657665616c65640000000000000000000000000000000060448201526064016108d0565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055565b6006546001600160a01b03610100909104163314611a995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b600081611aa7575047611aaa565b50805b600080846001600160a01b03168360405160006040518083038185875af1925050503d8060008114611af8576040519150601f19603f3d011682016040523d82523d6000602084013e611afd565b606091505b509150915081611b4f5760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e6420457468657200000000000000000000000060448201526064016108d0565b5050505050565b6060611b6460065460ff1690565b15611bb15760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108d0565b60008211611c015760405162461bcd60e51b815260206004820152600f60248201527f4d696e74206174206c656173742031000000000000000000000000000000000060448201526064016108d0565b601154610100900460ff16611c585760405162461bcd60e51b815260206004820152601660248201527f5075626c6963204d696e74206e6f74206163746976650000000000000000000060448201526064016108d0565b600954336000908152600e60205260409020546fffffffffffffffffffffffffffffffff90911690611c8b9084906134ed565b10611cfe5760405162461bcd60e51b815260206004820152602660248201527f42617463682065786365656473205075626c6963204d696e74204c696d69742f60448201527f57616c6c6574000000000000000000000000000000000000000000000000000060648201526084016108d0565b600954611d25908390600160801b90046fffffffffffffffffffffffffffffffff1661357d565b3414611d735760405162461bcd60e51b815260206004820152600f60248201527f496e636f7272656374205072696365000000000000000000000000000000000060448201526064016108d0565b60008267ffffffffffffffff811115611d8e57611d8e6136b2565b604051908082528060200260200182016040528015611db7578160200160208202803683370190505b509050611dc3836122d5565b336000908152600e6020526040812080549293508592909190611de79084906134ed565b90915550909392505050565b6006546001600160a01b03610100909104163314611e535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b611e648166038d7ea4c6800061359c565b600860186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b611e993383612437565b611f0b5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016108d0565b611f1784848484612a19565b50505050565b6000818152600260205260409020546060906001600160a01b0316611faa5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016108d0565b60115462010000900460ff1661204c57600c8054611fc790613606565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff390613606565b80156120405780601f1061201557610100808354040283529160200191612040565b820191906000526020600020905b81548152906001019060200180831161202357829003601f168201915b50505050509050919050565b6000612056612aa2565b9050600081511161207657604051806020016040528060008152506112c4565b8061208084612ab1565b6040516020016120919291906133d2565b6040516020818303038152906040529392505050565b6006546001600160a01b036101009091041633146121075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b600a80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001667ffffffffffffffff909216919091179055565b6006546001600160a01b036101009091041633146121a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6001600160a01b03811661221d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b612226816127b5565b50565b6006546001600160a01b036101009091041633146122895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b600980547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b80546001019055565b606060008267ffffffffffffffff8111156122f2576122f26136b2565b60405190808252806020026020018201604052801561231b578160200160208202803683370190505b50905060005b838110156123b5576000600f8161233760075490565b81526020810191909152604001600020546001600160a01b03161461236957612364600780546001019055565b612321565b60075482828151811061237e5761237e61369c565b60209081029190910101528061239381613641565b9150506123a76123a260075490565b612826565b612364600780546001019055565b5092915050565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906123fe826114f0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166124c15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016108d0565b60006124cc836114f0565b9050806001600160a01b0316846001600160a01b031614806125075750836001600160a01b03166124fc84610e09565b6001600160a01b0316145b8061253757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612552826114f0565b6001600160a01b0316146125ce5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016108d0565b6001600160a01b0382166126495760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108d0565b6126546000826123bc565b6001600160a01b038316600090815260036020526040812080546001929061267d9084906135c3565b90915550506001600160a01b03821660009081526003602052604081208054600192906126ab9084906134ed565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60065460ff1661276b5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016108d0565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600680546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546fffffffffffffffffffffffffffffffff1681111561288a5760405162461bcd60e51b815260206004820152601660248201527f546f74616c20537570706c79204578686175737465640000000000000000000060448201526064016108d0565b6000818152600f60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916339081179091556122269082612be3565b60065460ff16156129155760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108d0565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127983390565b816001600160a01b0316836001600160a01b031614156129ac5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d0565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612a2484848461253f565b612a3084848484612bfd565b611f175760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d0565b6060600b8054610d8690613606565b606081612af157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612b1b5780612b0581613641565b9150612b149050600a83613531565b9150612af5565b60008167ffffffffffffffff811115612b3657612b366136b2565b6040519080825280601f01601f191660200182016040528015612b60576020820181803683370190505b5090505b841561253757612b756001836135c3565b9150612b82600a8661365c565b612b8d9060306134ed565b60f81b818381518110612ba257612ba261369c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612bdc600a86613531565b9450612b64565b611942828260405180602001604052806000815250612daa565b60006001600160a01b0384163b15612d9f576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612c5a903390899088908890600401613429565b602060405180830381600087803b158015612c7457600080fd5b505af1925050508015612ca4575060408051601f3d908101601f19168201909252612ca1918101906132a2565b60015b612d54573d808015612cd2576040519150601f19603f3d011682016040523d82523d6000602084013e612cd7565b606091505b508051612d4c5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d0565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612537565b506001949350505050565b612db48383612e33565b612dc16000848484612bfd565b61106a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d0565b6001600160a01b038216612e895760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d0565b6000818152600260205260409020546001600160a01b031615612eee5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d0565b6001600160a01b0382166000908152600360205260408120805460019290612f179084906134ed565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612f8e90613606565b90600052602060002090601f016020900481019282612fb05760008555612ff6565b82601f10612fc95782800160ff19823516178555612ff6565b82800160010185558215612ff6579182015b82811115612ff6578235825591602001919060010190612fdb565b5061175d9291505b8082111561175d5760008155600101612ffe565b60006020828403121561302457600080fd5b81356112c4816136c8565b6000806040838503121561304257600080fd5b823561304d816136c8565b946020939093013593505050565b6000806040838503121561306e57600080fd5b8235613079816136c8565b91506020830135613089816136c8565b809150509250929050565b6000806000606084860312156130a957600080fd5b83356130b4816136c8565b925060208401356130c4816136c8565b929592945050506040919091013590565b600080600080608085870312156130eb57600080fd5b84356130f6816136c8565b9350602085810135613107816136c8565b935060408601359250606086013567ffffffffffffffff8082111561312b57600080fd5b818801915088601f83011261313f57600080fd5b813581811115613151576131516136b2565b61316384601f19601f840116016134bc565b9150808252898482850101111561317957600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156131ac57600080fd5b82356131b7816136c8565b91506020830135801515811461308957600080fd5b600060208083850312156131df57600080fd5b823567ffffffffffffffff808211156131f757600080fd5b818501915085601f83011261320b57600080fd5b81358181111561321d5761321d6136b2565b8060051b915061322e8483016134bc565b8181528481019084860184860187018a101561324957600080fd5b600095505b838610156132785780359450613263856136c8565b8483526001959095019491860191860161324e565b5098975050505050505050565b60006020828403121561329757600080fd5b81356112c4816136dd565b6000602082840312156132b457600080fd5b81516112c4816136dd565b600080602083850312156132d257600080fd5b823567ffffffffffffffff808211156132ea57600080fd5b818501915085601f8301126132fe57600080fd5b81358181111561330d57600080fd5b86602082850101111561331f57600080fd5b60209290920196919550909350505050565b60006020828403121561334357600080fd5b81356fffffffffffffffffffffffffffffffff811681146112c457600080fd5b60006020828403121561337557600080fd5b5035919050565b60006020828403121561338e57600080fd5b813567ffffffffffffffff811681146112c457600080fd5b600081518084526133be8160208601602086016135da565b601f01601f19169290920160200192915050565b600083516133e48184602088016135da565b8351908301906133f88183602088016135da565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261345b60808301846133a6565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561349d57835183529284019291840191600101613481565b50909695505050505050565b6020815260006112c460208301846133a6565b604051601f8201601f1916810167ffffffffffffffff811182821017156134e5576134e56136b2565b604052919050565b6000821982111561350057613500613670565b500190565b600067ffffffffffffffff80831681851680830382111561352857613528613670565b01949350505050565b60008261354057613540613686565b500490565b60006fffffffffffffffffffffffffffffffff8083168185168183048111821515161561357457613574613670565b02949350505050565b600081600019048311821515161561359757613597613670565b500290565b600067ffffffffffffffff8083168185168183048111821515161561357457613574613670565b6000828210156135d5576135d5613670565b500390565b60005b838110156135f55781810151838201526020016135dd565b83811115611f175750506000910152565b600181811c9082168061361a57607f821691505b6020821081141561363b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561365557613655613670565b5060010190565b60008261366b5761366b613686565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461222657600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461222657600080fdfea26469706673582212207e06d28bdd430135b8a06cbea9cdb637a8df9bbc31614fe5bcdfb201e1ef09e064736f6c63430008070033
Deployed Bytecode Sourcemap
188:7908:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4850:1256;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1490:300:4;;;;;;;;;;-1:-1:-1;1490:300:4;;;;;:::i;:::-;;:::i;:::-;;;9001:14:13;;8994:22;8976:41;;8964:2;8949:18;1490:300:4;8836:187:13;2408:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3919:217::-;;;;;;;;;;-1:-1:-1;3919:217:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7616:55:13;;;7598:74;;7586:2;7571:18;3919:217:4;7452:226:13;792:122:9;;;;;;;;;;;;;:::i;3457:401:4:-;;;;;;;;;;-1:-1:-1;3457:401:4;;;;;:::i;:::-;;:::i;:::-;;2088:171:9;;;;;;;;;;-1:-1:-1;2088:171:9;;;;;:::i;:::-;;:::i;4646:330:4:-;;;;;;;;;;-1:-1:-1;4646:330:4;;;;;:::i;:::-;;:::i;2770:114:9:-;;;;;;;;;;;;;:::i;7212:229::-;;;;;;:::i;:::-;;:::i;3092:65::-;;;;;;;;;;;;;:::i;5042:179:4:-;;;;;;;;;;-1:-1:-1;5042:179:4;;;;;:::i;:::-;;:::i;630:48:9:-;;;;;;;;;;-1:-1:-1;630:48:9;;;;-1:-1:-1;;;630:48:9;;;;;;;;;21165:34:13;21153:47;;;21135:66;;21123:2;21108:18;630:48:9;20989:218:13;1282:28:9;;;;;;;;;;-1:-1:-1;1282:28:9;;;;;;;;;;;3301:112;;;;;;;;;;-1:-1:-1;3301:112:9;;;;;:::i;:::-;;:::i;1091:84:11:-;;;;;;;;;;-1:-1:-1;1161:7:11;;;;1091:84;;1930:150:9;;;;;;;;;;-1:-1:-1;1930:150:9;;;;;:::i;:::-;;:::i;2892:123::-;;;;;;;;;;;;;:::i;521:43::-;;;;;;;;;;-1:-1:-1;521:43:9;;;;;;;;;;;;;;21568:18:13;21556:31;;;21538:50;;21526:2;21511:18;521:43:9;21394:200:13;2111:235:4;;;;;;;;;;-1:-1:-1;2111:235:4;;;;;:::i;:::-;;:::i;764:21:9:-;;;;;;;;;;;;;:::i;1849:205:4:-;;;;;;;;;;-1:-1:-1;1849:205:4;;;;;:::i;:::-;;:::i;:::-;;;21358:25:13;;;21346:2;21331:18;1849:205:4;21212:177:13;1661:101:10;;;;;;;;;;;;;:::i;6929:277:9:-;;;;;;:::i;:::-;;:::i;2453:179::-;;;;;;;;;;-1:-1:-1;2453:179:9;;;;;:::i;:::-;;:::i;1185:40::-;;;;;;;;;;-1:-1:-1;1185:40:9;;;;;;;;1232:43;;;;;;;;;;-1:-1:-1;1232:43:9;;;;;;;;;;;3023:61;;;;;;;;;;;;;:::i;1029:85:10:-;;;;;;;;;;-1:-1:-1;1101:6:10;;;;;-1:-1:-1;;;;;1101:6:10;1029:85;;2570:102:4;;;;;;;;;;;;;:::i;1414:241:9:-;;;;;;;;;;-1:-1:-1;1414:241:9;;;;;:::i;:::-;;:::i;4203:153:4:-;;;;;;;;;;-1:-1:-1;4203:153:4;;;;;:::i;:::-;;:::i;687:33:9:-;;;;;;;;;;-1:-1:-1;687:33:9;;;;;;;;3165:128;;;;;;;;;;;;;:::i;7673:420::-;;;;;;:::i;:::-;;:::i;6114:807::-;;;;;;:::i;:::-;;:::i;1779:143::-;;;;;;;;;;-1:-1:-1;1779:143:9;;;;;:::i;:::-;;:::i;5287:320:4:-;;;;;;;;;;-1:-1:-1;5287:320:4;;;;;:::i;:::-;;:::i;3421:722:9:-;;;;;;;;;;-1:-1:-1;3421:722:9;;;;;:::i;:::-;;:::i;2640:122::-;;;;;;;;;;-1:-1:-1;2640:122:9;;;;;:::i;:::-;;:::i;4422:162:4:-;;;;;;;;;;-1:-1:-1;4422:162:4;;;;;:::i;:::-;-1:-1:-1;;;;;4542:25:4;;;4519:4;4542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4422:162;1911:198:10;;;;;;;;;;-1:-1:-1;1911:198:10;;;;;:::i;:::-;;:::i;2267:178:9:-;;;;;;;;;;-1:-1:-1;2267:178:9;;;;;:::i;:::-;;:::i;4850:1256::-;4966:16;1405:8:11;1161:7;;;;;1091:84;1405:8;1404:9;1396:38;;;;-1:-1:-1;;;1396:38:11;;14305:2:13;1396:38:11;;;14287:21:13;14344:2;14324:18;;;14317:30;14383:18;14363;;;14356:46;14419:18;;1396:38:11;;;;;;;;;5021:1:9::1;5008:10;:14;5000:42;;;::::0;-1:-1:-1;;;5000:42:9;;10222:2:13;5000:42:9::1;::::0;::::1;10204:21:13::0;10261:2;10241:18;;;10234:30;10300:17;10280:18;;;10273:45;10335:18;;5000:42:9::1;10020:339:13::0;5000:42:9::1;5061:20;::::0;::::1;;5053:58;;;::::0;-1:-1:-1;;;5053:58:9;;13951:2:13;5053:58:9::1;::::0;::::1;13933:21:13::0;13990:2;13970:18;;;13963:30;14029:27;14009:18;;;14002:55;14074:18;;5053:58:9::1;13749:349:13::0;5053:58:9::1;5168:10;5144:35;::::0;;;:23:::1;:35;::::0;;;;;::::1;;:43;;:35:::0;:43:::1;5122:125;;;::::0;-1:-1:-1;;;5122:125:9;;19648:2:13;5122:125:9::1;::::0;::::1;19630:21:13::0;;;19667:18;;;19660:30;19726:34;19706:18;;;19699:62;19778:18;;5122:125:9::1;19446:356:13::0;5122:125:9::1;5354:26;::::0;5308:10:::1;5281:38;::::0;;;:26:::1;:38;::::0;;;;;5354:26;;;::::1;;;::::0;5281:51:::1;::::0;5322:10;;5281:51:::1;:::i;:::-;5280:100;;5258:184;;;::::0;-1:-1:-1;;;5258:184:9;;11676:2:13;5258:184:9::1;::::0;::::1;11658:21:13::0;11715:2;11695:18;;;11688:30;11754:34;11734:18;;;11727:62;11825:4;11805:18;;;11798:32;11847:19;;5258:184:9::1;11474:398:13::0;5258:184:9::1;5511:28;::::0;::::1;-1:-1:-1::0;;;5511:28:9;::::1;::::0;::::1;::::0;5476:31:::1;::::0;5497:10;;5476:18:::1;:31;:::i;:::-;5475:64;5453:142;;;::::0;-1:-1:-1;;;5453:142:9;;20427:2:13;5453:142:9::1;::::0;::::1;20409:21:13::0;20466:2;20446:18;;;20439:30;20505;20485:18;;;20478:58;20553:18;;5453:142:9::1;20225:352:13::0;5453:142:9::1;5642:17;::::0;:30:::1;::::0;5662:10;;5642:17;;::::1;;;:30;:::i;:::-;5628:9;:45;5606:110;;;::::0;-1:-1:-1;;;5606:110:9;;15896:2:13;5606:110:9::1;::::0;::::1;15878:21:13::0;15935:2;15915:18;;;15908:30;15974:17;15954:18;;;15947:45;16009:18;;5606:110:9::1;15694:339:13::0;5606:110:9::1;5721:29;5767:10;5753:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;5753:25:9::1;;5721:57;;5804:21;5814:10;5804:9;:21::i;:::-;5865:10;5838:38;::::0;;;:26:::1;:38;::::0;;;;:52;;5789:36;;-1:-1:-1;5880:10:9;;5838:38;;;:52:::1;::::0;5880:10;;5838:52:::1;:::i;:::-;::::0;;;-1:-1:-1;;5901:18:9::1;:40:::0;;5930:10;;5901:18;::::1;::::0;:40:::1;::::0;5930:10;;5901:40:::1;;;:::i;:::-;::::0;;::::1;::::0;;;::::1;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;;;::::0;;;5995:28:::1;::::0;-1:-1:-1;;;5995:28:9;::::1;::::0;::::1;5974:18:::0;::::1;:49;::::0;-1:-1:-1;5952:116:9::1;;;::::0;-1:-1:-1;;;5952:116:9;;11330:2:13;5952:116:9::1;::::0;::::1;11312:21:13::0;11369:2;11349:18;;;11342:30;11408:19;11388:18;;;11381:47;11445:18;;5952:116:9::1;11128:341:13::0;5952:116:9::1;6086:12:::0;4850:1256;-1:-1:-1;;4850:1256:9:o;1490:300:4:-;1592:4;1627:40;;;1642:25;1627:40;;:104;;-1:-1:-1;1683:48:4;;;1698:33;1683:48;1627:104;:156;;;-1:-1:-1;;937:40:3;;952:25;937:40;;1490:300:4:o;2408:98::-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;3919:217::-;3995:7;7167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7167:16:4;4014:73;;;;-1:-1:-1;;;4014:73:4;;17297:2:13;4014:73:4;;;17279:21:13;17336:2;17316:18;;;17309:30;17375:34;17355:18;;;17348:62;17446:14;17426:18;;;17419:42;17478:19;;4014:73:4;17095:408:13;4014:73:4;-1:-1:-1;4105:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4105:24:4;;3919:217::o;792:122:9:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3457:401:4:-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;-1:-1:-1;;;;;3594:11:4;:2;-1:-1:-1;;;;;3594:11:4;;;3586:57;;;;-1:-1:-1;;;3586:57:4;;18897:2:13;3586:57:4;;;18879:21:13;18936:2;18916:18;;;18909:30;18975:34;18955:18;;;18948:62;19046:3;19026:18;;;19019:31;19067:19;;3586:57:4;18695:397:13;3586:57:4;719:10:1;-1:-1:-1;;;;;3675:21:4;;;;:62;;-1:-1:-1;3700:37:4;3717:5;719:10:1;4422:162:4;:::i;3700:37::-;3654:165;;;;-1:-1:-1;;;3654:165:4;;14650:2:13;3654:165:4;;;14632:21:13;14689:2;14669:18;;;14662:30;14728:34;14708:18;;;14701:62;14799:26;14779:18;;;14772:54;14843:19;;3654:165:4;14448:420:13;3654:165:4;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;2088:171:9:-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;2207:26:9::1;:44:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;2088:171::o;4646:330:4:-;4835:41;719:10:1;4868:7:4;4835:18;:41::i;:::-;4827:103;;;;-1:-1:-1;;;4827:103:4;;20009:2:13;4827:103:4;;;19991:21:13;20048:2;20028:18;;;20021:30;20087:34;20067:18;;;20060:62;20158:19;20138:18;;;20131:47;20195:19;;4827:103:4;19807:413:13;4827:103:4;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;2770:114:9:-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;2855:20:9::1;::::0;;-1:-1:-1;;2830:46:9;::::1;2855:20;::::0;;::::1;2854:21;2830:46;::::0;;2770:114::o;7212:229::-;1101:6:10;;7299:16:9;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;7325:29:9::1;7371:10;7357:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;7357:25:9::1;;7325:57;;7414:21;7424:10;7414:9;:21::i;:::-;7399:36:::0;7212:229;-1:-1:-1;;;7212:229:9:o;3092:65::-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;3139:10:9::1;:8;:10::i;:::-;3092:65::o:0;5042:179:4:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;3301:112:9:-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;3382:23:9::1;:7;3392:13:::0;;3382:23:::1;:::i;1930:150::-:0;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;2039:32:9::1;2062:9:::0;2039:20:::1;:32;:::i;:::-;2015:20;:57:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;2015:57:9::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;1930:150:9:o;2892:123::-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;2983:23:9::1;::::0;;2955:52;;::::1;2983:23;::::0;;;::::1;;;2982:24;2955:52:::0;;::::1;;::::0;;2892:123::o;2111:235:4:-;2183:7;2218:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2218:16:4;2252:19;2244:73;;;;-1:-1:-1;;;2244:73:4;;15486:2:13;2244:73:4;;;15468:21:13;15525:2;15505:18;;;15498:30;15564:34;15544:18;;;15537:62;15635:11;15615:18;;;15608:39;15664:19;;2244:73:4;15284:405:13;764:21:9;;;;;;;:::i;1849:205:4:-;1921:7;-1:-1:-1;;;;;1948:19:4;;1940:74;;;;-1:-1:-1;;;1940:74:4;;15075:2:13;1940:74:4;;;15057:21:13;15114:2;15094:18;;;15087:30;15153:34;15133:18;;;15126:62;15224:12;15204:18;;;15197:40;15254:19;;1940:74:4;14873:406:13;1940:74:4;-1:-1:-1;;;;;;2031:16:4;;;;;:9;:16;;;;;;;1849:205::o;1661:101:10:-;1101:6;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;1725:30:::1;1752:1;1725:18;:30::i;6929:277:9:-:0;1101:6:10;;7044:7:9;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;7112:1:9::1;7077:23:::0;;;:13:::1;:23;::::0;;;;;-1:-1:-1;;;;;7077:23:9::1;:37:::0;7069:70:::1;;;::::0;-1:-1:-1;;;7069:70:9;;19299:2:13;7069:70:9::1;::::0;::::1;19281:21:13::0;19338:2;19318:18;;;19311:30;19377:22;19357:18;;;19350:50;19417:18;;7069:70:9::1;19097:344:13::0;7069:70:9::1;7150:22;7163:8;7150:12;:22::i;:::-;-1:-1:-1::0;7190:8:9;6929:277::o;2453:179::-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;2576:28:9::1;:48:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;2576:48:9::1;::::0;;;::::1;::::0;;;::::1;::::0;;2453:179::o;3023:61::-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;3068:8:9::1;:6;:8::i;2570:102:4:-:0;2626:13;2658:7;2651:14;;;;;:::i;1414:241:9:-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;1535:9:9::1;1530:118;1554:9;:16;1550:1;:20;1530:118;;;1632:4;1592:23;:37;1616:9;1626:1;1616:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;1592:37:9::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;1592:37:9;:44;;-1:-1:-1;;1592:44:9::1;::::0;::::1;;::::0;;;::::1;::::0;;1572:3;::::1;::::0;::::1;:::i;:::-;;;;1530:118;;;;1414:241:::0;:::o;4203:153:4:-;4297:52;719:10:1;4330:8:4;4340;4297:18;:52::i;3165:128:9:-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;3221:8:9::1;::::0;;;::::1;;;:17;3213:46;;;::::0;-1:-1:-1;;;3213:46:9;;16240:2:13;3213:46:9::1;::::0;::::1;16222:21:13::0;16279:2;16259:18;;;16252:30;16318:18;16298;;;16291:46;16354:18;;3213:46:9::1;16038:340:13::0;3213:46:9::1;3270:8;:15:::0;;;::::1;::::0;::::1;::::0;;3165:128::o;7673:420::-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;7796:19:9::1;7834:11:::0;7830:132:::1;;-1:-1:-1::0;7876:21:9::1;7830:132;;;-1:-1:-1::0;7944:6:9;7830:132:::1;7973:9;7984:17:::0;8005:3:::1;-1:-1:-1::0;;;;;8005:8:9::1;8021:11;8005:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7972:65;;;;8056:4;8048:37;;;::::0;-1:-1:-1;;;8048:37:9;;12079:2:13;8048:37:9::1;::::0;::::1;12061:21:13::0;12118:2;12098:18;;;12091:30;12157:22;12137:18;;;12130:50;12197:18;;8048:37:9::1;11877:344:13::0;8048:37:9::1;7785:308;;;7673:420:::0;;:::o;6114:807::-;6233:16;1405:8:11;1161:7;;;;;1091:84;1405:8;1404:9;1396:38;;;;-1:-1:-1;;;1396:38:11;;14305:2:13;1396:38:11;;;14287:21:13;14344:2;14324:18;;;14317:30;14383:18;14363;;;14356:46;14419:18;;1396:38:11;14103:340:13;1396:38:11;6288:1:9::1;6275:10;:14;6267:42;;;::::0;-1:-1:-1;;;6267:42:9;;10222:2:13;6267:42:9::1;::::0;::::1;10204:21:13::0;10261:2;10241:18;;;10234:30;10300:17;10280:18;;;10273:45;10335:18;;6267:42:9::1;10020:339:13::0;6267:42:9::1;6328:23;::::0;::::1;::::0;::::1;;;6320:58;;;::::0;-1:-1:-1;;;6320:58:9;;16585:2:13;6320:58:9::1;::::0;::::1;16567:21:13::0;16624:2;16604:18;;;16597:30;16663:24;16643:18;;;16636:52;16705:18;;6320:58:9::1;16383:346:13::0;6320:58:9::1;6485:29;::::0;6440:10:::1;6485:29;6414:37:::0;;;:25:::1;:37;::::0;;;;;6485:29:::1;::::0;;::::1;::::0;6414:50:::1;::::0;6454:10;;6414:50:::1;:::i;:::-;6413:101;6391:189;;;::::0;-1:-1:-1;;;6391:189:9;;20784:2:13;6391:189:9::1;::::0;::::1;20766:21:13::0;20823:2;20803:18;;;20796:30;20862:34;20842:18;;;20835:62;20933:8;20913:18;;;20906:36;20959:19;;6391:189:9::1;20582:402:13::0;6391:189:9::1;6627:20;::::0;:33:::1;::::0;6650:10;;-1:-1:-1;;;6627:20:9;::::1;;;:33;:::i;:::-;6613:9;:48;6591:113;;;::::0;-1:-1:-1;;;6591:113:9;;15896:2:13;6591:113:9::1;::::0;::::1;15878:21:13::0;15935:2;15915:18;;;15908:30;15974:17;15954:18;;;15947:45;16009:18;;6591:113:9::1;15694:339:13::0;6591:113:9::1;6716:29;6762:10;6748:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;6748:25:9::1;;6716:57;;6798:21;6808:10;6798:9;:21::i;:::-;6858:10;6832:37;::::0;;;:25:::1;:37;::::0;;;;:51;;6783:36;;-1:-1:-1;6873:10:9;;6832:37;;;:51:::1;::::0;6873:10;;6832:51:::1;:::i;:::-;::::0;;;-1:-1:-1;6901:12:9;;6114:807;-1:-1:-1;;;6114:807:9:o;1779:143::-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;1881:32:9::1;1904:9:::0;1881:20:::1;:32;:::i;:::-;1860:17;;:54;;;;;;;;;;;;;;;;;;1779:143:::0;:::o;5287:320:4:-;5456:41;719:10:1;5489:7:4;5456:18;:41::i;:::-;5448:103;;;;-1:-1:-1;;;5448:103:4;;20009:2:13;5448:103:4;;;19991:21:13;20048:2;20028:18;;;20021:30;20087:34;20067:18;;;20060:62;20158:19;20138:18;;;20131:47;20195:19;;5448:103:4;19807:413:13;5448:103:4;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;:::-;5287:320;;;;:::o;3421:722:9:-;7144:4:4;7167:16;;;:7;:16;;;;;;3540:13:9;;-1:-1:-1;;;;;7167:16:4;3571:114:9;;;;-1:-1:-1;;;3571:114:9;;18481:2:13;3571:114:9;;;18463:21:13;18520:2;18500:18;;;18493:30;18559:34;18539:18;;;18532:62;18630:17;18610:18;;;18603:45;18665:19;;3571:114:9;18279:411:13;3571:114:9;3702:8;;;;;;;3698:71;;3743:14;3736:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3421:722;;;:::o;3698:71::-;3781:28;3812:10;:8;:10::i;:::-;3781:41;;3884:1;3859:14;3853:28;:32;:282;;;;;;;;;;;;;;;;;3977:14;4018:19;:8;:17;:19::i;:::-;3934:160;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3833:302;3421:722;-1:-1:-1;;;3421:722:9:o;2640:122::-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;2723:11:9::1;:31:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;2640:122::o;1911:198:10:-;1101:6;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;-1:-1:-1;;;;;1999:22:10;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:10;;10566:2:13;1991:73:10::1;::::0;::::1;10548:21:13::0;10605:2;10585:18;;;10578:30;10644:34;10624:18;;;10617:62;10715:8;10695:18;;;10688:36;10741:19;;1991:73:10::1;10364:402:13::0;1991:73:10::1;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;2267:178:9:-;1101:6:10;;-1:-1:-1;;;;;1101:6:10;;;;;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;17710:2:13;1233:68:10;;;17692:21:13;;;17729:18;;;17722:30;17788:34;17768:18;;;17761:62;17840:18;;1233:68:10;17508:356:13;1233:68:10;2390:29:9::1;:47:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2267:178::o;945:123:2:-;1032:19;;1050:1;1032:19;;;945:123::o;4151:691:9:-;4208:16;4237:31;4285:10;4271:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4271:25:9;;4237:59;;4307:20;4342:461;4364:10;4349:12;:25;4342:461;;;4447:1;4395:13;4447:1;4409:25;:15;918:14:2;;827:112;4409:25:9;4395:40;;;;;;;;;;;-1:-1:-1;4395:40:9;;-1:-1:-1;;;;;4395:40:9;:54;4391:401;;4470:27;:15;1032:19:2;;1050:1;1032:19;;;945:123;4470:27:9;4516:8;;4391:401;4596:15;918:14:2;4565::9;4580:12;4565:28;;;;;;;;:::i;:::-;;;;;;;;;;:56;4640:14;;;;:::i;:::-;;;;4691:39;4704:25;:15;918:14:2;;827:112;4704:25:9;4691:12;:39::i;:::-;4749:27;:15;1032:19:2;;1050:1;1032:19;;;945:123;4342:461:9;-1:-1:-1;4820:14:9;4151:691;-1:-1:-1;;4151:691:9:o;10930:171:4:-;11004:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;11004:29:4;-1:-1:-1;;;;;11004:29:4;;;;;;;;:24;;11057:23;11004:24;11057:14;:23::i;:::-;-1:-1:-1;;;;;11048:46:4;;;;;;;;;;;10930:171;;:::o;7362:344::-;7455:4;7167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7167:16:4;7471:73;;;;-1:-1:-1;;;7471:73:4;;13538:2:13;7471:73:4;;;13520:21:13;13577:2;13557:18;;;13550:30;13616:34;13596:18;;;13589:62;13687:14;13667:18;;;13660:42;13719:19;;7471:73:4;13336:408:13;7471:73:4;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;-1:-1:-1;;;;;7611:16:4;:7;-1:-1:-1;;;;;7611:16:4;;:51;;;;7655:7;-1:-1:-1;;;;;7631:31:4;:20;7643:7;7631:11;:20::i;:::-;-1:-1:-1;;;;;7631:31:4;;7611:51;:87;;;-1:-1:-1;;;;;;4542:25:4;;;4519:4;4542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7666:32;7603:96;7362:344;-1:-1:-1;;;;7362:344:4:o;10259:560::-;10413:4;-1:-1:-1;;;;;10386:31:4;:23;10401:7;10386:14;:23::i;:::-;-1:-1:-1;;;;;10386:31:4;;10378:85;;;;-1:-1:-1;;;10378:85:4;;18071:2:13;10378:85:4;;;18053:21:13;18110:2;18090:18;;;18083:30;18149:34;18129:18;;;18122:62;18220:11;18200:18;;;18193:39;18249:19;;10378:85:4;17869:405:13;10378:85:4;-1:-1:-1;;;;;10481:16:4;;10473:65;;;;-1:-1:-1;;;10473:65:4;;12428:2:13;10473:65:4;;;12410:21:13;12467:2;12447:18;;;12440:30;12506:34;12486:18;;;12479:62;12577:6;12557:18;;;12550:34;12601:19;;10473:65:4;12226:400:13;10473:65:4;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;-1:-1:-1;;;;;10690:15:4;;;;;;:9;:15;;;;;:20;;10709:1;;10690:15;:20;;10709:1;;10690:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10720:13:4;;;;;;:9;:13;;;;;:18;;10737:1;;10720:13;:18;;10737:1;;10720:18;:::i;:::-;;;;-1:-1:-1;;10748:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;10748:21:4;-1:-1:-1;;;;;10748:21:4;;;;;;;;;10785:27;;10748:16;;10785:27;;;;;;;10259:560;;;:::o;2103:117:11:-;1161:7;;;;1662:41;;;;-1:-1:-1;;;1662:41:11;;9454:2:13;1662:41:11;;;9436:21:13;9493:2;9473:18;;;9466:30;9532:22;9512:18;;;9505:50;9572:18;;1662:41:11;9252:344:13;1662:41:11;2161:7:::1;:15:::0;;-1:-1:-1;;2161:15:11::1;::::0;;2191:22:::1;719:10:1::0;2200:12:11::1;2191:22;::::0;-1:-1:-1;;;;;7616:55:13;;;7598:74;;7586:2;7571:18;2191:22:11::1;;;;;;;2103:117::o:0;2263:187:10:-;2355:6;;;-1:-1:-1;;;;;2371:17:10;;;2355:6;2371:17;;;;;;;;;;2403:40;;2355:6;;;;;;;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;7451:214:9:-;7530:11;;;;7518:23;;;7510:58;;;;-1:-1:-1;;;7510:58:9;;13187:2:13;7510:58:9;;;13169:21:13;13226:2;13206:18;;;13199:30;13265:24;13245:18;;;13238:52;13307:18;;7510:58:9;12985:346:13;7510:58:9;7579:23;;;;:13;:23;;;;;:36;;-1:-1:-1;;7579:36:9;7605:10;7579:36;;;;;;7626:31;;7593:8;7626:9;:31::i;1856:115:11:-;1161:7;;;;1404:9;1396:38;;;;-1:-1:-1;;;1396:38:11;;14305:2:13;1396:38:11;;;14287:21:13;14344:2;14324:18;;;14317:30;14383:18;14363;;;14356:46;14419:18;;1396:38:11;14103:340:13;1396:38:11;1915:7:::1;:14:::0;;-1:-1:-1;;1915:14:11::1;1925:4;1915:14;::::0;;1944:20:::1;1951:12;719:10:1::0;;640:96;11236:307:4;11386:8;-1:-1:-1;;;;;11377:17:4;:5;-1:-1:-1;;;;;11377:17:4;;;11369:55;;;;-1:-1:-1;;;11369:55:4;;12833:2:13;11369:55:4;;;12815:21:13;12872:2;12852:18;;;12845:30;12911:27;12891:18;;;12884:55;12956:18;;11369:55:4;12631:349:13;11369:55:4;-1:-1:-1;;;;;11434:25:4;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;11434:46:4;;;;;;;;;;11495:41;;8976::13;;;11495::4;;8949:18:13;11495:41:4;;;;;;;11236:307;;;:::o;6469:::-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;-1:-1:-1;;;6658:111:4;;9803:2:13;6658:111:4;;;9785:21:13;9842:2;9822:18;;;9815:30;9881:34;9861:18;;;9854:62;9952:20;9932:18;;;9925:48;9990:19;;6658:111:4;9601:414:13;1663:108:9;1723:13;1756:7;1749:14;;;;;:::i;328:703:12:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:12;;;;;;;;;;;;;;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:12;;-1:-1:-1;773:2:12;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:12;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:12;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;972:11:12;981:2;972:11;;:::i;:::-;;;844:150;;8036:108:4;8111:26;8121:2;8125:7;8111:26;;;;;;;;;;;;:9;:26::i;12096:778::-;12246:4;-1:-1:-1;;;;;12266:13:4;;1087:20:0;1133:8;12262:606:4;;12301:72;;;;;-1:-1:-1;;;;;12301:36:4;;;;;:72;;719:10:1;;12352:4:4;;12358:7;;12367:5;;12301:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12301:72:4;;;;;;;;-1:-1:-1;;12301:72:4;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12540:13:4;;12536:266;;12582:60;;-1:-1:-1;;;12582:60:4;;9803:2:13;12582:60:4;;;9785:21:13;9842:2;9822:18;;;9815:30;9881:34;9861:18;;;9854:62;9952:20;9932:18;;;9925:48;9990:19;;12582:60:4;9601:414:13;12536:266:4;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;12423:51;;12433:41;12423:51;;-1:-1:-1;12416:58:4;;12262:606;-1:-1:-1;12853:4:4;12096:778;;;;;;:::o;8365:311::-;8490:18;8496:2;8500:7;8490:5;:18::i;:::-;8539:54;8570:1;8574:2;8578:7;8587:5;8539:22;:54::i;:::-;8518:151;;;;-1:-1:-1;;;8518:151:4;;9803:2:13;8518:151:4;;;9785:21:13;9842:2;9822:18;;;9815:30;9881:34;9861:18;;;9854:62;9952:20;9932:18;;;9925:48;9990:19;;8518:151:4;9601:414:13;8998:372:4;-1:-1:-1;;;;;9077:16:4;;9069:61;;;;-1:-1:-1;;;9069:61:4;;16936:2:13;9069:61:4;;;16918:21:13;;;16955:18;;;16948:30;17014:34;16994:18;;;16987:62;17066:18;;9069:61:4;16734:356:13;9069:61:4;7144:4;7167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7167:16:4;:30;9140:58;;;;-1:-1:-1;;;9140:58:4;;10973:2:13;9140:58:4;;;10955:21:13;11012:2;10992:18;;;10985:30;11051;11031:18;;;11024:58;11099:18;;9140:58:4;10771:352:13;9140:58:4;-1:-1:-1;;;;;9265:13:4;;;;;;:9;:13;;;;;:18;;9282:1;;9265:13;:18;;9282:1;;9265:18;:::i;:::-;;;;-1:-1:-1;;9293:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;9293:21:4;-1:-1:-1;;;;;9293:21:4;;;;;;;;9330:33;;9293:16;;;9330:33;;9293:16;;9330:33;8998:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:247:13;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:323::-;342:6;350;403:2;391:9;382:7;378:23;374:32;371:52;;;419:1;416;409:12;371:52;458:9;445:23;477:31;502:5;477:31;:::i;:::-;527:5;579:2;564:18;;;;551:32;;-1:-1:-1;;;266:323:13:o;594:388::-;662:6;670;723:2;711:9;702:7;698:23;694:32;691:52;;;739:1;736;729:12;691:52;778:9;765:23;797:31;822:5;797:31;:::i;:::-;847:5;-1:-1:-1;904:2:13;889:18;;876:32;917:33;876:32;917:33;:::i;:::-;969:7;959:17;;;594:388;;;;;:::o;987:456::-;1064:6;1072;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1188:9;1175:23;1207:31;1232:5;1207:31;:::i;:::-;1257:5;-1:-1:-1;1314:2:13;1299:18;;1286:32;1327:33;1286:32;1327:33;:::i;:::-;987:456;;1379:7;;-1:-1:-1;;;1433:2:13;1418:18;;;;1405:32;;987:456::o;1448:1167::-;1543:6;1551;1559;1567;1620:3;1608:9;1599:7;1595:23;1591:33;1588:53;;;1637:1;1634;1627:12;1588:53;1676:9;1663:23;1695:31;1720:5;1695:31;:::i;:::-;1745:5;-1:-1:-1;1769:2:13;1808:18;;;1795:32;1836:33;1795:32;1836:33;:::i;:::-;1888:7;-1:-1:-1;1942:2:13;1927:18;;1914:32;;-1:-1:-1;1997:2:13;1982:18;;1969:32;2020:18;2050:14;;;2047:34;;;2077:1;2074;2067:12;2047:34;2115:6;2104:9;2100:22;2090:32;;2160:7;2153:4;2149:2;2145:13;2141:27;2131:55;;2182:1;2179;2172:12;2131:55;2218:2;2205:16;2240:2;2236;2233:10;2230:36;;;2246:18;;:::i;:::-;2288:112;2396:2;-1:-1:-1;;2320:4:13;2316:2;2312:13;2308:86;2304:95;2288:112;:::i;:::-;2275:125;;2423:2;2416:5;2409:17;2463:7;2458:2;2453;2449;2445:11;2441:20;2438:33;2435:53;;;2484:1;2481;2474:12;2435:53;2539:2;2534;2530;2526:11;2521:2;2514:5;2510:14;2497:45;2583:1;2578:2;2573;2566:5;2562:14;2558:23;2551:34;;2604:5;2594:15;;;;;1448:1167;;;;;;;:::o;2620:416::-;2685:6;2693;2746:2;2734:9;2725:7;2721:23;2717:32;2714:52;;;2762:1;2759;2752:12;2714:52;2801:9;2788:23;2820:31;2845:5;2820:31;:::i;:::-;2870:5;-1:-1:-1;2927:2:13;2912:18;;2899:32;2969:15;;2962:23;2950:36;;2940:64;;3000:1;2997;2990:12;3361:1032;3445:6;3476:2;3519;3507:9;3498:7;3494:23;3490:32;3487:52;;;3535:1;3532;3525:12;3487:52;3575:9;3562:23;3604:18;3645:2;3637:6;3634:14;3631:34;;;3661:1;3658;3651:12;3631:34;3699:6;3688:9;3684:22;3674:32;;3744:7;3737:4;3733:2;3729:13;3725:27;3715:55;;3766:1;3763;3756:12;3715:55;3802:2;3789:16;3824:2;3820;3817:10;3814:36;;;3830:18;;:::i;:::-;3876:2;3873:1;3869:10;3859:20;;3899:28;3923:2;3919;3915:11;3899:28;:::i;:::-;3961:15;;;3992:12;;;;4024:11;;;4054;;;4050:20;;4047:33;-1:-1:-1;4044:53:13;;;4093:1;4090;4083:12;4044:53;4115:1;4106:10;;4125:238;4139:2;4136:1;4133:9;4125:238;;;4210:3;4197:17;4184:30;;4227:31;4252:5;4227:31;:::i;:::-;4271:18;;;4157:1;4150:9;;;;;4309:12;;;;4341;;4125:238;;;-1:-1:-1;4382:5:13;3361:1032;-1:-1:-1;;;;;;;;3361:1032:13:o;4398:245::-;4456:6;4509:2;4497:9;4488:7;4484:23;4480:32;4477:52;;;4525:1;4522;4515:12;4477:52;4564:9;4551:23;4583:30;4607:5;4583:30;:::i;4648:249::-;4717:6;4770:2;4758:9;4749:7;4745:23;4741:32;4738:52;;;4786:1;4783;4776:12;4738:52;4818:9;4812:16;4837:30;4861:5;4837:30;:::i;4902:592::-;4973:6;4981;5034:2;5022:9;5013:7;5009:23;5005:32;5002:52;;;5050:1;5047;5040:12;5002:52;5090:9;5077:23;5119:18;5160:2;5152:6;5149:14;5146:34;;;5176:1;5173;5166:12;5146:34;5214:6;5203:9;5199:22;5189:32;;5259:7;5252:4;5248:2;5244:13;5240:27;5230:55;;5281:1;5278;5271:12;5230:55;5321:2;5308:16;5347:2;5339:6;5336:14;5333:34;;;5363:1;5360;5353:12;5333:34;5408:7;5403:2;5394:6;5390:2;5386:15;5382:24;5379:37;5376:57;;;5429:1;5426;5419:12;5376:57;5460:2;5452:11;;;;;5482:6;;-1:-1:-1;4902:592:13;;-1:-1:-1;;;;4902:592:13:o;5499:301::-;5558:6;5611:2;5599:9;5590:7;5586:23;5582:32;5579:52;;;5627:1;5624;5617:12;5579:52;5666:9;5653:23;5716:34;5709:5;5705:46;5698:5;5695:57;5685:85;;5766:1;5763;5756:12;5805:180;5864:6;5917:2;5905:9;5896:7;5892:23;5888:32;5885:52;;;5933:1;5930;5923:12;5885:52;-1:-1:-1;5956:23:13;;5805:180;-1:-1:-1;5805:180:13:o;5990:284::-;6048:6;6101:2;6089:9;6080:7;6076:23;6072:32;6069:52;;;6117:1;6114;6107:12;6069:52;6156:9;6143:23;6206:18;6199:5;6195:30;6188:5;6185:41;6175:69;;6240:1;6237;6230:12;6279:316;6320:3;6358:5;6352:12;6385:6;6380:3;6373:19;6401:63;6457:6;6450:4;6445:3;6441:14;6434:4;6427:5;6423:16;6401:63;:::i;:::-;6509:2;6497:15;-1:-1:-1;;6493:88:13;6484:98;;;;6584:4;6480:109;;6279:316;-1:-1:-1;;6279:316:13:o;6600:637::-;6880:3;6918:6;6912:13;6934:53;6980:6;6975:3;6968:4;6960:6;6956:17;6934:53;:::i;:::-;7050:13;;7009:16;;;;7072:57;7050:13;7009:16;7106:4;7094:17;;7072:57;:::i;:::-;7194:7;7151:20;;7180:22;;;7229:1;7218:13;;6600:637;-1:-1:-1;;;;6600:637:13:o;7683:511::-;7877:4;-1:-1:-1;;;;;7987:2:13;7979:6;7975:15;7964:9;7957:34;8039:2;8031:6;8027:15;8022:2;8011:9;8007:18;8000:43;;8079:6;8074:2;8063:9;8059:18;8052:34;8122:3;8117:2;8106:9;8102:18;8095:31;8143:45;8183:3;8172:9;8168:19;8160:6;8143:45;:::i;:::-;8135:53;7683:511;-1:-1:-1;;;;;;7683:511:13:o;8199:632::-;8370:2;8422:21;;;8492:13;;8395:18;;;8514:22;;;8341:4;;8370:2;8593:15;;;;8567:2;8552:18;;;8341:4;8636:169;8650:6;8647:1;8644:13;8636:169;;;8711:13;;8699:26;;8780:15;;;;8745:12;;;;8672:1;8665:9;8636:169;;;-1:-1:-1;8822:3:13;;8199:632;-1:-1:-1;;;;;;8199:632:13:o;9028:219::-;9177:2;9166:9;9159:21;9140:4;9197:44;9237:2;9226:9;9222:18;9214:6;9197:44;:::i;21599:334::-;21670:2;21664:9;21726:2;21716:13;;-1:-1:-1;;21712:86:13;21700:99;;21829:18;21814:34;;21850:22;;;21811:62;21808:88;;;21876:18;;:::i;:::-;21912:2;21905:22;21599:334;;-1:-1:-1;21599:334:13:o;21938:128::-;21978:3;22009:1;22005:6;22002:1;21999:13;21996:39;;;22015:18;;:::i;:::-;-1:-1:-1;22051:9:13;;21938:128::o;22071:236::-;22110:3;22138:18;22183:2;22180:1;22176:10;22213:2;22210:1;22206:10;22244:3;22240:2;22236:12;22231:3;22228:21;22225:47;;;22252:18;;:::i;:::-;22288:13;;22071:236;-1:-1:-1;;;;22071:236:13:o;22312:120::-;22352:1;22378;22368:35;;22383:18;;:::i;:::-;-1:-1:-1;22417:9:13;;22312:120::o;22437:287::-;22477:7;22509:34;22570:2;22567:1;22563:10;22600:2;22597:1;22593:10;22656:3;22652:2;22648:12;22643:3;22640:21;22633:3;22626:11;22619:19;22615:47;22612:73;;;22665:18;;:::i;:::-;22705:13;;22437:287;-1:-1:-1;;;;22437:287:13:o;22729:228::-;22769:7;22895:1;-1:-1:-1;;22823:74:13;22820:1;22817:81;22812:1;22805:9;22798:17;22794:105;22791:131;;;22902:18;;:::i;:::-;-1:-1:-1;22942:9:13;;22729:228::o;22962:270::-;23001:7;23033:18;23078:2;23075:1;23071:10;23108:2;23105:1;23101:10;23164:3;23160:2;23156:12;23151:3;23148:21;23141:3;23134:11;23127:19;23123:47;23120:73;;;23173:18;;:::i;23237:125::-;23277:4;23305:1;23302;23299:8;23296:34;;;23310:18;;:::i;:::-;-1:-1:-1;23347:9:13;;23237:125::o;23367:258::-;23439:1;23449:113;23463:6;23460:1;23457:13;23449:113;;;23539:11;;;23533:18;23520:11;;;23513:39;23485:2;23478:10;23449:113;;;23580:6;23577:1;23574:13;23571:48;;;-1:-1:-1;;23615:1:13;23597:16;;23590:27;23367:258::o;23630:437::-;23709:1;23705:12;;;;23752;;;23773:61;;23827:4;23819:6;23815:17;23805:27;;23773:61;23880:2;23872:6;23869:14;23849:18;23846:38;23843:218;;;-1:-1:-1;;;23914:1:13;23907:88;24018:4;24015:1;24008:15;24046:4;24043:1;24036:15;23843:218;;23630:437;;;:::o;24072:195::-;24111:3;-1:-1:-1;;24135:5:13;24132:77;24129:103;;;24212:18;;:::i;:::-;-1:-1:-1;24259:1:13;24248:13;;24072:195::o;24272:112::-;24304:1;24330;24320:35;;24335:18;;:::i;:::-;-1:-1:-1;24369:9:13;;24272:112::o;24389:184::-;-1:-1:-1;;;24438:1:13;24431:88;24538:4;24535:1;24528:15;24562:4;24559:1;24552:15;24578:184;-1:-1:-1;;;24627:1:13;24620:88;24727:4;24724:1;24717:15;24751:4;24748:1;24741:15;24767:184;-1:-1:-1;;;24816:1:13;24809:88;24916:4;24913:1;24906:15;24940:4;24937:1;24930:15;24956:184;-1:-1:-1;;;25005:1:13;24998:88;25105:4;25102:1;25095:15;25129:4;25126:1;25119:15;25145:154;-1:-1:-1;;;;;25224:5:13;25220:54;25213:5;25210:65;25200:93;;25289:1;25286;25279:12;25304:177;25389:66;25382:5;25378:78;25371:5;25368:89;25358:117;;25471:1;25468;25461:12
Swarm Source
ipfs://7e06d28bdd430135b8a06cbea9cdb637a8df9bbc31614fe5bcdfb201e1ef09e0
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.