Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
528 INHIB
Holders
269
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 INHIBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
INHIBITOR
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-12 */ // SPDX-License-Identifier: MIT // Creator: Mai of Tessera Labs // Special Thanks to Diversity from Divine Anarchy for all his help reviewing pragma solidity ^0.8.12; /** * @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); } } /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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); } } } } interface ERC721TokenReceiver { function onERC721Received(address operator,address from, uint256 id, bytes calldata data) external returns (bytes4); } /** * Built to optimize for lower gas during batch mints and transfers. * A new locking mechanism has been added to protect users from all attempted scams. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * */ abstract contract ERC721L { using Address for address; using Strings for uint256; event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); event Locked(address indexed owner, uint256 unlockCooldown); event Unlocked(address indexed owner, uint256 unlockTimestamp); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); struct addressData { uint64 balance; uint64 lockedUnlockTimestamp; uint64 lockedUnlockCooldown; bool locked; } struct collectionData { string name; string symbol; uint256 index; uint256 burned; } address private _contractOwner; collectionData internal _collectionData; mapping(uint256 => address) internal _ownerships; mapping(address => addressData) internal _addressData; mapping(uint256 => address) internal _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory _name, string memory _symbol) { _collectionData.name = _name; _collectionData.symbol = _symbol; _transferOwnership(_msgSender()); } function _msgSender() internal view virtual returns (address) { return msg.sender; } /** * @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` or `_safeMint`), */ function _exists(uint256 tokenId) public view virtual returns (bool) { return tokenId < _collectionData.index; } /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) public view virtual returns (address) { unchecked { if (tokenId < _collectionData.index) { address ownership = _ownerships[tokenId]; if (ownership != address(0)) { return ownership; } while (true) { tokenId--; ownership = _ownerships[tokenId]; if (ownership != address(0)) { return ownership; } } } } revert (); } /** * @dev Returns the number of tokens in `_owner`'s account. */ function balanceOf(address _owner) public view returns (uint256) { require(_owner != address(0), "Address 0"); return uint256(_addressData[_owner].balance); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { require(to != address(0), "Address 0"); require(quantity > 0, "Quantity 0"); unchecked { uint256 updatedIndex = _collectionData.index; _addressData[to].balance += uint64(quantity); _ownerships[updatedIndex] = to; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex++); } _collectionData.index = updatedIndex; } } /** * @dev See Below {ERC721L-_safeMint}. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {onERC721Received}, which is called for each safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 quantity, bytes memory _data) internal { require(to != address(0), "Address 0"); require(quantity > 0, "Quantity 0"); unchecked { uint256 updatedIndex = _collectionData.index; _addressData[to].balance += uint64(quantity); _ownerships[updatedIndex] = to; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require(to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(_msgSender(), address(0), updatedIndex, _data) == ERC721TokenReceiver.onERC721Received.selector, "Unsafe Destination"); updatedIndex++; } _collectionData.index = updatedIndex; } } /** * @dev Returns whether `_owner`'s tokens are currently unlocked. */ function isUnlocked(address _owner) public view returns (bool) { return !_addressData[_owner].locked && _addressData[_owner].lockedUnlockTimestamp < block.timestamp; } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - `from` must not have tokens locked. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) public virtual { address currentOwner = ownerOf(tokenId); require(isUnlocked(from), "ERC721L: Tokens Locked"); require((_msgSender() == currentOwner || getApproved(tokenId) == _msgSender() || isApprovedForAll(currentOwner,_msgSender())), "ERC721L: Not Approved"); require(currentOwner == from, "ERC721L: Not Owner"); require(to != address(0), "ERC721L: Address 0"); delete _tokenApprovals[tokenId]; unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = to; uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId] == address(0) && nextTokenId < _collectionData.index) { _ownerships[nextTokenId] = currentOwner; } } emit Transfer(from, to, tokenId); } /** * @dev See Below {ERC721L-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual { safeTransferFrom(from, to, tokenId, ''); } /** * @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 {ERC721TokenReceiver}, which is called upon a safe transfer. * - `from` must not have tokens locked. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual { transferFrom(from, to, tokenId); require(to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(_msgSender(), address(0), tokenId, _data) == ERC721TokenReceiver.onERC721Received.selector, "Unsafe Destination"); } /** * @dev Batch transfers `quantity` tokens sequentially starting at `startID` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `startID` token and all sequential tokens must exist and be owned by `from`. * - `from` must not have tokens locked. * * Emits `quantity` number of {Transfer} events. */ function batchTransferFrom(address from, address to, uint256 startID, uint256 quantity) public virtual { _batchTransferFrom(from, to, startID, quantity, false, ''); } /** * @dev See Below {ERC721L-batchSafeTransferFrom}. */ function batchSafeTransferFrom(address from, address to, uint256 startID, uint256 quantity) public virtual { batchSafeTransferFrom(from, to, startID, quantity, ''); } /** * @dev Safely batch transfers `quantity` tokens sequentially starting at `startID` 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. * - `startID` token and all sequential tokens 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 {ERC721TokenReceiver}, which is called upon a safe transfer. * - `from` must not have tokens locked. * * Emits `quantity` number of {Transfer} events. */ function batchSafeTransferFrom(address from, address to, uint256 startID, uint256 quantity, bytes memory _data) public virtual { _batchTransferFrom(from, to, startID, quantity, true, _data); } function _batchTransferFrom (address from, address to, uint256 startID, uint256 quantity, bool safe, bytes memory _data) internal { require(isUnlocked(from), "ERC721L: Tokens Locked"); require(_msgSender() == from || isApprovedForAll(from,_msgSender()), "ERC721L: Not Approved"); require(multiOwnerCheck(from, startID, quantity), "ERC721L: Not Batchable"); require(to != address(0), "ERC721L: Address 0"); unchecked { for (uint256 i; i < quantity; i++) { uint256 currentToken = startID + i; delete _tokenApprovals[currentToken]; if (i == 0){ _ownerships[currentToken] = to; } else { delete _ownerships[currentToken]; } emit Transfer(from, to, currentToken); if (safe){ require(to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(_msgSender(), address(0), currentToken, _data) == ERC721TokenReceiver.onERC721Received.selector, "Unsafe Destination"); } } _addressData[from].balance -= uint64(quantity); _addressData[to].balance += uint64(quantity); uint256 nextTokenId = startID + quantity; if (_ownerships[nextTokenId] == address(0) && nextTokenId < _collectionData.index) { _ownerships[nextTokenId] = from; } } } /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() public view returns (uint256) { unchecked { return _collectionData.index - _collectionData.burned; } } /** * @dev Returns the total amount of tokens created by the contract. */ function totalCreated() public view returns (uint256) { return _collectionData.index; } /** * @dev Returns the total amount of tokens burned by the contract. */ function totalBurned() public view returns (uint256) { return _collectionData.burned; } /** * @dev Returns whether `_addressToCheck` is the owner of `quantity` tokens sequentially starting from `startID`. * * Requirements: * * - `startID` token and all sequential tokens must exist. */ function multiOwnerCheck(address _addressToCheck, uint256 startID, uint256 quantity) internal view returns (bool) { require(quantity > 1, "Low Quantity"); unchecked { for (uint256 i; i < quantity; i++) { if (ownerOf(startID + i) != _addressToCheck){ return false; } } } return true; } /** * @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. * - Owner must not have tokens locked. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) public { require(operator != _msgSender(), "ERC721L: Address is Owner"); require(isUnlocked(_msgSender()), "ERC721L: Tokens Locked"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev Returns if the `operator` is allowed to manage all of the assets of `_owner` and tokens are unlocked for `_owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address _owner, address operator) public view returns (bool) { return !isUnlocked(_owner) ? false : _operatorApprovals[_owner][operator]; } /** * @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) public { address tokenOwner = ownerOf(tokenId); require(_msgSender() == tokenOwner || isApprovedForAll(tokenOwner, _msgSender()), "ERC721L: Not Approved"); _tokenApprovals[tokenId] = to; emit Approval(tokenOwner, to, tokenId); } /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId), "ERC721L: Null ID"); return _tokenApprovals[tokenId]; } /** * @dev Locks `_owner`'s tokens from any form of transferring. * Requirements: * * - The `caller` cannot have their tokens locked currently. * * Emits a {Locked} event. */ function lock(uint256 _cooldown) public { require(!_addressData[_msgSender()].locked, "Tokens currently locked"); require(_cooldown > 0 && _cooldown < 31, "Invalid Cooldown"); unchecked { uint256 proposedCooldown = _cooldown * 1 days; require(block.timestamp + proposedCooldown > _addressData[_msgSender()].lockedUnlockTimestamp, "Proposed cooldown too small"); _addressData[_msgSender()].locked = true; _addressData[_msgSender()].lockedUnlockCooldown = uint64(proposedCooldown); } emit Locked(_msgSender(), _cooldown); } /** * @dev Begins unlocking process for `_owner`'s tokens. * Requirements: * * - The `caller` cannot have their tokens unlocked currently. * * Emits an {Unlocked} event. */ function unlock() public { require(_addressData[_msgSender()].locked, "Tokens currently unlocked"); delete _addressData[_msgSender()].locked; unchecked { _addressData[_msgSender()].lockedUnlockTimestamp = uint64(block.timestamp + _addressData[_msgSender()].lockedUnlockCooldown); } emit Unlocked(_msgSender(), block.timestamp); } /** * @dev Returns the token collection name. */ function name() public view returns (string memory) { return _collectionData.name; } /** * @dev Returns the token collection symbol. */ function symbol() public view returns (string memory) { return _collectionData.symbol; } /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) public view virtual returns (string memory) { require(_exists(tokenId), "ERC721L: Null ID"); 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() public view virtual returns (string memory) { return ''; } /** * @dev Returns tokenIDs owned by `_owner`. */ function tokensOfOwner(address _owner) public view returns (uint256[] memory) { uint256 totalOwned = _addressData[_owner].balance; require(totalOwned > 0, "balance 0"); uint256 supply = _collectionData.index; uint256[] memory tokenIDs = new uint256[](totalOwned); uint256 ownedIndex; address currentOwner; unchecked { for (uint256 i; i < supply; i++) { address currentAddress = _ownerships[i]; if (currentAddress != address(0)) { currentOwner = currentAddress; } if (currentOwner == _owner) { tokenIDs[ownedIndex++] = i; if (ownedIndex == totalOwned){ return tokenIDs; } } } } revert(); } function owner() public view returns (address) { return _contractOwner; } modifier onlyOwner() { require(owner() == _msgSender(), "Caller not owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { address oldOwner = _contractOwner; _contractOwner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } /** * @dev Returns `_owner`'s lock status and unlock timestamp in unix time, and personal lock cooldown in days. */ function getLockData(address _owner) public view returns (bool, uint256, uint256) { return (_addressData[_owner].locked, _addressData[_owner].lockedUnlockTimestamp, _addressData[_owner].lockedUnlockCooldown); } /** * @dev Returns the token collection information. */ function collectionInformation() public view returns (collectionData memory) { return _collectionData; } function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } } abstract contract ERC721LBurnable is ERC721L { function _exists(uint256 tokenId) public view override returns (bool) { if (tokenId < _collectionData.index && _ownerships[tokenId] != address(0x000000000000000000000000000000000000dEaD)){ unchecked { address currentOwner = _ownerships[tokenId]; if (currentOwner != address(0)) { return true; } while (true) { tokenId--; currentOwner = _ownerships[tokenId]; if (currentOwner == address(0x000000000000000000000000000000000000dEaD)) { return false; } if (currentOwner != address(0)) { return true; } } } } return false; } function ownerOf(uint256 tokenId) public view override returns (address) { unchecked { if (tokenId < _collectionData.index) { address ownership = _ownerships[tokenId]; if (ownership != address(0x000000000000000000000000000000000000dEaD)) { if (ownership != address(0)) { return ownership; } while (true) { tokenId--; ownership = _ownerships[tokenId]; if (ownership != address(0)) { if (ownership == address(0x000000000000000000000000000000000000dEaD)) { revert ("Null Owner"); } return ownership; } } } } } revert (); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function burn(uint256 tokenId) public { address prevOwner = ownerOf(tokenId); require(isUnlocked(prevOwner), "ERC721L: Tokens Locked"); require((_msgSender() == prevOwner || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwner, _msgSender())), "ERC721L: Not Approved"); delete _tokenApprovals[tokenId]; unchecked { _addressData[prevOwner].balance -= 1; _ownerships[tokenId] = address(0x000000000000000000000000000000000000dEaD); _collectionData.burned++; uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId] == address(0) && nextTokenId < _collectionData.index) { _ownerships[nextTokenId] = prevOwner; } } emit Transfer(prevOwner, address(0x000000000000000000000000000000000000dEaD), tokenId); } /** * @dev Destroys `tokenIDs`. * The approval is cleared when each token is burned. * * Requirements: * * - `tokenIDs` must exist. * - caller must be Owner or Approved for token usage. * * Emits a {Transfer} event. */ function batchBurn(uint256 startID, uint256 quantity) public { address currentOwner = ownerOf(startID); require(isUnlocked(currentOwner), "ERC721L: Tokens Locked"); require(multiOwnerCheck(currentOwner, startID, quantity), "ERC721L: Not Batchable"); require(_msgSender() == currentOwner || isApprovedForAll(currentOwner, _msgSender()), "ERC721M: Not Approved"); unchecked { for (uint256 i; i < quantity; i++) { uint256 currentToken = startID + i; delete _tokenApprovals[currentToken]; if (i == 0){ _ownerships[currentToken] = address(0x000000000000000000000000000000000000dEaD); } else { delete _ownerships[currentToken]; } emit Transfer(currentOwner, address(0x000000000000000000000000000000000000dEaD), currentToken); } _addressData[currentOwner].balance -= uint64(quantity); _collectionData.burned += uint128(quantity); uint256 nextTokenId = startID + quantity; if (_ownerships[nextTokenId] == address(0) && nextTokenId < _collectionData.index) { _ownerships[nextTokenId] = currentOwner; } } } } contract INHIBITOR is ERC721LBurnable { address public royaltyAddress; uint256 public royaltySize = 750; uint256 public royaltyDenominator = 10000; mapping(uint256 => address) private _royaltyReceivers; uint256 maxSupply = 7777; string private _baseURI = "ipfs://QmaQ2FarHPpr5TbjQmv6knusDeNBXETzWxRGnWzLsTgn4G/"; uint256 public publicMaxMint = 5; uint256 public priceInhibitor = .02 ether; bool public publicActive; address public genesisAddress; constructor(address _genesisAddress) ERC721L("INHIBITOR", "INHIB") { genesisAddress = _genesisAddress; royaltyAddress = owner(); } modifier callerIsUser() { require(tx.origin == _msgSender() && _msgSender().code.length == 0, "Contract Caller"); _; } modifier isGenesisContract() { require(genesisAddress == _msgSender(), "Caller not Genesis Contract"); _; } function mintHelper(address _minter, uint256 _quantity) public isGenesisContract { unchecked { require(totalCreated() + _quantity <= maxSupply, "Insufficient supply"); } _mint(_minter, _quantity); } function publicMint(uint256 _quantity) public payable callerIsUser() { require(publicActive, "Public sale not active"); require(_quantity > 0 && _quantity <= publicMaxMint, "Invalid quantity"); unchecked { require(totalCreated() + _quantity <= maxSupply, "Insufficient supply remaining"); require(msg.value >= priceInhibitor * _quantity, "Insufficient payment"); } _mint(_msgSender(), _quantity); } function baseURI() public view override returns (string memory) { return _baseURI; } function setBaseURI(string calldata newBaseURI) external onlyOwner { _baseURI = newBaseURI; } function setPublicState(bool _state) external onlyOwner { publicActive = _state; } function setPublicMaxMint(uint256 _newLimit) external onlyOwner { publicMaxMint = _newLimit; } function setInhibitorPrice(uint256 _price) external onlyOwner { priceInhibitor = _price; } function setGenesisAddress(address _address) external onlyOwner { genesisAddress = _address; } function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount) { uint256 amount = (_salePrice * royaltySize)/(royaltyDenominator); address royaltyReceiver = _royaltyReceivers[_tokenId] != address(0) ? _royaltyReceivers[_tokenId] : royaltyAddress; return (royaltyReceiver, amount); } function addRoyaltyReceiverForTokenId(address receiver, uint256 tokenId) public onlyOwner { _royaltyReceivers[tokenId] = receiver; } function withdraw() external onlyOwner { uint256 currentBalance = address(this).balance; (bool sent, ) = address(msg.sender).call{value: currentBalance}(''); require(sent, "Transfer Error"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_genesisAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"unlockCooldown","type":"uint256"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"unlockTimestamp","type":"uint256"}],"name":"Unlocked","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"_exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"addRoyaltyReceiverForTokenId","outputs":[],"stateMutability":"nonpayable","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":"startID","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"batchBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"startID","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"startID","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"startID","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectionInformation","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"burned","type":"uint256"}],"internalType":"struct ERC721L.collectionData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesisAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getLockData","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cooldown","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mintHelper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceInhibitor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltySize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setGenesisAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setInhibitorPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setPublicMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCreated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6102ee600a55612710600b55611e61600d5560e060405260366080818152906200460f60a03980516200003b91600e9160209091019062000198565b506005600f5566470de4df8200006010553480156200005957600080fd5b5060405162004645380380620046458339810160408190526200007c916200023e565b604080518082018252600981526824a72424a124aa27a960b91b60208083019182528351808501909452600584526424a72424a160d91b908401528151919291620000ca9160019162000198565b508051620000e090600290602084019062000198565b50620000ec3362000148565b505060118054610100600160a81b0319166101006001600160a01b03841602179055620001216000546001600160a01b031690565b600980546001600160a01b0319166001600160a01b039290921691909117905550620002ad565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001a69062000270565b90600052602060002090601f016020900481019282620001ca576000855562000215565b82601f10620001e557805160ff191683800117855562000215565b8280016001018555821562000215579182015b8281111562000215578251825591602001919060010190620001f8565b506200022392915062000227565b5090565b5b8082111562000223576000815560010162000228565b6000602082840312156200025157600080fd5b81516001600160a01b03811681146200026957600080fd5b9392505050565b600181811c908216806200028557607f821691505b60208210811415620002a757634e487b7160e01b600052602260045260246000fd5b50919050565b61435280620002bd6000396000f3fe60806040526004361061031e5760003560e01c8063844e0acd116101a5578063b88d4fde116100ec578063d9b3c80111610095578063eab8a7121161006f578063eab8a71214610978578063f2fde38b14610998578063f8e76cc0146109b8578063fd8d7ed3146109d857600080fd5b8063d9b3c80114610918578063dd46706414610938578063e985e9c51461095857600080fd5b8063c87b56dd116100c6578063c87b56dd146108c3578063cd6a3ea5146108e3578063d89135cd1461090357600080fd5b8063b88d4fde146107d6578063c48156af146107f6578063c62223311461081657600080fd5b806397309a5b1161014e578063a69df4b511610128578063a69df4b514610774578063ab82782c14610789578063ad2f852a146107a957600080fd5b806397309a5b1461071e578063a22cb46514610734578063a59585a81461075457600080fd5b806387d381cf1161017f57806387d381cf146106be5780638da5cb5b146106de57806395d89b411461070957600080fd5b8063844e0acd1461065c5780638462151c14610671578063860cad791461069e57600080fd5b8063305c7d4a1161026957806355f804b3116102125780636c0360eb116101ec5780636c0360eb1461061257806370a0823114610627578063715018a61461064757600080fd5b806355f804b3146105a05780636065fb33146105c05780636352211e146105f257600080fd5b80633ffea8c8116102435780633ffea8c81461053e57806342842e0e1461056057806342966c681461058057600080fd5b8063305c7d4a146104f95780633ccfd60b1461050f5780633f2981cf1461052457600080fd5b80631d7d5ae4116102cb5780632a55205a116102a55780632a55205a1461047a5780632bbf532a146104c65780632db11544146104e657600080fd5b80631d7d5ae41461042457806323b872dd1461043a57806329dc11021461045a57600080fd5b8063095ea7b3116102fc578063095ea7b3146103bf57806318160ddd146103e15780631b5462e81461040457600080fd5b806301ffc9a71461032357806306fdde0314610358578063081812fc1461037a575b600080fd5b34801561032f57600080fd5b5061034361033e366004613ba2565b6109ee565b60405190151581526020015b60405180910390f35b34801561036457600080fd5b5061036d610ad3565b60405161034f9190613c35565b34801561038657600080fd5b5061039a610395366004613c48565b610b68565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034f565b3480156103cb57600080fd5b506103df6103da366004613c8a565b610c07565b005b3480156103ed57600080fd5b50600454600354035b60405190815260200161034f565b34801561041057600080fd5b506103df61041f366004613c8a565b610d24565b34801561043057600080fd5b506103f660105481565b34801561044657600080fd5b506103df610455366004613cb4565b610e2f565b34801561046657600080fd5b506103df610475366004613cf0565b611229565b34801561048657600080fd5b5061049a610495366004613d32565b61124b565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161034f565b3480156104d257600080fd5b506103436104e1366004613d54565b6112e8565b6103df6104f4366004613c48565b611377565b34801561050557600080fd5b506103f6600f5481565b34801561051b57600080fd5b506103df6115c0565b34801561053057600080fd5b506011546103439060ff1681565b34801561054a57600080fd5b506105536116f5565b60405161034f9190613d6f565b34801561056c57600080fd5b506103df61057b366004613cb4565b61186a565b34801561058c57600080fd5b506103df61059b366004613c48565b61188a565b3480156105ac57600080fd5b506103df6105bb366004613de7565b611b4a565b3480156105cc57600080fd5b5060115461039a90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156105fe57600080fd5b5061039a61060d366004613c48565b611bd7565b34801561061e57600080fd5b5061036d611d14565b34801561063357600080fd5b506103f6610642366004613d54565b611d23565b34801561065357600080fd5b506103df611dd5565b34801561066857600080fd5b506003546103f6565b34801561067d57600080fd5b5061069161068c366004613d54565b611e62565b60405161034f9190613e59565b3480156106aa57600080fd5b506103df6106b9366004613d32565b611ffa565b3480156106ca57600080fd5b506103df6106d9366004613f77565b612375565b3480156106ea57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661039a565b34801561071557600080fd5b5061036d61238b565b34801561072a57600080fd5b506103f6600a5481565b34801561074057600080fd5b506103df61074f366004613ff9565b61239c565b34801561076057600080fd5b506103df61076f366004613c48565b612522565b34801561078057600080fd5b506103df6125a8565b34801561079557600080fd5b506103df6107a4366004613d54565b612716565b3480156107b557600080fd5b5060095461039a9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156107e257600080fd5b506103df6107f136600461402c565b6127e3565b34801561080257600080fd5b506103df610811366004614094565b612935565b34801561082257600080fd5b506108a6610831366004613d54565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205460ff78010000000000000000000000000000000000000000000000008204169167ffffffffffffffff68010000000000000000830481169270010000000000000000000000000000000090041690565b60408051931515845260208401929092529082015260600161034f565b3480156108cf57600080fd5b5061036d6108de366004613c48565b6129e7565b3480156108ef57600080fd5b506103df6108fe366004613c8a565b612ab4565b34801561090f57600080fd5b506004546103f6565b34801561092457600080fd5b506103df610933366004613cf0565b612b88565b34801561094457600080fd5b506103df610953366004613c48565b612ba6565b34801561096457600080fd5b506103436109733660046140af565b612e12565b34801561098457600080fd5b506103df610993366004613c48565b612e66565b3480156109a457600080fd5b506103df6109b3366004613d54565b612eec565b3480156109c457600080fd5b506103436109d3366004613c48565b612ff3565b3480156109e457600080fd5b506103f6600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610a8157507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610acd57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060016000018054610ae5906140d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b11906140d9565b8015610b5e5780601f10610b3357610100808354040283529160200191610b5e565b820191906000526020600020905b815481529060010190602001808311610b4157829003601f168201915b5050505050905090565b6000610b7382612ff3565b610bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4552433732314c3a204e756c6c2049440000000000000000000000000000000060448201526064015b60405180910390fd5b5060009081526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610c1282611bd7565b90503373ffffffffffffffffffffffffffffffffffffffff82161480610c3d5750610c3d8133612e12565b610ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314c3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b60008281526007602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60115473ffffffffffffffffffffffffffffffffffffffff610100909104163314610dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f742047656e6573697320436f6e747261637400000000006044820152606401610bd5565b600d5481610db860035490565b011115610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e73756666696369656e7420737570706c79000000000000000000000000006044820152606401610bd5565b610e2b82826130f8565b5050565b6000610e3a82611bd7565b9050610e45846112e8565b610eab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b3373ffffffffffffffffffffffffffffffffffffffff82161480610eec575033610ed483610b68565b73ffffffffffffffffffffffffffffffffffffffff16145b80610efc5750610efc8133612e12565b610f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314c3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4552433732314c3a204e6f74204f776e657200000000000000000000000000006044820152606401610bd5565b73ffffffffffffffffffffffffffffffffffffffff8316611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4552433732314c3a2041646472657373203000000000000000000000000000006044820152606401610bd5565b600082815260076020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff88811685526006845282852080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000080821667ffffffffffffffff9283167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018316179092558983168088528588208054938416938316600190810190931693909317909255888752600590955283862080549093161790915591850180845292205416158015611175575060035481105b156111c757600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b50818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6112458484848460405180602001604052806000815250612375565b50505050565b6000806000600b54600a5485611261919061415c565b61126b91906141c8565b6000868152600c60205260408120549192509073ffffffffffffffffffffffffffffffffffffffff166112b65760095473ffffffffffffffffffffffffffffffffffffffff166112dc565b6000868152600c602052604090205473ffffffffffffffffffffffffffffffffffffffff165b96919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600660205260408120547801000000000000000000000000000000000000000000000000900460ff16158015610acd57505073ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040902054426801000000000000000090910467ffffffffffffffff161090565b32331480156113855750333b155b6113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f436f6e74726163742043616c6c657200000000000000000000000000000000006044820152606401610bd5565b60115460ff16611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5075626c69632073616c65206e6f7420616374697665000000000000000000006044820152606401610bd5565b6000811180156114695750600f548111155b6114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964207175616e74697479000000000000000000000000000000006044820152606401610bd5565b600d54816114dc60035490565b011115611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e73756666696369656e7420737570706c792072656d61696e696e670000006044820152606401610bd5565b80601054023410156115b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e73756666696369656e74207061796d656e740000000000000000000000006044820152606401610bd5565b6115bd33826130f8565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b6040514790600090339083908381818185875af1925050503d8060008114611685576040519150601f19603f3d011682016040523d82523d6000602084013e61168a565b606091505b5050905080610e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5472616e73666572204572726f720000000000000000000000000000000000006044820152606401610bd5565b6117206040518060800160405280606081526020016060815260200160008152602001600081525090565b600160405180608001604052908160008201805461173d906140d9565b80601f0160208091040260200160405190810160405280929190818152602001828054611769906140d9565b80156117b65780601f1061178b576101008083540402835291602001916117b6565b820191906000526020600020905b81548152906001019060200180831161179957829003601f168201915b505050505081526020016001820180546117cf906140d9565b80601f01602080910402602001604051908101604052809291908181526020018280546117fb906140d9565b80156118485780601f1061181d57610100808354040283529160200191611848565b820191906000526020600020905b81548152906001019060200180831161182b57829003601f168201915b5050505050815260200160028201548152602001600382015481525050905090565b611885838383604051806020016040528060008152506127e3565b505050565b600061189582611bd7565b90506118a0816112e8565b611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b3373ffffffffffffffffffffffffffffffffffffffff8216148061194757503361192f83610b68565b73ffffffffffffffffffffffffffffffffffffffff16145b8061195757506119578133612e12565b6119bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314c3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b600082815260076020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff85811685526006845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff80831691909101167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161790558685526005909352818420805490911661dead179055600480546001908101909155850180845292205416158015611aac575060035481105b15611afe57600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b50604051829061dead9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a45050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b611885600e8383613abd565b60035460009082101561031e5760008281526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1661dead8114611d0e5773ffffffffffffffffffffffffffffffffffffffff811615611c345792915050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910160008181526005602052604090205490919073ffffffffffffffffffffffffffffffffffffffff168015611d095773ffffffffffffffffffffffffffffffffffffffff811661dead1415610acd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e756c6c204f776e6572000000000000000000000000000000000000000000006044820152606401610bd5565b611c34565b50600080fd5b6060600e8054610ae5906140d9565b600073ffffffffffffffffffffffffffffffffffffffff8216611da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f41646472657373203000000000000000000000000000000000000000000000006044820152606401610bd5565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205467ffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314611e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b611e6060006132d8565b565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205460609067ffffffffffffffff1680611efc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f62616c616e6365203000000000000000000000000000000000000000000000006044820152606401610bd5565b60035460008267ffffffffffffffff811115611f1a57611f1a613e9d565b604051908082528060200260200182016040528015611f43578160200160208202803683370190505b50905060008060005b84811015611d0e5760008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff168015611f83578092505b8873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ff15781858580600101965081518110611fd057611fd06141dc565b60200260200101818152505086841415611ff1575092979650505050505050565b50600101611f4c565b600061200583611bd7565b9050612010816112e8565b612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b61208181848461334d565b6120e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a204e6f7420426174636861626c65000000000000000000006044820152606401610bd5565b3373ffffffffffffffffffffffffffffffffffffffff8216148061211057506121108133612e12565b612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314d3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b60005b8281101561227f57838101600081815260076020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055816121fa57600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905561222f565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b604051819061dead9073ffffffffffffffffffffffffffffffffffffffff8616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a450600101612179565b5073ffffffffffffffffffffffffffffffffffffffff8082166000908152600660209081526040808320805467ffffffffffffffff808216899003167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909116179055600480546fffffffffffffffffffffffffffffffff881601905586860180845260059092529091205490911615801561231c575060035481105b15611245576000818152600560205260409020805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905550505050565b6123848585858560018661341e565b5050505050565b6060600180018054610ae5906140d9565b73ffffffffffffffffffffffffffffffffffffffff821633141561241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732314c3a2041646472657373206973204f776e6572000000000000006044820152606401610bd5565b612425336112e8565b61248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b33600081815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b600f55565b336000908152600660205260409020547801000000000000000000000000000000000000000000000000900460ff1661263d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6b656e732063757272656e746c7920756e6c6f636b6564000000000000006044820152606401610bd5565b33600081815260066020526040902080547001000000000000000000000000000000007fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff82160467ffffffffffffffff90811642011668010000000000000000027fffffffffffffff00ffffffffffffffff0000000000000000ffffffffffffffff90911617905573ffffffffffffffffffffffffffffffffffffffff167f0f0bc5b519ddefdd8e5f9e6423433aa2b869738de2ae34d58ebc796fc749fa0d4260405161270c91815260200190565b60405180910390a2565b60005473ffffffffffffffffffffffffffffffffffffffff163314612797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b6011805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6127ee848484610e2f565b73ffffffffffffffffffffffffffffffffffffffff83163b15806128cf57506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906128689033906000908890889060040161420b565b6020604051808303816000875af1158015612887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ab9190614254565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e736166652044657374696e6174696f6e00000000000000000000000000006044820152606401610bd5565b60005473ffffffffffffffffffffffffffffffffffffffff1633146129b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60606129f282612ff3565b612a58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4552433732314c3a204e756c6c204944000000000000000000000000000000006044820152606401610bd5565b6000612a62611d14565b90506000815111612a825760405180602001604052806000815250612aad565b80612a8c84613983565b604051602001612a9d929190614271565b6040516020818303038152906040525b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612b35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b6000908152600c6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6112458484848460006040518060200160405280600081525061341e565b336000908152600660205260409020547801000000000000000000000000000000000000000000000000900460ff1615612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e732063757272656e746c79206c6f636b65640000000000000000006044820152606401610bd5565b600081118015612c4c5750601f81105b612cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c696420436f6f6c646f776e000000000000000000000000000000006044820152606401610bd5565b336000908152600660205260409020546201518082029068010000000000000000900467ffffffffffffffff1642820111612d49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726f706f73656420636f6f6c646f776e20746f6f20736d616c6c00000000006044820152606401610bd5565b33600081815260066020526040902080547fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff909416939093029290921778010000000000000000000000000000000000000000000000001790915573ffffffffffffffffffffffffffffffffffffffff167f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd6000882604051612e0791815260200190565b60405180910390a250565b6000612e1d836112e8565b15612e5d5773ffffffffffffffffffffffffffffffffffffffff80841660009081526008602090815260408083209386168352929052205460ff16612aad565b60009392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b601055565b60005473ffffffffffffffffffffffffffffffffffffffff163314612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b73ffffffffffffffffffffffffffffffffffffffff8116612fea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a65726f206164647265737300000000000000000000000000000000000000006044820152606401610bd5565b6115bd816132d8565b6003546000908210801561302d575060008281526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156130f05760008281526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1680156130665750600192915050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910160008181526005602052604090205490919073ffffffffffffffffffffffffffffffffffffffff1661dead8114156130c65750600092915050565b73ffffffffffffffffffffffffffffffffffffffff8116156130eb5750600192915050565b613066565b506000919050565b73ffffffffffffffffffffffffffffffffffffffff8216613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f41646472657373203000000000000000000000000000000000000000000000006044820152606401610bd5565b600081116131df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5175616e746974792030000000000000000000000000000000000000000000006044820152606401610bd5565b60035473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320805467ffffffffffffffff8082168901167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161790558483526005909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092179091555b828110156132d05760405160018301929073ffffffffffffffffffffffffffffffffffffffff8616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101613277565b506003555050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000600182116133b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4c6f77205175616e7469747900000000000000000000000000000000000000006044820152606401610bd5565b60005b82811015613413578473ffffffffffffffffffffffffffffffffffffffff166133e6828601611bd7565b73ffffffffffffffffffffffffffffffffffffffff161461340b576000915050612aad565b6001016133bc565b506001949350505050565b613427866112e8565b61348d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b3373ffffffffffffffffffffffffffffffffffffffff871614806134b657506134b68633612e12565b61351c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314c3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b61352786858561334d565b61358d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a204e6f7420426174636861626c65000000000000000000006044820152606401610bd5565b73ffffffffffffffffffffffffffffffffffffffff851661360a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4552433732314c3a2041646472657373203000000000000000000000000000006044820152606401610bd5565b60005b8381101561388857848101600081815260076020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055816136a257600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790556136d7565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b808773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561387f5773ffffffffffffffffffffffffffffffffffffffff87163b158061381957506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff89169063150b7a02906137b290339060009087908a9060040161420b565b6020604051808303816000875af11580156137d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f59190614254565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b61387f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e736166652044657374696e6174696f6e00000000000000000000000000006044820152606401610bd5565b5060010161360d565b5073ffffffffffffffffffffffffffffffffffffffff868116600090815260066020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000080821667ffffffffffffffff9283168b90038316179092558a8616855282852080549283169282168a01909116919091179055878701808452600590925290912054909116158015613928575060035481105b1561397a57600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505050505050565b6060816139c357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156139ed57806139d7816142a0565b91506139e69050600a836141c8565b91506139c7565b60008167ffffffffffffffff811115613a0857613a08613e9d565b6040519080825280601f01601f191660200182016040528015613a32576020820181803683370190505b5090505b8415613ab557613a476001836142d9565b9150613a54600a866142f0565b613a5f906030614304565b60f81b818381518110613a7457613a746141dc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350613aae600a866141c8565b9450613a36565b949350505050565b828054613ac9906140d9565b90600052602060002090601f016020900481019282613aeb5760008555613b4f565b82601f10613b22578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555613b4f565b82800160010185558215613b4f579182015b82811115613b4f578235825591602001919060010190613b34565b50613b5b929150613b5f565b5090565b5b80821115613b5b5760008155600101613b60565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146115bd57600080fd5b600060208284031215613bb457600080fd5b8135612aad81613b74565b60005b83811015613bda578181015183820152602001613bc2565b838111156112455750506000910152565b60008151808452613c03816020860160208601613bbf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612aad6020830184613beb565b600060208284031215613c5a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114613c8557600080fd5b919050565b60008060408385031215613c9d57600080fd5b613ca683613c61565b946020939093013593505050565b600080600060608486031215613cc957600080fd5b613cd284613c61565b9250613ce060208501613c61565b9150604084013590509250925092565b60008060008060808587031215613d0657600080fd5b613d0f85613c61565b9350613d1d60208601613c61565b93969395505050506040820135916060013590565b60008060408385031215613d4557600080fd5b50508035926020909101359150565b600060208284031215613d6657600080fd5b612aad82613c61565b602081526000825160806020840152613d8b60a0840182613beb565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613dc68282613beb565b91505060408401516060840152606084015160808401528091505092915050565b60008060208385031215613dfa57600080fd5b823567ffffffffffffffff80821115613e1257600080fd5b818501915085601f830112613e2657600080fd5b813581811115613e3557600080fd5b866020828501011115613e4757600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015613e9157835183529284019291840191600101613e75565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112613edd57600080fd5b813567ffffffffffffffff80821115613ef857613ef8613e9d565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613f3e57613f3e613e9d565b81604052838152866020858801011115613f5757600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a08688031215613f8f57600080fd5b613f9886613c61565b9450613fa660208701613c61565b93506040860135925060608601359150608086013567ffffffffffffffff811115613fd057600080fd5b613fdc88828901613ecc565b9150509295509295909350565b80358015158114613c8557600080fd5b6000806040838503121561400c57600080fd5b61401583613c61565b915061402360208401613fe9565b90509250929050565b6000806000806080858703121561404257600080fd5b61404b85613c61565b935061405960208601613c61565b925060408501359150606085013567ffffffffffffffff81111561407c57600080fd5b61408887828801613ecc565b91505092959194509250565b6000602082840312156140a657600080fd5b612aad82613fe9565b600080604083850312156140c257600080fd5b6140cb83613c61565b915061402360208401613c61565b600181811c908216806140ed57607f821691505b60208210811415614127577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141945761419461412d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826141d7576141d7614199565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261424a6080830184613beb565b9695505050505050565b60006020828403121561426657600080fd5b8151612aad81613b74565b60008351614283818460208801613bbf565b835190830190614297818360208801613bbf565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142d2576142d261412d565b5060010190565b6000828210156142eb576142eb61412d565b500390565b6000826142ff576142ff614199565b500690565b600082198211156143175761431761412d565b50019056fea264697066735822122009bc70150c9680bd38af050aeff2800edb582c4602c67bc5c4ccaed339889b0464736f6c634300080c0033697066733a2f2f516d615132466172485070723554626a516d76366b6e757344654e425845547a577852476e577a4c7354676e34472f0000000000000000000000006483cb39ca184de2f98b255d8a507c021efbb4bd
Deployed Bytecode
0x60806040526004361061031e5760003560e01c8063844e0acd116101a5578063b88d4fde116100ec578063d9b3c80111610095578063eab8a7121161006f578063eab8a71214610978578063f2fde38b14610998578063f8e76cc0146109b8578063fd8d7ed3146109d857600080fd5b8063d9b3c80114610918578063dd46706414610938578063e985e9c51461095857600080fd5b8063c87b56dd116100c6578063c87b56dd146108c3578063cd6a3ea5146108e3578063d89135cd1461090357600080fd5b8063b88d4fde146107d6578063c48156af146107f6578063c62223311461081657600080fd5b806397309a5b1161014e578063a69df4b511610128578063a69df4b514610774578063ab82782c14610789578063ad2f852a146107a957600080fd5b806397309a5b1461071e578063a22cb46514610734578063a59585a81461075457600080fd5b806387d381cf1161017f57806387d381cf146106be5780638da5cb5b146106de57806395d89b411461070957600080fd5b8063844e0acd1461065c5780638462151c14610671578063860cad791461069e57600080fd5b8063305c7d4a1161026957806355f804b3116102125780636c0360eb116101ec5780636c0360eb1461061257806370a0823114610627578063715018a61461064757600080fd5b806355f804b3146105a05780636065fb33146105c05780636352211e146105f257600080fd5b80633ffea8c8116102435780633ffea8c81461053e57806342842e0e1461056057806342966c681461058057600080fd5b8063305c7d4a146104f95780633ccfd60b1461050f5780633f2981cf1461052457600080fd5b80631d7d5ae4116102cb5780632a55205a116102a55780632a55205a1461047a5780632bbf532a146104c65780632db11544146104e657600080fd5b80631d7d5ae41461042457806323b872dd1461043a57806329dc11021461045a57600080fd5b8063095ea7b3116102fc578063095ea7b3146103bf57806318160ddd146103e15780631b5462e81461040457600080fd5b806301ffc9a71461032357806306fdde0314610358578063081812fc1461037a575b600080fd5b34801561032f57600080fd5b5061034361033e366004613ba2565b6109ee565b60405190151581526020015b60405180910390f35b34801561036457600080fd5b5061036d610ad3565b60405161034f9190613c35565b34801561038657600080fd5b5061039a610395366004613c48565b610b68565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034f565b3480156103cb57600080fd5b506103df6103da366004613c8a565b610c07565b005b3480156103ed57600080fd5b50600454600354035b60405190815260200161034f565b34801561041057600080fd5b506103df61041f366004613c8a565b610d24565b34801561043057600080fd5b506103f660105481565b34801561044657600080fd5b506103df610455366004613cb4565b610e2f565b34801561046657600080fd5b506103df610475366004613cf0565b611229565b34801561048657600080fd5b5061049a610495366004613d32565b61124b565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161034f565b3480156104d257600080fd5b506103436104e1366004613d54565b6112e8565b6103df6104f4366004613c48565b611377565b34801561050557600080fd5b506103f6600f5481565b34801561051b57600080fd5b506103df6115c0565b34801561053057600080fd5b506011546103439060ff1681565b34801561054a57600080fd5b506105536116f5565b60405161034f9190613d6f565b34801561056c57600080fd5b506103df61057b366004613cb4565b61186a565b34801561058c57600080fd5b506103df61059b366004613c48565b61188a565b3480156105ac57600080fd5b506103df6105bb366004613de7565b611b4a565b3480156105cc57600080fd5b5060115461039a90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156105fe57600080fd5b5061039a61060d366004613c48565b611bd7565b34801561061e57600080fd5b5061036d611d14565b34801561063357600080fd5b506103f6610642366004613d54565b611d23565b34801561065357600080fd5b506103df611dd5565b34801561066857600080fd5b506003546103f6565b34801561067d57600080fd5b5061069161068c366004613d54565b611e62565b60405161034f9190613e59565b3480156106aa57600080fd5b506103df6106b9366004613d32565b611ffa565b3480156106ca57600080fd5b506103df6106d9366004613f77565b612375565b3480156106ea57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661039a565b34801561071557600080fd5b5061036d61238b565b34801561072a57600080fd5b506103f6600a5481565b34801561074057600080fd5b506103df61074f366004613ff9565b61239c565b34801561076057600080fd5b506103df61076f366004613c48565b612522565b34801561078057600080fd5b506103df6125a8565b34801561079557600080fd5b506103df6107a4366004613d54565b612716565b3480156107b557600080fd5b5060095461039a9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156107e257600080fd5b506103df6107f136600461402c565b6127e3565b34801561080257600080fd5b506103df610811366004614094565b612935565b34801561082257600080fd5b506108a6610831366004613d54565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205460ff78010000000000000000000000000000000000000000000000008204169167ffffffffffffffff68010000000000000000830481169270010000000000000000000000000000000090041690565b60408051931515845260208401929092529082015260600161034f565b3480156108cf57600080fd5b5061036d6108de366004613c48565b6129e7565b3480156108ef57600080fd5b506103df6108fe366004613c8a565b612ab4565b34801561090f57600080fd5b506004546103f6565b34801561092457600080fd5b506103df610933366004613cf0565b612b88565b34801561094457600080fd5b506103df610953366004613c48565b612ba6565b34801561096457600080fd5b506103436109733660046140af565b612e12565b34801561098457600080fd5b506103df610993366004613c48565b612e66565b3480156109a457600080fd5b506103df6109b3366004613d54565b612eec565b3480156109c457600080fd5b506103436109d3366004613c48565b612ff3565b3480156109e457600080fd5b506103f6600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610a8157507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610acd57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060016000018054610ae5906140d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b11906140d9565b8015610b5e5780601f10610b3357610100808354040283529160200191610b5e565b820191906000526020600020905b815481529060010190602001808311610b4157829003601f168201915b5050505050905090565b6000610b7382612ff3565b610bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4552433732314c3a204e756c6c2049440000000000000000000000000000000060448201526064015b60405180910390fd5b5060009081526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610c1282611bd7565b90503373ffffffffffffffffffffffffffffffffffffffff82161480610c3d5750610c3d8133612e12565b610ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314c3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b60008281526007602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60115473ffffffffffffffffffffffffffffffffffffffff610100909104163314610dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f742047656e6573697320436f6e747261637400000000006044820152606401610bd5565b600d5481610db860035490565b011115610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e73756666696369656e7420737570706c79000000000000000000000000006044820152606401610bd5565b610e2b82826130f8565b5050565b6000610e3a82611bd7565b9050610e45846112e8565b610eab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b3373ffffffffffffffffffffffffffffffffffffffff82161480610eec575033610ed483610b68565b73ffffffffffffffffffffffffffffffffffffffff16145b80610efc5750610efc8133612e12565b610f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314c3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4552433732314c3a204e6f74204f776e657200000000000000000000000000006044820152606401610bd5565b73ffffffffffffffffffffffffffffffffffffffff8316611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4552433732314c3a2041646472657373203000000000000000000000000000006044820152606401610bd5565b600082815260076020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff88811685526006845282852080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000080821667ffffffffffffffff9283167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018316179092558983168088528588208054938416938316600190810190931693909317909255888752600590955283862080549093161790915591850180845292205416158015611175575060035481105b156111c757600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b50818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6112458484848460405180602001604052806000815250612375565b50505050565b6000806000600b54600a5485611261919061415c565b61126b91906141c8565b6000868152600c60205260408120549192509073ffffffffffffffffffffffffffffffffffffffff166112b65760095473ffffffffffffffffffffffffffffffffffffffff166112dc565b6000868152600c602052604090205473ffffffffffffffffffffffffffffffffffffffff165b96919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600660205260408120547801000000000000000000000000000000000000000000000000900460ff16158015610acd57505073ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040902054426801000000000000000090910467ffffffffffffffff161090565b32331480156113855750333b155b6113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f436f6e74726163742043616c6c657200000000000000000000000000000000006044820152606401610bd5565b60115460ff16611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5075626c69632073616c65206e6f7420616374697665000000000000000000006044820152606401610bd5565b6000811180156114695750600f548111155b6114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964207175616e74697479000000000000000000000000000000006044820152606401610bd5565b600d54816114dc60035490565b011115611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e73756666696369656e7420737570706c792072656d61696e696e670000006044820152606401610bd5565b80601054023410156115b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e73756666696369656e74207061796d656e740000000000000000000000006044820152606401610bd5565b6115bd33826130f8565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b6040514790600090339083908381818185875af1925050503d8060008114611685576040519150601f19603f3d011682016040523d82523d6000602084013e61168a565b606091505b5050905080610e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5472616e73666572204572726f720000000000000000000000000000000000006044820152606401610bd5565b6117206040518060800160405280606081526020016060815260200160008152602001600081525090565b600160405180608001604052908160008201805461173d906140d9565b80601f0160208091040260200160405190810160405280929190818152602001828054611769906140d9565b80156117b65780601f1061178b576101008083540402835291602001916117b6565b820191906000526020600020905b81548152906001019060200180831161179957829003601f168201915b505050505081526020016001820180546117cf906140d9565b80601f01602080910402602001604051908101604052809291908181526020018280546117fb906140d9565b80156118485780601f1061181d57610100808354040283529160200191611848565b820191906000526020600020905b81548152906001019060200180831161182b57829003601f168201915b5050505050815260200160028201548152602001600382015481525050905090565b611885838383604051806020016040528060008152506127e3565b505050565b600061189582611bd7565b90506118a0816112e8565b611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b3373ffffffffffffffffffffffffffffffffffffffff8216148061194757503361192f83610b68565b73ffffffffffffffffffffffffffffffffffffffff16145b8061195757506119578133612e12565b6119bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314c3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b600082815260076020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff85811685526006845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff80831691909101167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161790558685526005909352818420805490911661dead179055600480546001908101909155850180845292205416158015611aac575060035481105b15611afe57600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b50604051829061dead9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a45050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b611885600e8383613abd565b60035460009082101561031e5760008281526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1661dead8114611d0e5773ffffffffffffffffffffffffffffffffffffffff811615611c345792915050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910160008181526005602052604090205490919073ffffffffffffffffffffffffffffffffffffffff168015611d095773ffffffffffffffffffffffffffffffffffffffff811661dead1415610acd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e756c6c204f776e6572000000000000000000000000000000000000000000006044820152606401610bd5565b611c34565b50600080fd5b6060600e8054610ae5906140d9565b600073ffffffffffffffffffffffffffffffffffffffff8216611da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f41646472657373203000000000000000000000000000000000000000000000006044820152606401610bd5565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205467ffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314611e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b611e6060006132d8565b565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205460609067ffffffffffffffff1680611efc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f62616c616e6365203000000000000000000000000000000000000000000000006044820152606401610bd5565b60035460008267ffffffffffffffff811115611f1a57611f1a613e9d565b604051908082528060200260200182016040528015611f43578160200160208202803683370190505b50905060008060005b84811015611d0e5760008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff168015611f83578092505b8873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ff15781858580600101965081518110611fd057611fd06141dc565b60200260200101818152505086841415611ff1575092979650505050505050565b50600101611f4c565b600061200583611bd7565b9050612010816112e8565b612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b61208181848461334d565b6120e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a204e6f7420426174636861626c65000000000000000000006044820152606401610bd5565b3373ffffffffffffffffffffffffffffffffffffffff8216148061211057506121108133612e12565b612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314d3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b60005b8281101561227f57838101600081815260076020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055816121fa57600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905561222f565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b604051819061dead9073ffffffffffffffffffffffffffffffffffffffff8616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a450600101612179565b5073ffffffffffffffffffffffffffffffffffffffff8082166000908152600660209081526040808320805467ffffffffffffffff808216899003167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909116179055600480546fffffffffffffffffffffffffffffffff881601905586860180845260059092529091205490911615801561231c575060035481105b15611245576000818152600560205260409020805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905550505050565b6123848585858560018661341e565b5050505050565b6060600180018054610ae5906140d9565b73ffffffffffffffffffffffffffffffffffffffff821633141561241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732314c3a2041646472657373206973204f776e6572000000000000006044820152606401610bd5565b612425336112e8565b61248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b33600081815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b600f55565b336000908152600660205260409020547801000000000000000000000000000000000000000000000000900460ff1661263d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6b656e732063757272656e746c7920756e6c6f636b6564000000000000006044820152606401610bd5565b33600081815260066020526040902080547001000000000000000000000000000000007fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff82160467ffffffffffffffff90811642011668010000000000000000027fffffffffffffff00ffffffffffffffff0000000000000000ffffffffffffffff90911617905573ffffffffffffffffffffffffffffffffffffffff167f0f0bc5b519ddefdd8e5f9e6423433aa2b869738de2ae34d58ebc796fc749fa0d4260405161270c91815260200190565b60405180910390a2565b60005473ffffffffffffffffffffffffffffffffffffffff163314612797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b6011805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6127ee848484610e2f565b73ffffffffffffffffffffffffffffffffffffffff83163b15806128cf57506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906128689033906000908890889060040161420b565b6020604051808303816000875af1158015612887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ab9190614254565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e736166652044657374696e6174696f6e00000000000000000000000000006044820152606401610bd5565b60005473ffffffffffffffffffffffffffffffffffffffff1633146129b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60606129f282612ff3565b612a58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4552433732314c3a204e756c6c204944000000000000000000000000000000006044820152606401610bd5565b6000612a62611d14565b90506000815111612a825760405180602001604052806000815250612aad565b80612a8c84613983565b604051602001612a9d929190614271565b6040516020818303038152906040525b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612b35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b6000908152600c6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6112458484848460006040518060200160405280600081525061341e565b336000908152600660205260409020547801000000000000000000000000000000000000000000000000900460ff1615612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e732063757272656e746c79206c6f636b65640000000000000000006044820152606401610bd5565b600081118015612c4c5750601f81105b612cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c696420436f6f6c646f776e000000000000000000000000000000006044820152606401610bd5565b336000908152600660205260409020546201518082029068010000000000000000900467ffffffffffffffff1642820111612d49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726f706f73656420636f6f6c646f776e20746f6f20736d616c6c00000000006044820152606401610bd5565b33600081815260066020526040902080547fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff909416939093029290921778010000000000000000000000000000000000000000000000001790915573ffffffffffffffffffffffffffffffffffffffff167f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd6000882604051612e0791815260200190565b60405180910390a250565b6000612e1d836112e8565b15612e5d5773ffffffffffffffffffffffffffffffffffffffff80841660009081526008602090815260408083209386168352929052205460ff16612aad565b60009392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b601055565b60005473ffffffffffffffffffffffffffffffffffffffff163314612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616c6c6572206e6f74206f776e6572000000000000000000000000000000006044820152606401610bd5565b73ffffffffffffffffffffffffffffffffffffffff8116612fea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a65726f206164647265737300000000000000000000000000000000000000006044820152606401610bd5565b6115bd816132d8565b6003546000908210801561302d575060008281526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156130f05760008281526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1680156130665750600192915050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910160008181526005602052604090205490919073ffffffffffffffffffffffffffffffffffffffff1661dead8114156130c65750600092915050565b73ffffffffffffffffffffffffffffffffffffffff8116156130eb5750600192915050565b613066565b506000919050565b73ffffffffffffffffffffffffffffffffffffffff8216613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f41646472657373203000000000000000000000000000000000000000000000006044820152606401610bd5565b600081116131df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5175616e746974792030000000000000000000000000000000000000000000006044820152606401610bd5565b60035473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320805467ffffffffffffffff8082168901167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161790558483526005909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092179091555b828110156132d05760405160018301929073ffffffffffffffffffffffffffffffffffffffff8616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101613277565b506003555050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000600182116133b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4c6f77205175616e7469747900000000000000000000000000000000000000006044820152606401610bd5565b60005b82811015613413578473ffffffffffffffffffffffffffffffffffffffff166133e6828601611bd7565b73ffffffffffffffffffffffffffffffffffffffff161461340b576000915050612aad565b6001016133bc565b506001949350505050565b613427866112e8565b61348d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a20546f6b656e73204c6f636b6564000000000000000000006044820152606401610bd5565b3373ffffffffffffffffffffffffffffffffffffffff871614806134b657506134b68633612e12565b61351c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732314c3a204e6f7420417070726f76656400000000000000000000006044820152606401610bd5565b61352786858561334d565b61358d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732314c3a204e6f7420426174636861626c65000000000000000000006044820152606401610bd5565b73ffffffffffffffffffffffffffffffffffffffff851661360a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4552433732314c3a2041646472657373203000000000000000000000000000006044820152606401610bd5565b60005b8381101561388857848101600081815260076020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055816136a257600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790556136d7565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b808773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561387f5773ffffffffffffffffffffffffffffffffffffffff87163b158061381957506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff89169063150b7a02906137b290339060009087908a9060040161420b565b6020604051808303816000875af11580156137d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f59190614254565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b61387f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e736166652044657374696e6174696f6e00000000000000000000000000006044820152606401610bd5565b5060010161360d565b5073ffffffffffffffffffffffffffffffffffffffff868116600090815260066020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000080821667ffffffffffffffff9283168b90038316179092558a8616855282852080549283169282168a01909116919091179055878701808452600590925290912054909116158015613928575060035481105b1561397a57600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505050505050565b6060816139c357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156139ed57806139d7816142a0565b91506139e69050600a836141c8565b91506139c7565b60008167ffffffffffffffff811115613a0857613a08613e9d565b6040519080825280601f01601f191660200182016040528015613a32576020820181803683370190505b5090505b8415613ab557613a476001836142d9565b9150613a54600a866142f0565b613a5f906030614304565b60f81b818381518110613a7457613a746141dc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350613aae600a866141c8565b9450613a36565b949350505050565b828054613ac9906140d9565b90600052602060002090601f016020900481019282613aeb5760008555613b4f565b82601f10613b22578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555613b4f565b82800160010185558215613b4f579182015b82811115613b4f578235825591602001919060010190613b34565b50613b5b929150613b5f565b5090565b5b80821115613b5b5760008155600101613b60565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146115bd57600080fd5b600060208284031215613bb457600080fd5b8135612aad81613b74565b60005b83811015613bda578181015183820152602001613bc2565b838111156112455750506000910152565b60008151808452613c03816020860160208601613bbf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612aad6020830184613beb565b600060208284031215613c5a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114613c8557600080fd5b919050565b60008060408385031215613c9d57600080fd5b613ca683613c61565b946020939093013593505050565b600080600060608486031215613cc957600080fd5b613cd284613c61565b9250613ce060208501613c61565b9150604084013590509250925092565b60008060008060808587031215613d0657600080fd5b613d0f85613c61565b9350613d1d60208601613c61565b93969395505050506040820135916060013590565b60008060408385031215613d4557600080fd5b50508035926020909101359150565b600060208284031215613d6657600080fd5b612aad82613c61565b602081526000825160806020840152613d8b60a0840182613beb565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613dc68282613beb565b91505060408401516060840152606084015160808401528091505092915050565b60008060208385031215613dfa57600080fd5b823567ffffffffffffffff80821115613e1257600080fd5b818501915085601f830112613e2657600080fd5b813581811115613e3557600080fd5b866020828501011115613e4757600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015613e9157835183529284019291840191600101613e75565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112613edd57600080fd5b813567ffffffffffffffff80821115613ef857613ef8613e9d565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613f3e57613f3e613e9d565b81604052838152866020858801011115613f5757600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a08688031215613f8f57600080fd5b613f9886613c61565b9450613fa660208701613c61565b93506040860135925060608601359150608086013567ffffffffffffffff811115613fd057600080fd5b613fdc88828901613ecc565b9150509295509295909350565b80358015158114613c8557600080fd5b6000806040838503121561400c57600080fd5b61401583613c61565b915061402360208401613fe9565b90509250929050565b6000806000806080858703121561404257600080fd5b61404b85613c61565b935061405960208601613c61565b925060408501359150606085013567ffffffffffffffff81111561407c57600080fd5b61408887828801613ecc565b91505092959194509250565b6000602082840312156140a657600080fd5b612aad82613fe9565b600080604083850312156140c257600080fd5b6140cb83613c61565b915061402360208401613c61565b600181811c908216806140ed57607f821691505b60208210811415614127577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141945761419461412d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826141d7576141d7614199565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261424a6080830184613beb565b9695505050505050565b60006020828403121561426657600080fd5b8151612aad81613b74565b60008351614283818460208801613bbf565b835190830190614297818360208801613bbf565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142d2576142d261412d565b5060010190565b6000828210156142eb576142eb61412d565b500390565b6000826142ff576142ff614199565b500690565b600082198211156143175761431761412d565b50019056fea264697066735822122009bc70150c9680bd38af050aeff2800edb582c4602c67bc5c4ccaed339889b0464736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006483cb39ca184de2f98b255d8a507c021efbb4bd
-----Decoded View---------------
Arg [0] : _genesisAddress (address): 0x6483cb39ca184DE2F98B255d8a507c021EFBb4bd
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006483cb39ca184de2f98b255d8a507c021efbb4bd
Deployed Bytecode Sourcemap
35869:2985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30812:340;;;;;;;;;;-1:-1:-1;30812:340:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;30812:340:0;;;;;;;;27552:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25829:174::-;;;;;;;;;;-1:-1:-1;25829:174:0;;;;;:::i;:::-;;:::i;:::-;;;1809:42:1;1797:55;;;1779:74;;1767:2;1752:18;25829:174:0;1633:226:1;25355:315:0;;;;;;;;;;-1:-1:-1;25355:315:0;;;;;:::i;:::-;;:::i;:::-;;22566:161;;;;;;;;;;-1:-1:-1;22686:22:0;;;22662:21;:46;22566:161;;;2470:25:1;;;2458:2;2443:18;22566:161:0;2324:177:1;36791:227:0;;;;;;;;;;-1:-1:-1;36791:227:0;;;;;:::i;:::-;;:::i;36260:41::-;;;;;;;;;;;;;;;;16681:979;;;;;;;;;;-1:-1:-1;16681:979:0;;;;;:::i;:::-;;:::i;19680:180::-;;;;;;;;;;-1:-1:-1;19680:180:0;;;;;:::i;:::-;;:::i;38099:367::-;;;;;;;;;;-1:-1:-1;38099:367:0;;;;;:::i;:::-;;:::i;:::-;;;;3698:42:1;3686:55;;;3668:74;;3773:2;3758:18;;3751:34;;;;3641:18;38099:367:0;3494:297:1;16200:181:0;;;;;;;;;;-1:-1:-1;16200:181:0;;;;;:::i;:::-;;:::i;37024:448::-;;;;;;:::i;:::-;;:::i;36221:32::-;;;;;;;;;;;;;;;;38623:226;;;;;;;;;;;;;:::i;36308:24::-;;;;;;;;;;-1:-1:-1;36308:24:0;;;;;;;;30686:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17737:142::-;;;;;;;;;;-1:-1:-1;17737:142:0;;;;;:::i;:::-;;:::i;33330:915::-;;;;;;;;;;-1:-1:-1;33330:915:0;;;;;:::i;:::-;;:::i;37576:101::-;;;;;;;;;;-1:-1:-1;37576:101:0;;;;;:::i;:::-;;:::i;36339:29::-;;;;;;;;;;-1:-1:-1;36339:29:0;;;;;;;;;;;32090:1011;;;;;;;;;;-1:-1:-1;32090:1011:0;;;;;:::i;:::-;;:::i;37478:92::-;;;;;;;;;;;;;:::i;13775:181::-;;;;;;;;;;-1:-1:-1;13775:181:0;;;;;:::i;:::-;;:::i;29755:103::-;;;;;;;;;;;;;:::i;22826:101::-;;;;;;;;;;-1:-1:-1;22898:21:0;;22826:101;;28642:898;;;;;;;;;;-1:-1:-1;28642:898:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34537:1323::-;;;;;;;;;;-1:-1:-1;34537:1323:0;;;;;:::i;:::-;;:::i;20700:206::-;;;;;;;;;;-1:-1:-1;20700:206:0;;;;;:::i;:::-;;:::i;29548:87::-;;;;;;;;;;-1:-1:-1;29586:7:0;29613:14;;;29548:87;;27726:102;;;;;;;;;;;;;:::i;35952:32::-;;;;;;;;;;;;;;;;24156:348;;;;;;;;;;-1:-1:-1;24156:348:0;;;;;:::i;:::-;;:::i;37779:102::-;;;;;;;;;;-1:-1:-1;37779:102:0;;;;;:::i;:::-;;:::i;27084:394::-;;;;;;;;;;;;;:::i;37991:102::-;;;;;;;;;;-1:-1:-1;37991:102:0;;;;;:::i;:::-;;:::i;35916:29::-;;;;;;;;;;-1:-1:-1;35916:29:0;;;;;;;;18629:384;;;;;;;;;;-1:-1:-1;18629:384:0;;;;;:::i;:::-;;:::i;37683:90::-;;;;;;;;;;-1:-1:-1;37683:90:0;;;;;:::i;:::-;;:::i;30381:224::-;;;;;;;;;;-1:-1:-1;30381:224:0;;;;;:::i;:::-;30482:20;;30439:4;30482:20;;;:12;:20;;;;;:27;;;;;;;30511:42;;;;;;;30555:41;;;;;30381:224;;;;;8930:14:1;;8923:22;8905:41;;8977:2;8962:18;;8955:34;;;;9005:18;;;8998:34;8893:2;8878:18;30381:224:0;8709:329:1;27934:294:0;;;;;;;;;;-1:-1:-1;27934:294:0;;;;;:::i;:::-;;:::i;38474:143::-;;;;;;;;;;-1:-1:-1;38474:143:0;;;;;:::i;:::-;;:::i;23025:101::-;;;;;;;;;;-1:-1:-1;23096:22:0;;23025:101;;19418:180;;;;;;;;;;-1:-1:-1;19418:180:0;;;;;:::i;:::-;;:::i;26233:623::-;;;;;;;;;;-1:-1:-1;26233:623:0;;;;;:::i;:::-;;:::i;24698:179::-;;;;;;;;;;-1:-1:-1;24698:179:0;;;;;:::i;:::-;;:::i;37887:98::-;;;;;;;;;;-1:-1:-1;37887:98:0;;;;;:::i;:::-;;:::i;29866:167::-;;;;;;;;;;-1:-1:-1;29866:167:0;;;;;:::i;:::-;;:::i;31219:863::-;;;;;;;;;;-1:-1:-1;31219:863:0;;;;;:::i;:::-;;:::i;35991:41::-;;;;;;;;;;;;;;;;30812:340;30888:4;30925:25;;;;;;:101;;-1:-1:-1;31001:25:0;;;;;30925:101;:177;;;-1:-1:-1;31077:25:0;;;;;30925:177;30905:197;30812:340;-1:-1:-1;;30812:340:0:o;27552:98::-;27589:13;27622:15;:20;;27615:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27552:98;:::o;25829:174::-;25888:7;25916:16;25924:7;25916;:16::i;:::-;25908:45;;;;;;;9952:2:1;25908:45:0;;;9934:21:1;9991:2;9971:18;;;9964:30;10030:18;10010;;;10003:46;10066:18;;25908:45:0;;;;;;;;;-1:-1:-1;25971:24:0;;;;:15;:24;;;;;;;;;25829:174::o;25355:315::-;25419:18;25440:16;25448:7;25440;:16::i;:::-;25419:37;-1:-1:-1;12432:10:0;25475:26;;;;;:72;;-1:-1:-1;25505:42:0;25522:10;12432;24698:179;:::i;25505:42::-;25467:106;;;;;;;10297:2:1;25467:106:0;;;10279:21:1;10336:2;10316:18;;;10309:30;10375:23;10355:18;;;10348:51;10416:18;;25467:106:0;10095:345:1;25467:106:0;25584:24;;;;:15;:24;;;;;;:29;;;;;;;;;;;;;;25629:33;;25584:24;;25629:33;;;;;;;25408:262;25355:315;;:::o;36791:227::-;36709:14;;:30;:14;;;;;12432:10;36709:30;36701:70;;;;;;;10647:2:1;36701:70:0;;;10629:21:1;10686:2;10666:18;;;10659:30;10725:29;10705:18;;;10698:57;10772:18;;36701:70:0;10445:351:1;36701:70:0;36938:9:::1;;36925;36908:14;22898:21:::0;;;22826:101;36908:14:::1;:26;:39;;36900:71;;;::::0;::::1;::::0;;11003:2:1;36900:71:0::1;::::0;::::1;10985:21:1::0;11042:2;11022:18;;;11015:30;11081:21;11061:18;;;11054:49;11120:18;;36900:71:0::1;10801:343:1::0;36900:71:0::1;36987:25;36993:7;37002:9;36987:5;:25::i;:::-;36791:227:::0;;:::o;16681:979::-;16772:20;16795:16;16803:7;16795;:16::i;:::-;16772:39;;16830:16;16841:4;16830:10;:16::i;:::-;16822:51;;;;;;;11351:2:1;16822:51:0;;;11333:21:1;11390:2;11370:18;;;11363:30;11429:24;11409:18;;;11402:52;11471:18;;16822:51:0;11149:346:1;16822:51:0;12432:10;16893:28;;;;;:81;;-1:-1:-1;12432:10:0;16938:20;16950:7;16938:11;:20::i;:::-;:36;;;16893:81;:141;;;-1:-1:-1;16991:43:0;17008:12;12432:10;24698:179;:::i;16991:43::-;16884:177;;;;;;;10297:2:1;16884:177:0;;;10279:21:1;10336:2;10316:18;;;10309:30;10375:23;10355:18;;;10348:51;10416:18;;16884:177:0;10095:345:1;16884:177:0;17096:4;17080:20;;:12;:20;;;17072:51;;;;;;;11702:2:1;17072:51:0;;;11684:21:1;11741:2;11721:18;;;11714:30;11780:20;11760:18;;;11753:48;11818:18;;17072:51:0;11500:342:1;17072:51:0;17142:16;;;17134:47;;;;;;;12049:2:1;17134:47:0;;;12031:21:1;12088:2;12068:18;;;12061:30;12127:20;12107:18;;;12100:48;12165:18;;17134:47:0;11847:342:1;17134:47:0;17201:24;;;;:15;:24;;;;;;;;17194:31;;;;;;;;;;17262:18;;;;;:12;:18;;;;;:31;;;;;;;;;;;;;;;;;;17308:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;17308:29:0;;;;;;;;;;;;;17352:20;;;:11;:20;;;;;;:25;;;;;;;;;17414:11;;;17444:24;;;;;;;:38;:77;;;;-1:-1:-1;17500:21:0;;17486:35;;17444:77;17440:157;;;17542:24;;;;:11;:24;;;;;:39;;;;;;;;;;17440:157;17237:371;17644:7;17640:2;17625:27;;17634:4;17625:27;;;;;;;;;;;;16761:899;16681:979;;;:::o;19680:180::-;19798:54;19820:4;19826:2;19830:7;19839:8;19798:54;;;;;;;;;;;;:21;:54::i;:::-;19680:180;;;;:::o;38099:367::-;38181:16;38199:21;38231:14;38276:18;;38262:11;;38249:10;:24;;;;:::i;:::-;38248:47;;;;:::i;:::-;38304:23;38330:27;;;:17;:27;;;;;;38231:64;;-1:-1:-1;38304:23:0;38330:41;:27;:88;;38404:14;;;;38330:88;;;38374:27;;;;:17;:27;;;;;;;;38330:88;38304:114;38452:6;;-1:-1:-1;38099:367:0;;-1:-1:-1;;;;38099:367:0:o;16200:181::-;16282:20;;;16257:4;16282:20;;;:12;:20;;;;;:27;;;;;;16281:28;:92;;;;-1:-1:-1;;16313:20:0;;;;;;:12;:20;;;;;:42;16358:15;16313:42;;;;;;:60;;16200:181::o;37024:448::-;36567:9;12432:10;36567:25;:58;;;;-1:-1:-1;12432:10:0;36596:24;:29;36567:58;36559:86;;;;;;;13132:2:1;36559:86:0;;;13114:21:1;13171:2;13151:18;;;13144:30;13210:17;13190:18;;;13183:45;13245:18;;36559:86:0;12930:339:1;36559:86:0;37108:12:::1;::::0;::::1;;37100:47;;;::::0;::::1;::::0;;13476:2:1;37100:47:0::1;::::0;::::1;13458:21:1::0;13515:2;13495:18;;;13488:30;13554:24;13534:18;;;13527:52;13596:18;;37100:47:0::1;13274:346:1::0;37100:47:0::1;37174:1;37162:9;:13;:43;;;;;37192:13;;37179:9;:26;;37162:43;37154:72;;;::::0;::::1;::::0;;13827:2:1;37154:72:0::1;::::0;::::1;13809:21:1::0;13866:2;13846:18;;;13839:30;13905:18;13885;;;13878:46;13941:18;;37154:72:0::1;13625:340:1::0;37154:72:0::1;37294:9;;37281;37264:14;22898:21:::0;;;22826:101;37264:14:::1;:26;:39;;37256:81;;;::::0;::::1;::::0;;14172:2:1;37256:81:0::1;::::0;::::1;14154:21:1::0;14211:2;14191:18;;;14184:30;14250:31;14230:18;;;14223:59;14299:18;;37256:81:0::1;13970:353:1::0;37256:81:0::1;37386:9;37369:14;;:26;37356:9;:39;;37348:72;;;::::0;::::1;::::0;;14530:2:1;37348:72:0::1;::::0;::::1;14512:21:1::0;14569:2;14549:18;;;14542:30;14608:22;14588:18;;;14581:50;14648:18;;37348:72:0::1;14328:344:1::0;37348:72:0::1;37436:30;12432:10:::0;37456:9:::1;37436:5;:30::i;:::-;37024:448:::0;:::o;38623:226::-;29586:7;29613:14;29683:23;29613:14;12432:10;29683:23;29675:52;;;;;;;14879:2:1;29675:52:0;;;14861:21:1;14918:2;14898:18;;;14891:30;14957:18;14937;;;14930:46;14993:18;;29675:52:0;14677:340:1;29675:52:0;38746:51:::1;::::0;38698:21:::1;::::0;38673:22:::1;::::0;38754:10:::1;::::0;38698:21;;38673:22;38746:51;38673:22;38746:51;38698:21;38754:10;38746:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38730:67;;;38816:4;38808:31;;;::::0;::::1;::::0;;15434:2:1;38808:31:0::1;::::0;::::1;15416:21:1::0;15473:2;15453:18;;;15446:30;15512:16;15492:18;;;15485:44;15546:18;;38808:31:0::1;15232:338:1::0;30686:118:0;30740:21;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30740:21:0;30781:15;30774:22;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30686:118;:::o;17737:142::-;17832:39;17849:4;17855:2;17859:7;17832:39;;;;;;;;;;;;:16;:39::i;:::-;17737:142;;;:::o;33330:915::-;33379:17;33399:16;33407:7;33399;:16::i;:::-;33379:36;;33434:21;33445:9;33434:10;:21::i;:::-;33426:56;;;;;;;11351:2:1;33426:56:0;;;11333:21:1;11390:2;11370:18;;;11363:30;11429:24;11409:18;;;11402:52;11471:18;;33426:56:0;11149:346:1;33426:56:0;12432:10;33502:25;;;;;:78;;-1:-1:-1;12432:10:0;33544:20;33556:7;33544:11;:20::i;:::-;:36;;;33502:78;:136;;;-1:-1:-1;33597:41:0;33614:9;12432:10;24698:179;:::i;33597:41::-;33493:172;;;;;;;10297:2:1;33493:172:0;;;10279:21:1;10336:2;10316:18;;;10309:30;10375:23;10355:18;;;10348:51;10416:18;;33493:172:0;10095:345:1;33493:172:0;33685:24;;;;:15;:24;;;;;;;;33678:31;;;;;;;;;;33745:23;;;;;:12;:23;;;;;:36;;;;;;;;;;;;;;;;;;;33796:20;;;:11;:20;;;;;;:74;;;;;33827:42;33796:74;;;33885:22;:24;;33678:31;33885:24;;;;;;33946:11;;33976:24;;;;;;;:38;:77;;;;-1:-1:-1;34032:21:0;;34018:35;;33976:77;33972:156;;;34074:24;;;;:11;:24;;;;;:36;;;;;;;;;;33972:156;-1:-1:-1;34156:81:0;;34229:7;;34184:42;;34156:81;;;;;;;;;33368:877;33330:915;:::o;37576:101::-;29586:7;29613:14;29683:23;29613:14;12432:10;29683:23;29675:52;;;;;;;14879:2:1;29675:52:0;;;14861:21:1;14918:2;14898:18;;;14891:30;14957:18;14937;;;14930:46;14993:18;;29675:52:0;14677:340:1;29675:52:0;37650:21:::1;:8;37661:10:::0;;37650:21:::1;:::i;32090:1011::-:0;32213:21;;32154:7;;32203:31;;32199:862;;;32255:17;32275:20;;;:11;:20;;;;;;;;32339:42;32318:64;;32314:732;;32411:23;;;;32407:96;;32470:9;32090:1011;-1:-1:-1;;32090:1011:0:o;32407:96::-;-1:-1:-1;32565:9:0;;;;32613:20;;;;:11;:20;;;;;;32565:9;;-1:-1:-1;32613:20:0;;32664:23;;32660:292;;32724:64;;;32745:42;32724:64;32720:158;;;32825:21;;;;;15777:2:1;32825:21:0;;;15759::1;15816:2;15796:18;;;15789:30;15855:12;15835:18;;;15828:40;15885:18;;32825:21:0;15575:334:1;32660:292:0;32525:502;;;32236:825;33084:9;;;37478:92;37527:13;37556:8;37549:15;;;;;:::i;13775:181::-;13831:7;13859:20;;;13851:42;;;;;;;16116:2:1;13851:42:0;;;16098:21:1;16155:1;16135:18;;;16128:29;16193:11;16173:18;;;16166:39;16222:18;;13851:42:0;15914:332:1;13851:42:0;-1:-1:-1;13919:20:0;;;;;;:12;:20;;;;;:28;;;;13775:181::o;29755:103::-;29586:7;29613:14;29683:23;29613:14;12432:10;29683:23;29675:52;;;;;;;14879:2:1;29675:52:0;;;14861:21:1;14918:2;14898:18;;;14891:30;14957:18;14937;;;14930:46;14993:18;;29675:52:0;14677:340:1;29675:52:0;29820:30:::1;29847:1;29820:18;:30::i;:::-;29755:103::o:0;28642:898::-;28752:20;;;28731:18;28752:20;;;:12;:20;;;;;:28;28702:16;;28752:28;;28799:14;28791:36;;;;;;;16453:2:1;28791:36:0;;;16435:21:1;16492:1;16472:18;;;16465:29;16530:11;16510:18;;;16503:39;16559:18;;28791:36:0;16251:332:1;28791:36:0;28855:21;;28838:14;28929:10;28915:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28915:25:0;;28887:53;;28951:18;28980:20;29043:9;29038:463;29058:6;29054:1;:10;29038:463;;;29090:22;29115:14;;;:11;:14;;;;;;;;29152:28;;29148:106;;29220:14;29205:29;;29148:106;29292:6;29276:22;;:12;:22;;;29272:214;;;29348:1;29323:8;29332:12;;;;;;29323:22;;;;;;;;:::i;:::-;;;;;;:26;;;;;29390:10;29376;:24;29372:95;;;-1:-1:-1;29435:8:0;;28642:898;-1:-1:-1;;;;;;;28642:898:0:o;29372:95::-;-1:-1:-1;29066:3:0;;29038:463;;34537:1323;34609:20;34632:16;34640:7;34632;:16::i;:::-;34609:39;;34667:24;34678:12;34667:10;:24::i;:::-;34659:59;;;;;;;11351:2:1;34659:59:0;;;11333:21:1;11390:2;11370:18;;;11363:30;11429:24;11409:18;;;11402:52;11471:18;;34659:59:0;11149:346:1;34659:59:0;34737:48;34753:12;34767:7;34776:8;34737:15;:48::i;:::-;34729:83;;;;;;;16979:2:1;34729:83:0;;;16961:21:1;17018:2;16998:18;;;16991:30;17057:24;17037:18;;;17030:52;17099:18;;34729:83:0;16777:346:1;34729:83:0;12432:10;34831:28;;;;;:76;;-1:-1:-1;34863:44:0;34880:12;12432:10;24698:179;:::i;34863:44::-;34823:110;;;;;;;17330:2:1;34823:110:0;;;17312:21:1;17369:2;17349:18;;;17342:30;17408:23;17388:18;;;17381:51;17449:18;;34823:110:0;17128:345:1;34823:110:0;34984:9;34979:506;34999:8;34995:1;:12;34979:506;;;35056:11;;;35033:20;35093:29;;;:15;:29;;;;;35086:36;;;;;;35147:6;35143:214;;35177:25;;;;:11;:25;;;;;:79;;;;35213:42;35177:79;;;35143:214;;;35312:25;;;;:11;:25;;;;;35305:32;;;;;;35143:214;35380:89;;35456:12;;35411:42;;35380:89;;;;;;;;;-1:-1:-1;35009:3:0;;34979:506;;;-1:-1:-1;35499:26:0;;;;;;;;:12;:26;;;;;;;;:54;;;;;;;;;;;;;;;;;35568:22;:43;;;;;;;;35648:18;;;35685:24;;;:11;:24;;;;;;;35648:18;;35685:24;:38;:77;;;;-1:-1:-1;35741:21:0;;35727:35;;35685:77;35681:159;;;35783:24;;;;:11;:24;;;;;:39;;;;;;;;;;;;34954:897;34598:1262;34537:1323;;:::o;20700:206::-;20838:60;20857:4;20863:2;20867:7;20876:8;20886:4;20892:5;20838:18;:60::i;:::-;20700:206;;;;;:::o;27726:102::-;27765:13;27798:15;:22;;27791:29;;;;;:::i;24156:348::-;24242:24;;;12432:10;24242:24;;24234:62;;;;;;;17680:2:1;24234:62:0;;;17662:21:1;17719:2;17699:18;;;17692:30;17758:27;17738:18;;;17731:55;17803:18;;24234:62:0;17478:349:1;24234:62:0;24315:24;12432:10;16200:181;:::i;24315:24::-;24307:59;;;;;;;11351:2:1;24307:59:0;;;11333:21:1;11390:2;11370:18;;;11363:30;11429:24;11409:18;;;11402:52;11471:18;;24307:59:0;11149:346:1;24307:59:0;12432:10;24379:32;;;;:18;:32;;;;;;;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;24448:48;;586:41:1;;;24379:42:0;;12432:10;24448:48;;559:18:1;24448:48:0;;;;;;;24156:348;;:::o;37779:102::-;29586:7;29613:14;29683:23;29613:14;12432:10;29683:23;29675:52;;;;;;;14879:2:1;29675:52:0;;;14861:21:1;14918:2;14898:18;;;14891:30;14957:18;14937;;;14930:46;14993:18;;29675:52:0;14677:340:1;29675:52:0;37850:13:::1;:25:::0;37779:102::o;27084:394::-;12432:10;27128:26;;;;:12;:26;;;;;:33;;;;;;27120:71;;;;;;;18034:2:1;27120:71:0;;;18016:21:1;18073:2;18053:18;;;18046:30;18112:27;18092:18;;;18085:55;18157:18;;27120:71:0;17832:349:1;27120:71:0;12432:10;27211:26;;;;:12;:26;;;;;27204:40;;27356:47;27204:40;;;27356:47;;;;;27338:15;:65;27280:124;;;;;;;;;;27431:39;;;27454:15;27431:39;;;;2470:25:1;;2458:2;2443:18;;2324:177;27431:39:0;;;;;;;;27084:394::o;37991:102::-;29586:7;29613:14;29683:23;29613:14;12432:10;29683:23;29675:52;;;;;;;14879:2:1;29675:52:0;;;14861:21:1;14918:2;14898:18;;;14891:30;14957:18;14937;;;14930:46;14993:18;;29675:52:0;14677:340:1;29675:52:0;38062:14:::1;:25:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;37991:102::o;18629:384::-;18744:31;18757:4;18763:2;18767:7;18744:12;:31::i;:::-;18794:14;;;;:19;;:188;;-1:-1:-1;18834:82:0;;18937:45;18834:82;;;18937:45;18834:40;;;;18937:45;;18834:82;;12432:10;;18897:1;;18901:7;;18910:5;;18834:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:148;;;18794:188;18786:219;;;;;;;19159:2:1;18786:219:0;;;19141:21:1;19198:2;19178:18;;;19171:30;19237:20;19217:18;;;19210:48;19275:18;;18786:219:0;18957:342:1;37683:90:0;29586:7;29613:14;29683:23;29613:14;12432:10;29683:23;29675:52;;;;;;;14879:2:1;29675:52:0;;;14861:21:1;14918:2;14898:18;;;14891:30;14957:18;14937;;;14930:46;14993:18;;29675:52:0;14677:340:1;29675:52:0;37746:12:::1;:21:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;37683:90::o;27934:294::-;27998:13;28032:16;28040:7;28032;:16::i;:::-;28024:45;;;;;;;9952:2:1;28024:45:0;;;9934:21:1;9991:2;9971:18;;;9964:30;10030:18;10010;;;10003:46;10066:18;;28024:45:0;9750:340:1;28024:45:0;28080:22;28105:9;:7;:9::i;:::-;28080:34;;28157:1;28138:8;28132:22;:26;:88;;;;;;;;;;;;;;;;;28185:8;28195:18;:7;:16;:18::i;:::-;28168:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28132:88;28125:95;27934:294;-1:-1:-1;;;27934:294:0:o;38474:143::-;29586:7;29613:14;29683:23;29613:14;12432:10;29683:23;29675:52;;;;;;;14879:2:1;29675:52:0;;;14861:21:1;14918:2;14898:18;;;14891:30;14957:18;14937;;;14930:46;14993:18;;29675:52:0;14677:340:1;29675:52:0;38573:26:::1;::::0;;;:17:::1;:26;::::0;;;;:37;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;38474:143::o;19418:180::-;19532:58;19551:4;19557:2;19561:7;19570:8;19580:5;19532:58;;;;;;;;;;;;:18;:58::i;26233:623::-;12432:10;26293:26;;;;:12;:26;;;;;:33;;;;;;26292:34;26284:70;;;;;;;19981:2:1;26284:70:0;;;19963:21:1;20020:2;20000:18;;;19993:30;20059:25;20039:18;;;20032:53;20102:18;;26284:70:0;19779:347:1;26284:70:0;26385:1;26373:9;:13;:31;;;;;26402:2;26390:9;:14;26373:31;26365:60;;;;;;;20333:2:1;26365:60:0;;;20315:21:1;20372:2;20352:18;;;20345:30;20411:18;20391;;;20384:46;20447:18;;26365:60:0;20131:340:1;26365:60:0;12432:10;26461:24;26566:26;;;:12;:26;;;;;:48;26500:6;26488:18;;;26566:48;;;;;26529:15;:34;;:85;26521:125;;;;;;;20678:2:1;26521:125:0;;;20660:21:1;20717:2;20697:18;;;20690:30;20756:29;20736:18;;;20729:57;20803:18;;26521:125:0;20476:351:1;26521:125:0;12432:10;26661:26;;;;:12;:26;;;;;:40;;26716:74;;;;;;;;;;;;;;;26661:40;26716:74;;;;26817:31;;;26838:9;26817:31;;;;2470:25:1;;2458:2;2443:18;;2324:177;26817:31:0;;;;;;;;26233:623;:::o;24698:179::-;24779:4;24804:18;24815:6;24804:10;:18::i;:::-;24803:19;:66;;24833:26;;;;;;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;24803:66;;;24825:5;24796:73;24698:179;-1:-1:-1;;;24698:179:0:o;37887:98::-;29586:7;29613:14;29683:23;29613:14;12432:10;29683:23;29675:52;;;;;;;14879:2:1;29675:52:0;;;14861:21:1;14918:2;14898:18;;;14891:30;14957:18;14937;;;14930:46;14993:18;;29675:52:0;14677:340:1;29675:52:0;37956:14:::1;:23:::0;37887:98::o;29866:167::-;29586:7;29613:14;29683:23;29613:14;12432:10;29683:23;29675:52;;;;;;;14879:2:1;29675:52:0;;;14861:21:1;14918:2;14898:18;;;14891:30;14957:18;14937;;;14930:46;14993:18;;29675:52:0;14677:340:1;29675:52:0;29947:22:::1;::::0;::::1;29939:47;;;::::0;::::1;::::0;;21034:2:1;29939:47:0::1;::::0;::::1;21016:21:1::0;21073:2;21053:18;;;21046:30;21112:14;21092:18;;;21085:42;21144:18;;29939:47:0::1;20832:336:1::0;29939:47:0::1;29997:28;30016:8;29997:18;:28::i;31219:863::-:0;31314:21;;31283:4;;31304:31;;:110;;;;-1:-1:-1;31339:20:0;;;;:11;:20;;;;;;:75;:20;31371:42;31339:75;;31304:110;31300:750;;;31459:20;31482;;;:11;:20;;;;;;;;31525:26;;31521:86;;-1:-1:-1;31583:4:0;;31219:863;-1:-1:-1;;31219:863:0:o;31521:86::-;-1:-1:-1;31663:9:0;;;;31710:20;;;;:11;:20;;;;;;31663:9;;-1:-1:-1;31710:20:0;;31781:42;31757:67;;31753:136;;;-1:-1:-1;31860:5:0;;31219:863;-1:-1:-1;;31219:863:0:o;31753:136::-;31915:26;;;;31911:94;;-1:-1:-1;31977:4:0;;31219:863;-1:-1:-1;;31219:863:0:o;31911:94::-;31627:397;;31300:750;-1:-1:-1;32069:5:0;;31219:863;-1:-1:-1;31219:863:0:o;14170:550::-;14243:16;;;14235:38;;;;;;;16116:2:1;14235:38:0;;;16098:21:1;16155:1;16135:18;;;16128:29;16193:11;16173:18;;;16166:39;16222:18;;14235:38:0;15914:332:1;14235:38:0;14303:1;14292:8;:12;14284:35;;;;;;;21375:2:1;14284:35:0;;;21357:21:1;21414:2;21394:18;;;21387:30;21453:12;21433:18;;;21426:40;21483:18;;14284:35:0;21173:334:1;14284:35:0;14380:21;;14416:16;;;14357:20;14416:16;;;:12;:16;;;;;;;;:44;;;;;;;;;;;;;;;;14475:25;;;:11;:25;;;;;:30;;;;;;;;;;14534:115;14554:8;14550:1;:12;14534:115;;;14593:40;;14618:14;;;;;14593:40;;;;14610:1;;14593:40;;14610:1;;14593:40;14564:3;;14534:115;;;-1:-1:-1;14665:21:0;:36;-1:-1:-1;;14170:550:0:o;30041:199::-;30107:16;30126:14;;;30151:25;;;;;;;;;;30192:40;;30126:14;;;;;;;30192:40;;30107:16;30192:40;30096:144;30041:199;:::o;23373:406::-;23481:4;23517:1;23506:8;:12;23498:37;;;;;;;21714:2:1;23498:37:0;;;21696:21:1;21753:2;21733:18;;;21726:30;21792:14;21772:18;;;21765:42;21824:18;;23498:37:0;21512:336:1;23498:37:0;23576:9;23571:168;23591:8;23587:1;:12;23571:168;;;23653:15;23629:39;;:20;23647:1;23637:7;:11;23629:7;:20::i;:::-;:39;;;23625:99;;23699:5;23692:12;;;;;23625:99;23601:3;;23571:168;;;-1:-1:-1;23767:4:0;;23373:406;-1:-1:-1;;;;23373:406:0:o;20914:1554::-;21063:16;21074:4;21063:10;:16::i;:::-;21055:51;;;;;;;11351:2:1;21055:51:0;;;11333:21:1;11390:2;11370:18;;;11363:30;11429:24;11409:18;;;11402:52;11471:18;;21055:51:0;11149:346:1;21055:51:0;12432:10;21125:20;;;;;:59;;-1:-1:-1;21149:35:0;21166:4;12432:10;24698:179;:::i;21149:35::-;21117:93;;;;;;;10297:2:1;21117:93:0;;;10279:21:1;10336:2;10316:18;;;10309:30;10375:23;10355:18;;;10348:51;10416:18;;21117:93:0;10095:345:1;21117:93:0;21229:40;21245:4;21251:7;21260:8;21229:15;:40::i;:::-;21221:75;;;;;;;16979:2:1;21221:75:0;;;16961:21:1;17018:2;16998:18;;;16991:30;17057:24;17037:18;;;17030:52;17099:18;;21221:75:0;16777:346:1;21221:75:0;21315:16;;;21307:47;;;;;;;12049:2:1;21307:47:0;;;12031:21:1;12088:2;12068:18;;;12061:30;12127:20;12107:18;;;12100:48;12165:18;;21307:47:0;11847:342:1;21307:47:0;21395:9;21390:710;21410:8;21406:1;:12;21390:710;;;21467:11;;;21444:20;21504:29;;;:15;:29;;;;;21497:36;;;;;;21558:6;21554:165;;21588:25;;;;:11;:25;;;;;:30;;;;;;;;;;21554:165;;;21674:25;;;;:11;:25;;;;;21667:32;;;;;;21554:165;21761:12;21757:2;21742:32;;21751:4;21742:32;;;;;;;;;;;;21797:4;21793:292;;;21833:14;;;;:19;;:209;;-1:-1:-1;21881:87:0;;21997:45;21881:87;;;21997:45;21881:40;;;;21997:45;;21881:87;;12432:10;;21944:1;;21948:12;;21962:5;;21881:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:161;;;21833:209;21825:240;;;;;;;19159:2:1;21825:240:0;;;19141:21:1;19198:2;19178:18;;;19171:30;19237:20;19217:18;;;19210:48;19275:18;;21825:240:0;18957:342:1;21825:240:0;-1:-1:-1;21420:3:0;;21390:710;;;-1:-1:-1;22116:18:0;;;;;;;;:12;:18;;;;;;;;:46;;;;;;;;;;;;;;;;;;;22177:16;;;;;;;;:44;;;;;;;;;;;;;;;;;;;22258:18;;;22295:24;;;:11;:24;;;;;;;22258:18;;22295:24;:38;:77;;;;-1:-1:-1;22351:21:0;;22337:35;;22295:77;22291:149;;;22393:24;;;;:11;:24;;;;;:31;;;;;;;;;;22291:149;21365:1086;20914:1554;;;;;;:::o;401:723::-;457:13;678:10;674:53;;-1:-1:-1;;705:10:0;;;;;;;;;;;;;;;;;;401:723::o;674:53::-;752:5;737:12;793:78;800:9;;793:78;;826:8;;;;:::i;:::-;;-1:-1:-1;849:10:0;;-1:-1:-1;857:2:0;849:10;;:::i;:::-;;;793:78;;;881:19;913:6;903:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;903:17:0;;881:39;;931:154;938:10;;931:154;;965:11;975:1;965:11;;:::i;:::-;;-1:-1:-1;1034:10:0;1042:2;1034:5;:10;:::i;:::-;1021:24;;:2;:24;:::i;:::-;1008:39;;991:6;998;991:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;1062:11:0;1071:2;1062:11;;:::i;:::-;;;931:154;;;1109:6;401:723;-1:-1:-1;;;;401:723:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:1;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:1;868:16;;861:27;638:258::o;901:317::-;943:3;981:5;975:12;1008:6;1003:3;996:19;1024:63;1080:6;1073:4;1068:3;1064:14;1057:4;1050:5;1046:16;1024:63;:::i;:::-;1132:2;1120:15;1137:66;1116:88;1107:98;;;;1207:4;1103:109;;901:317;-1:-1:-1;;901:317:1:o;1223:220::-;1372:2;1361:9;1354:21;1335:4;1392:45;1433:2;1422:9;1418:18;1410:6;1392:45;:::i;1448:180::-;1507:6;1560:2;1548:9;1539:7;1535:23;1531:32;1528:52;;;1576:1;1573;1566:12;1528:52;-1:-1:-1;1599:23:1;;1448:180;-1:-1:-1;1448:180:1:o;1864:196::-;1932:20;;1992:42;1981:54;;1971:65;;1961:93;;2050:1;2047;2040:12;1961:93;1864:196;;;:::o;2065:254::-;2133:6;2141;2194:2;2182:9;2173:7;2169:23;2165:32;2162:52;;;2210:1;2207;2200:12;2162:52;2233:29;2252:9;2233:29;:::i;:::-;2223:39;2309:2;2294:18;;;;2281:32;;-1:-1:-1;;;2065:254:1:o;2506:328::-;2583:6;2591;2599;2652:2;2640:9;2631:7;2627:23;2623:32;2620:52;;;2668:1;2665;2658:12;2620:52;2691:29;2710:9;2691:29;:::i;:::-;2681:39;;2739:38;2773:2;2762:9;2758:18;2739:38;:::i;:::-;2729:48;;2824:2;2813:9;2809:18;2796:32;2786:42;;2506:328;;;;;:::o;2839:397::-;2925:6;2933;2941;2949;3002:3;2990:9;2981:7;2977:23;2973:33;2970:53;;;3019:1;3016;3009:12;2970:53;3042:29;3061:9;3042:29;:::i;:::-;3032:39;;3090:38;3124:2;3113:9;3109:18;3090:38;:::i;:::-;2839:397;;3080:48;;-1:-1:-1;;;;3175:2:1;3160:18;;3147:32;;3226:2;3211:18;3198:32;;2839:397::o;3241:248::-;3309:6;3317;3370:2;3358:9;3349:7;3345:23;3341:32;3338:52;;;3386:1;3383;3376:12;3338:52;-1:-1:-1;;3409:23:1;;;3479:2;3464:18;;;3451:32;;-1:-1:-1;3241:248:1:o;3796:186::-;3855:6;3908:2;3896:9;3887:7;3883:23;3879:32;3876:52;;;3924:1;3921;3914:12;3876:52;3947:29;3966:9;3947:29;:::i;3987:750::-;4178:2;4167:9;4160:21;4141:4;4216:6;4210:13;4259:4;4254:2;4243:9;4239:18;4232:32;4287:52;4334:3;4323:9;4319:19;4305:12;4287:52;:::i;:::-;4273:66;;4388:2;4380:6;4376:15;4370:22;4456:66;4444:9;4436:6;4432:22;4428:95;4423:2;4412:9;4408:18;4401:123;4547:41;4581:6;4565:14;4547:41;:::i;:::-;4533:55;;;4642:2;4634:6;4630:15;4624:22;4619:2;4608:9;4604:18;4597:50;4703:2;4695:6;4691:15;4685:22;4678:4;4667:9;4663:20;4656:52;4725:6;4717:14;;;3987:750;;;;:::o;4742:592::-;4813:6;4821;4874:2;4862:9;4853:7;4849:23;4845:32;4842:52;;;4890:1;4887;4880:12;4842:52;4930:9;4917:23;4959:18;5000:2;4992:6;4989:14;4986:34;;;5016:1;5013;5006:12;4986:34;5054:6;5043:9;5039:22;5029:32;;5099:7;5092:4;5088:2;5084:13;5080:27;5070:55;;5121:1;5118;5111:12;5070:55;5161:2;5148:16;5187:2;5179:6;5176:14;5173:34;;;5203:1;5200;5193:12;5173:34;5248:7;5243:2;5234:6;5230:2;5226:15;5222:24;5219:37;5216:57;;;5269:1;5266;5259:12;5216:57;5300:2;5292:11;;;;;5322:6;;-1:-1:-1;4742:592:1;;-1:-1:-1;;;;4742:592:1:o;5339:632::-;5510:2;5562:21;;;5632:13;;5535:18;;;5654:22;;;5481:4;;5510:2;5733:15;;;;5707:2;5692:18;;;5481:4;5776:169;5790:6;5787:1;5784:13;5776:169;;;5851:13;;5839:26;;5920:15;;;;5885:12;;;;5812:1;5805:9;5776:169;;;-1:-1:-1;5962:3:1;;5339:632;-1:-1:-1;;;;;;5339:632:1:o;5976:184::-;6028:77;6025:1;6018:88;6125:4;6122:1;6115:15;6149:4;6146:1;6139:15;6165:777;6207:5;6260:3;6253:4;6245:6;6241:17;6237:27;6227:55;;6278:1;6275;6268:12;6227:55;6314:6;6301:20;6340:18;6377:2;6373;6370:10;6367:36;;;6383:18;;:::i;:::-;6517:2;6511:9;6579:4;6571:13;;6422:66;6567:22;;;6591:2;6563:31;6559:40;6547:53;;;6615:18;;;6635:22;;;6612:46;6609:72;;;6661:18;;:::i;:::-;6701:10;6697:2;6690:22;6736:2;6728:6;6721:18;6782:3;6775:4;6770:2;6762:6;6758:15;6754:26;6751:35;6748:55;;;6799:1;6796;6789:12;6748:55;6863:2;6856:4;6848:6;6844:17;6837:4;6829:6;6825:17;6812:54;6910:1;6903:4;6898:2;6890:6;6886:15;6882:26;6875:37;6930:6;6921:15;;;;;;6165:777;;;;:::o;6947:606::-;7051:6;7059;7067;7075;7083;7136:3;7124:9;7115:7;7111:23;7107:33;7104:53;;;7153:1;7150;7143:12;7104:53;7176:29;7195:9;7176:29;:::i;:::-;7166:39;;7224:38;7258:2;7247:9;7243:18;7224:38;:::i;:::-;7214:48;;7309:2;7298:9;7294:18;7281:32;7271:42;;7360:2;7349:9;7345:18;7332:32;7322:42;;7415:3;7404:9;7400:19;7387:33;7443:18;7435:6;7432:30;7429:50;;;7475:1;7472;7465:12;7429:50;7498:49;7539:7;7530:6;7519:9;7515:22;7498:49;:::i;:::-;7488:59;;;6947:606;;;;;;;;:::o;7558:160::-;7623:20;;7679:13;;7672:21;7662:32;;7652:60;;7708:1;7705;7698:12;7723:254;7788:6;7796;7849:2;7837:9;7828:7;7824:23;7820:32;7817:52;;;7865:1;7862;7855:12;7817:52;7888:29;7907:9;7888:29;:::i;:::-;7878:39;;7936:35;7967:2;7956:9;7952:18;7936:35;:::i;:::-;7926:45;;7723:254;;;;;:::o;7982:537::-;8077:6;8085;8093;8101;8154:3;8142:9;8133:7;8129:23;8125:33;8122:53;;;8171:1;8168;8161:12;8122:53;8194:29;8213:9;8194:29;:::i;:::-;8184:39;;8242:38;8276:2;8265:9;8261:18;8242:38;:::i;:::-;8232:48;;8327:2;8316:9;8312:18;8299:32;8289:42;;8382:2;8371:9;8367:18;8354:32;8409:18;8401:6;8398:30;8395:50;;;8441:1;8438;8431:12;8395:50;8464:49;8505:7;8496:6;8485:9;8481:22;8464:49;:::i;:::-;8454:59;;;7982:537;;;;;;;:::o;8524:180::-;8580:6;8633:2;8621:9;8612:7;8608:23;8604:32;8601:52;;;8649:1;8646;8639:12;8601:52;8672:26;8688:9;8672:26;:::i;9043:260::-;9111:6;9119;9172:2;9160:9;9151:7;9147:23;9143:32;9140:52;;;9188:1;9185;9178:12;9140:52;9211:29;9230:9;9211:29;:::i;:::-;9201:39;;9259:38;9293:2;9282:9;9278:18;9259:38;:::i;9308:437::-;9387:1;9383:12;;;;9430;;;9451:61;;9505:4;9497:6;9493:17;9483:27;;9451:61;9558:2;9550:6;9547:14;9527:18;9524:38;9521:218;;;9595:77;9592:1;9585:88;9696:4;9693:1;9686:15;9724:4;9721:1;9714:15;9521:218;;9308:437;;;:::o;12194:184::-;12246:77;12243:1;12236:88;12343:4;12340:1;12333:15;12367:4;12364:1;12357:15;12383:228;12423:7;12549:1;12481:66;12477:74;12474:1;12471:81;12466:1;12459:9;12452:17;12448:105;12445:131;;;12556:18;;:::i;:::-;-1:-1:-1;12596:9:1;;12383:228::o;12616:184::-;12668:77;12665:1;12658:88;12765:4;12762:1;12755:15;12789:4;12786:1;12779:15;12805:120;12845:1;12871;12861:35;;12876:18;;:::i;:::-;-1:-1:-1;12910:9:1;;12805:120::o;16588:184::-;16640:77;16637:1;16630:88;16737:4;16734:1;16727:15;16761:4;16758:1;16751:15;18186:512;18380:4;18409:42;18490:2;18482:6;18478:15;18467:9;18460:34;18542:2;18534:6;18530:15;18525:2;18514:9;18510:18;18503:43;;18582:6;18577:2;18566:9;18562:18;18555:34;18625:3;18620:2;18609:9;18605:18;18598:31;18646:46;18687:3;18676:9;18672:19;18664:6;18646:46;:::i;:::-;18638:54;18186:512;-1:-1:-1;;;;;;18186:512:1:o;18703:249::-;18772:6;18825:2;18813:9;18804:7;18800:23;18796:32;18793:52;;;18841:1;18838;18831:12;18793:52;18873:9;18867:16;18892:30;18916:5;18892:30;:::i;19304:470::-;19483:3;19521:6;19515:13;19537:53;19583:6;19578:3;19571:4;19563:6;19559:17;19537:53;:::i;:::-;19653:13;;19612:16;;;;19675:57;19653:13;19612:16;19709:4;19697:17;;19675:57;:::i;:::-;19748:20;;19304:470;-1:-1:-1;;;;19304:470:1:o;21853:195::-;21892:3;21923:66;21916:5;21913:77;21910:103;;;21993:18;;:::i;:::-;-1:-1:-1;22040:1:1;22029:13;;21853:195::o;22053:125::-;22093:4;22121:1;22118;22115:8;22112:34;;;22126:18;;:::i;:::-;-1:-1:-1;22163:9:1;;22053:125::o;22183:112::-;22215:1;22241;22231:35;;22246:18;;:::i;:::-;-1:-1:-1;22280:9:1;;22183:112::o;22300:128::-;22340:3;22371:1;22367:6;22364:1;22361:13;22358:39;;;22377:18;;:::i;:::-;-1:-1:-1;22413:9:1;;22300:128::o
Swarm Source
ipfs://09bc70150c9680bd38af050aeff2800edb582c4602c67bc5c4ccaed339889b04
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.