ERC-721
Overview
Max Total Supply
6,666 $DANKZ
Holders
1,238
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 $DANKZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EvilDankz
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-13 */ /** ▓█████ ██▒ █▓ ██▓ ██▓ ▓█ ▀▓██░ █▒▓██▒▓██▒ ▒███ ▓██ █▒░▒██▒▒██░ ▒▓█ ▄ ▒██ █░░░██░▒██░ ░▒████▒ ▒▀█░ ░██░░██████▒ ░░ ▒░ ░ ░ ▐░ ░▓ ░ ▒░▓ ░ ░ ░ ░ ░ ░░ ▒ ░░ ░ ▒ ░ ░ ░░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▓█████▄ ▄▄▄ ███▄ █ ██ ▄█▀▒███████▒ ▒██▀ ██▌▒████▄ ██ ▀█ █ ██▄█▒ ▒ ▒ ▒ ▄▀░ ░██ █▌▒██ ▀█▄ ▓██ ▀█ ██▒▓███▄░ ░ ▒ ▄▀▒░ ░▓█▄ ▌░██▄▄▄▄██ ▓██▒ ▐▌██▒▓██ █▄ ▄▀▒ ░ ░▒████▓ ▓█ ▓██▒▒██░ ▓██░▒██▒ █▄▒███████▒ ▒▒▓ ▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ▒▒ ▓▒░▒▒ ▓░▒░▒ ░ ▒ ▒ ▒ ▒▒ ░░ ░░ ░ ▒░░ ░▒ ▒░░░▒ ▒ ░ ▒ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ */ pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; uint256 inverse = (3 * denominator) ^ 2; inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 result = prod0 * inverse; return result; } } function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 result = 1 << (log2(a) >> 1); unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } pragma solidity ^0.8.0; library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } 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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; interface IERC721A { error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); error MintERC2309QuantityExceedsLimit(); error OwnershipNotInitializedForExtraData(); struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } function totalSupply() external view returns (uint256); function supportsInterface(bytes4 interfaceId) external view returns (bool); event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external payable; function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; function transferFrom( address from, address to, uint256 tokenId ) external payable; function approve(address to, uint256 tokenId) external payable; function setApprovalForAll(address operator, bool _approved) external; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721 token receiver. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721A is IERC721A { // Bypass for a `--via-ir` bug (https://github.com/chiru-labs/ERC721A/pull/364). struct TokenApprovalRef { address value; } // Mask of an entry in packed address data. uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant _BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant _BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant _BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant _BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant _BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant _BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225; // The bit position of `extraData` in packed ownership. uint256 private constant _BITPOS_EXTRA_DATA = 232; // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`. uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; // The mask of the lower 160 bits for addresses. uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1; uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; // The `Transfer` event signature is given by: // `keccak256(bytes("Transfer(address,address,uint256)"))`. bytes32 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; mapping(uint256 => uint256) private _packedOwnerships; mapping(address => uint256) private _packedAddressData; mapping(uint256 => TokenApprovalRef) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } function _startTokenId() internal view virtual returns (uint256) { return 0; } function _nextTokenId() internal view virtual returns (uint256) { return _currentIndex; } function totalSupply() public view virtual override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } function _totalMinted() internal view virtual returns (uint256) { // Counter underflow is impossible as `_currentIndex` does not decrement, // and it is initialized to `_startTokenId()`. unchecked { return _currentIndex - _startTokenId(); } } function _totalBurned() internal view virtual returns (uint256) { return _burnCounter; } function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> _BITPOS_AUX); } function _setAux(address owner, uint64 aux) internal virtual { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; // Cast `aux` with assembly to avoid redundant masking. assembly { auxCasted := aux } packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX); _packedAddressData[owner] = packed; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal virtual { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & _BITMASK_BURNED == 0) { while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * @dev Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP); ownership.burned = packed & _BITMASK_BURNED != 0; ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA); } /** * @dev Packs ownership data into a single uint256. */ function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`. result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags)) } } /** * @dev Returns the `nextInitialized` flag set if `quantity` equals 1. */ function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) { // For branchless setting of the `nextInitialized` flag. assembly { // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`. result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } function approve(address to, uint256 tokenId) public payable virtual override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId].value = to; emit Approval(owner, to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId].value; } function setApprovalForAll(address operator, bool approved) public virtual override { _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned. } /** * @dev Returns whether `msgSender` is equal to `approvedAddress` or `owner`. */ function _isSenderApprovedOrOwner( address approvedAddress, address owner, address msgSender ) private pure returns (bool result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean. msgSender := and(msgSender, _BITMASK_ADDRESS) // `msgSender == owner || msgSender == approvedAddress`. result := or(eq(msgSender, owner), eq(msgSender, approvedAddress)) } } /** * @dev Returns the storage slot and value for the approved address of `tokenId`. */ function _getApprovedSlotAndAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId]; // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId].value`. assembly { approvedAddressSlot := tokenApproval.slot approvedAddress := sload(approvedAddressSlot) } } function transferFrom( address from, address to, uint256 tokenId ) public payable virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. _packedOwnerships[tokenId] = _packOwnershipData( to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public payable virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public payable virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } function _mint(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 toMasked; uint256 end = startTokenId + quantity; assembly { // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean. toMasked := and(to, _BITMASK_ADDRESS) // Emit the `Transfer` event. log4( 0, // Start of data (0, since no data). 0, // End of data (0, since no data). _TRANSFER_EVENT_SIGNATURE, // Signature. 0, // `address(0)`. toMasked, // `to`. startTokenId // `tokenId`. ) for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } { // Emit the `Transfer` event. Similar to above. log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId) } } if (toMasked == 0) revert MintToZeroAddress(); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _mintERC2309(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are unrealistic due to the above check for `quantity` to be below the limit. unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if (!_checkContractOnERC721Received(address(0), to, index++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); // Reentrancy protection. if (_currentIndex != end) revert(); } } } function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (approvalCheck) { // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } unchecked { _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1; _packedOwnerships[tokenId] = _packOwnershipData( from, (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; // Cast `extraData` with assembly to avoid redundant masking. assembly { extraDataCasted := extraData } packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA; } function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a uint256 to its ASCII string decimal representation. */ function _toString(uint256 value) internal pure virtual returns (string memory str) { assembly { let m := add(mload(0x40), 0xa0) // Update the free memory pointer to allocate. mstore(0x40, m) // Assign the `str` to the end. str := sub(m, 0x20) // Zeroize the slot after the string. mstore(str, 0) // Cache the end of the memory to calculate the length later. let end := str // We write the string from rightmost digit to leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // prettier-ignore for { let temp := value } 1 {} { str := sub(str, 1) // Write the character to the pointer. // The ASCII index of the '0' character is 48. mstore8(str, add(48, mod(temp, 10))) // Keep dividing `temp` until zero. temp := div(temp, 10) // prettier-ignore if iszero(temp) { break } } let length := sub(end, str) // Move the pointer 32 bytes leftwards to make room for the length. str := sub(str, 0x20) // Store the length. mstore(str, length) } } } //SPDX-License-Identifier: MIT pragma solidity ^0.8.19; contract EvilDankz is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; uint256 public maxSupply = 6666; uint256 public maxFreeSupply = 6000; uint256 public cost = 0.0008 ether; uint256 public notPayableAmount = 5; uint256 public maxPerWallet = 100; bool public isRevealed = true; bool public pause = false; string private baseURL = ""; string public hiddenMetadataUrl = "REVEALED"; mapping(address => uint256) public userBalance; constructor( string memory _baseMetadataUrl ) ERC721A("EVIL DANKZ", "$DANKZ") { setBaseUri(_baseMetadataUrl); } function _baseURI() internal view override returns (string memory) { return baseURL; } function setBaseUri(string memory _baseURL) public onlyOwner { baseURL = _baseURL; } function mint(uint256 mintAmount) external payable { require(!pause, "Dankz sale is on pause"); if(userBalance[msg.sender] >= notPayableAmount) require(msg.value >= cost * mintAmount, "Insufficient eth funds"); else{ if(totalSupply() + mintAmount <= maxFreeSupply){ if(mintAmount > (notPayableAmount - userBalance[msg.sender])) require(msg.value >= cost * (mintAmount - (notPayableAmount - userBalance[msg.sender])), "Insufficient funds"); } else require(msg.value >= cost * mintAmount, "Insufficient eth funds"); } require(_totalMinted() + mintAmount <= maxSupply,"Exceeds max supply"); require(userBalance[msg.sender] + mintAmount <= maxPerWallet, "Exceeds max Dankz per wallet"); _safeMint(msg.sender, mintAmount); userBalance[msg.sender] = userBalance[msg.sender] + mintAmount; } function airdrop(address to, uint256 mintAmount) external onlyOwner { require( _totalMinted() + mintAmount <= maxSupply, "Exceeds max supply" ); _safeMint(to, mintAmount); } function sethiddenMetadataUrl(string memory _hiddenMetadataUrl) public onlyOwner { hiddenMetadataUrl = _hiddenMetadataUrl; } function reveal(bool _state) external onlyOwner { isRevealed = _state; } function _startTokenId() internal view virtual override returns (uint256) { return 1; } function setMaxSupply(uint256 newMaxSupply) external onlyOwner { maxSupply = newMaxSupply; } function setMaxFreeSupply(uint256 newMaxFreeSupply) external onlyOwner { maxFreeSupply = newMaxFreeSupply; } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "That Dankz token doesn't exist"); if(isRevealed == false) { return hiddenMetadataUrl; } else return bytes(_baseURI()).length > 0 ? string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")) : ""; } function setCost(uint256 _newCost) public onlyOwner{ cost = _newCost; } function setPause(bool _state) public onlyOwner{ pause = _state; } function setNotPayableAmount(uint256 _newAmt) public onlyOwner{ require(_newAmt < maxPerWallet, "Its Not possible"); notPayableAmount = _newAmt; } function setMaxPerWallet(uint256 _newAmt) public onlyOwner{ require(_newAmt > notPayableAmount, "Its Not possible"); maxPerWallet = _newAmt; } function withdraw() external onlyOwner { (bool success, ) = payable(owner()).call{ value: address(this).balance }(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseMetadataUrl","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notPayableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURL","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxFreeSupply","type":"uint256"}],"name":"setMaxFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmt","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmt","type":"uint256"}],"name":"setNotPayableAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUrl","type":"string"}],"name":"sethiddenMetadataUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611a0a600a55611770600b556602d79883d20000600c556005600d556064600e556001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff02191690831515021790555060405180602001604052805f81525060109081620000789190620005ed565b506040518060400160405280600881526020017f52455645414c454400000000000000000000000000000000000000000000000081525060119081620000bf9190620005ed565b50348015620000cc575f80fd5b5060405162003dc938038062003dc98339818101604052810190620000f2919062000829565b6040518060400160405280600a81526020017f4556494c2044414e4b5a000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f2444414e4b5a000000000000000000000000000000000000000000000000000081525081600290816200016f9190620005ed565b508060039081620001819190620005ed565b5062000192620001d960201b60201c565b5f819055505050620001b9620001ad620001e160201b60201c565b620001e860201b60201c565b6001600981905550620001d281620002ab60201b60201c565b50620008f6565b5f6001905090565b5f33905090565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002bb620002d060201b60201c565b8060109081620002cc9190620005ed565b5050565b620002e0620001e160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003066200036160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200035f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035690620008d6565b60405180910390fd5b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200040557607f821691505b6020821081036200041b576200041a620003c0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000442565b6200048b868362000442565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004d5620004cf620004c984620004a3565b620004ac565b620004a3565b9050919050565b5f819050919050565b620004f083620004b5565b62000508620004ff82620004dc565b8484546200044e565b825550505050565b5f90565b6200051e62000510565b6200052b818484620004e5565b505050565b5b818110156200055257620005465f8262000514565b60018101905062000531565b5050565b601f821115620005a1576200056b8162000421565b620005768462000433565b8101602085101562000586578190505b6200059e620005958562000433565b83018262000530565b50505b505050565b5f82821c905092915050565b5f620005c35f1984600802620005a6565b1980831691505092915050565b5f620005dd8383620005b2565b9150826002028217905092915050565b620005f88262000389565b67ffffffffffffffff81111562000614576200061362000393565b5b620006208254620003ed565b6200062d82828562000556565b5f60209050601f83116001811462000663575f84156200064e578287015190505b6200065a8582620005d0565b865550620006c9565b601f198416620006738662000421565b5f5b828110156200069c5784890151825560018201915060208501945060208101905062000675565b86831015620006bc5784890151620006b8601f891682620005b2565b8355505b6001600288020188555050505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b6200070582620006ea565b810181811067ffffffffffffffff8211171562000727576200072662000393565b5b80604052505050565b5f6200073b620006d1565b9050620007498282620006fa565b919050565b5f67ffffffffffffffff8211156200076b576200076a62000393565b5b6200077682620006ea565b9050602081019050919050565b5f5b83811015620007a257808201518184015260208101905062000785565b5f8484015250505050565b5f620007c3620007bd846200074e565b62000730565b905082815260208101848484011115620007e257620007e1620006e6565b5b620007ef84828562000783565b509392505050565b5f82601f8301126200080e576200080d620006e2565b5b815162000820848260208601620007ad565b91505092915050565b5f60208284031215620008415762000840620006da565b5b5f82015167ffffffffffffffff811115620008615762000860620006de565b5b6200086f84828501620007f7565b91505092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620008be60208362000878565b9150620008cb8262000888565b602082019050919050565b5f6020820190508181035f830152620008ef81620008b0565b9050919050565b6134c580620009045f395ff3fe608060405260043610610224575f3560e01c806370a0823111610122578063a22cb465116100aa578063cb2b1c5e1161006e578063cb2b1c5e1461077e578063d5abeb01146107a6578063e268e4d3146107d0578063e985e9c5146107f8578063f2fde38b1461083457610224565b8063a22cb465146106ac578063abfc4efa146106d4578063b88d4fde146106fe578063bedb86fb1461071a578063c87b56dd1461074257610224565b80638da5cb5b116100f15780638da5cb5b146105ec578063940cd05b1461061657806395d89b411461063e578063a0712d6814610668578063a0bcfc7f1461068457610224565b806370a0823114610548578063715018a6146105845780638456cb591461059a5780638ba4cc3c146105c457610224565b80633ccfd60b116101b05780634751333411610174578063475133341461046857806354214f69146104925780635b28fd91146104bc5780636352211e146104e45780636f8b44b01461052057610224565b80633ccfd60b146103bc5780633d6d652a146103d257806342842e0e146103fa57806344a0d68a14610416578063453c23101461043e57610224565b8063095ea7b3116101f7578063095ea7b31461030657806313faede6146103225780631638fef01461034c57806318160ddd1461037657806323b872dd146103a057610224565b80630103c92b1461022857806301ffc9a71461026457806306fdde03146102a0578063081812fc146102ca575b5f80fd5b348015610233575f80fd5b5061024e60048036038101906102499190612503565b61085c565b60405161025b9190612546565b60405180910390f35b34801561026f575f80fd5b5061028a600480360381019061028591906125b4565b610871565b60405161029791906125f9565b60405180910390f35b3480156102ab575f80fd5b506102b4610902565b6040516102c1919061269c565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb91906126e6565b610992565b6040516102fd9190612720565b60405180910390f35b610320600480360381019061031b9190612739565b610a0c565b005b34801561032d575f80fd5b50610336610b4b565b6040516103439190612546565b60405180910390f35b348015610357575f80fd5b50610360610b51565b60405161036d919061269c565b60405180910390f35b348015610381575f80fd5b5061038a610bdd565b6040516103979190612546565b60405180910390f35b6103ba60048036038101906103b59190612777565b610bf2565b005b3480156103c7575f80fd5b506103d0610f00565b005b3480156103dd575f80fd5b506103f860048036038101906103f391906126e6565b610f83565b005b610414600480360381019061040f9190612777565b610fd9565b005b348015610421575f80fd5b5061043c600480360381019061043791906126e6565b610ff8565b005b348015610449575f80fd5b5061045261100a565b60405161045f9190612546565b60405180910390f35b348015610473575f80fd5b5061047c611010565b6040516104899190612546565b60405180910390f35b34801561049d575f80fd5b506104a6611016565b6040516104b391906125f9565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd91906126e6565b611028565b005b3480156104ef575f80fd5b5061050a600480360381019061050591906126e6565b61103a565b6040516105179190612720565b60405180910390f35b34801561052b575f80fd5b50610546600480360381019061054191906126e6565b61104b565b005b348015610553575f80fd5b5061056e60048036038101906105699190612503565b61105d565b60405161057b9190612546565b60405180910390f35b34801561058f575f80fd5b50610598611112565b005b3480156105a5575f80fd5b506105ae611125565b6040516105bb91906125f9565b60405180910390f35b3480156105cf575f80fd5b506105ea60048036038101906105e59190612739565b611138565b005b3480156105f7575f80fd5b506106006111a5565b60405161060d9190612720565b60405180910390f35b348015610621575f80fd5b5061063c600480360381019061063791906127f1565b6111cd565b005b348015610649575f80fd5b506106526111f1565b60405161065f919061269c565b60405180910390f35b610682600480360381019061067d91906126e6565b611281565b005b34801561068f575f80fd5b506106aa60048036038101906106a59190612948565b611651565b005b3480156106b7575f80fd5b506106d260048036038101906106cd919061298f565b61166c565b005b3480156106df575f80fd5b506106e8611772565b6040516106f59190612546565b60405180910390f35b61071860048036038101906107139190612a6b565b611778565b005b348015610725575f80fd5b50610740600480360381019061073b91906127f1565b6117ea565b005b34801561074d575f80fd5b50610768600480360381019061076391906126e6565b61180f565b604051610775919061269c565b60405180910390f35b348015610789575f80fd5b506107a4600480360381019061079f9190612948565b61195f565b005b3480156107b1575f80fd5b506107ba61197a565b6040516107c79190612546565b60405180910390f35b3480156107db575f80fd5b506107f660048036038101906107f191906126e6565b611980565b005b348015610803575f80fd5b5061081e60048036038101906108199190612aeb565b6119d6565b60405161082b91906125f9565b60405180910390f35b34801561083f575f80fd5b5061085a60048036038101906108559190612503565b611a64565b005b6012602052805f5260405f205f915090505481565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108cb57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108fb5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461091190612b56565b80601f016020809104026020016040519081016040528092919081815260200182805461093d90612b56565b80156109885780601f1061095f57610100808354040283529160200191610988565b820191905f5260205f20905b81548152906001019060200180831161096b57829003601f168201915b5050505050905090565b5f61099c82611ae6565b6109d2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610a168261103a565b90508073ffffffffffffffffffffffffffffffffffffffff16610a37611b40565b73ffffffffffffffffffffffffffffffffffffffff1614610a9a57610a6381610a5e611b40565b6119d6565b610a99576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260065f8481526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600c5481565b60118054610b5e90612b56565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a90612b56565b8015610bd55780601f10610bac57610100808354040283529160200191610bd5565b820191905f5260205f20905b815481529060010190602001808311610bb857829003601f168201915b505050505081565b5f610be6611b47565b6001545f540303905090565b5f610bfc82611b4f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c63576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610c6e84611c12565b91509150610c848187610c7f611b40565b611c35565b610cd057610c9986610c94611b40565b6119d6565b610ccf576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d35576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d428686866001611c78565b8015610d4c575f82555b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550610e1485610df0888887611c7e565b7c020000000000000000000000000000000000000000000000000000000017611ca5565b60045f8681526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603610e90575f6001850190505f60045f8381526020019081526020015f205403610e8e575f548114610e8d578360045f8381526020019081526020015f20819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ef88686866001611ccf565b505050505050565b610f08611cd5565b5f610f116111a5565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f3490612bb3565b5f6040518083038185875af1925050503d805f8114610f6e576040519150601f19603f3d011682016040523d82523d5f602084013e610f73565b606091505b5050905080610f80575f80fd5b50565b610f8b611cd5565b600e548110610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690612c11565b60405180910390fd5b80600d8190555050565b610ff383838360405180602001604052805f815250611778565b505050565b611000611cd5565b80600c8190555050565b600e5481565b600b5481565b600f5f9054906101000a900460ff1681565b611030611cd5565b80600b8190555050565b5f61104482611b4f565b9050919050565b611053611cd5565b80600a8190555050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b61111a611cd5565b6111235f611d53565b565b600f60019054906101000a900460ff1681565b611140611cd5565b600a548161114c611e16565b6111569190612c5c565b1115611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e90612cd9565b60405180910390fd5b6111a18282611e27565b5050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111d5611cd5565b80600f5f6101000a81548160ff02191690831515021790555050565b60606003805461120090612b56565b80601f016020809104026020016040519081016040528092919081815260200182805461122c90612b56565b80156112775780601f1061124e57610100808354040283529160200191611277565b820191905f5260205f20905b81548152906001019060200180831161125a57829003601f168201915b5050505050905090565b600f60019054906101000a900460ff16156112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890612d41565b60405180910390fd5b600d5460125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061136c5780600c546113259190612d5f565b341015611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90612dea565b60405180910390fd5b6114d6565b600b5481611378610bdd565b6113829190612c5c565b116114845760125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d546113d29190612e08565b81111561147f5760125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d546114249190612e08565b8161142f9190612e08565b600c5461143c9190612d5f565b34101561147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590612e85565b60405180910390fd5b5b6114d5565b80600c546114929190612d5f565b3410156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90612dea565b60405180910390fd5b5b5b600a54816114e2611e16565b6114ec9190612c5c565b111561152d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152490612cd9565b60405180910390fd5b600e548160125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115799190612c5c565b11156115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b190612eed565b60405180910390fd5b6115c43382611e27565b8060125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461160d9190612c5c565b60125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b611659611cd5565b806010908161166891906130a8565b5050565b8060075f611678611b40565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611721611b40565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161176691906125f9565b60405180910390a35050565b600d5481565b611783848484610bf2565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146117e4576117ad84848484611e44565b6117e3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6117f2611cd5565b80600f60016101000a81548160ff02191690831515021790555050565b606061181a82611ae6565b611859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611850906131c1565b60405180910390fd5b5f1515600f5f9054906101000a900460ff16151503611902576011805461187f90612b56565b80601f01602080910402602001604051908101604052809291908181526020018280546118ab90612b56565b80156118f65780601f106118cd576101008083540402835291602001916118f6565b820191905f5260205f20905b8154815290600101906020018083116118d957829003601f168201915b5050505050905061195a565b5f61190b611f8f565b51116119255760405180602001604052805f815250611957565b61192d611f8f565b6119368361201f565b604051602001611947929190613263565b6040516020818303038152906040525b90505b919050565b611967611cd5565b806011908161197691906130a8565b5050565b600a5481565b611988611cd5565b600d5481116119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612c11565b60405180910390fd5b80600e8190555050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611a6c611cd5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613301565b60405180910390fd5b611ae381611d53565b50565b5f81611af0611b47565b11158015611afe57505f5482105b8015611b3957505f7c010000000000000000000000000000000000000000000000000000000060045f8581526020019081526020015f205416145b9050919050565b5f33905090565b5f6001905090565b5f8082905080611b5d611b47565b11611bdb575f54811015611bda575f60045f8381526020019081526020015f205490505f7c0100000000000000000000000000000000000000000000000000000000821603611bd8575b5f8103611bce5760045f836001900393508381526020019081526020015f20549050611ba7565b8092505050611c0d565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f805f60065f8581526020019081526020015f2090508092508254915050915091565b5f73ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b5f8060e883901c905060e8611c948686846120e9565b62ffffff16901b9150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b611cdd6120f1565b73ffffffffffffffffffffffffffffffffffffffff16611cfb6111a5565b73ffffffffffffffffffffffffffffffffffffffff1614611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890613369565b60405180910390fd5b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f611e1f611b47565b5f5403905090565b611e40828260405180602001604052805f8152506120f8565b5050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e69611b40565b8786866040518563ffffffff1660e01b8152600401611e8b94939291906133d9565b6020604051808303815f875af1925050508015611ec657506040513d601f19601f82011682018060405250810190611ec39190613437565b60015b611f3c573d805f8114611ef4576040519150601f19603f3d011682016040523d82523d5f602084013e611ef9565b606091505b505f815103611f34576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060108054611f9e90612b56565b80601f0160208091040260200160405190810160405280929190818152602001828054611fca90612b56565b80156120155780601f10611fec57610100808354040283529160200191612015565b820191905f5260205f20905b815481529060010190602001808311611ff857829003601f168201915b5050505050905090565b60605f600161202d8461218f565b0190505f8167ffffffffffffffff81111561204b5761204a612824565b5b6040519080825280601f01601f19166020018201604052801561207d5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156120de578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120d3576120d2613462565b5b0494505f850361208a575b819350505050919050565b5f9392505050565b5f33905090565b61210283836122e0565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1461218a575f805490505f83820390505b61213e5f868380600101945086611e44565b612174576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061212c57815f5414612187575f80fd5b50505b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106121eb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816121e1576121e0613462565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612228576d04ee2d6d415b85acef8100000000838161221e5761221d613462565b5b0492506020810190505b662386f26fc10000831061225757662386f26fc10000838161224d5761224c613462565b5b0492506010810190505b6305f5e1008310612280576305f5e100838161227657612275613462565b5b0492506008810190505b61271083106122a557612710838161229b5761229a613462565b5b0492506004810190505b606483106122c857606483816122be576122bd613462565b5b0492506002810190505b600a83106122d7576001810190505b80915050919050565b5f805490505f820361231e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61232a5f848385611c78565b600160406001901b17820260055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555061239c8361238d5f865f611c7e565b61239685612489565b17611ca5565b60045f8381526020019081526020015f20819055505f80838301905073ffffffffffffffffffffffffffffffffffffffff8516915082825f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600183015b8181146124365780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a46001810190506123fd565b505f8203612470576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f8190555050506124845f848385611ccf565b505050565b5f6001821460e11b9050919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124d2826124a9565b9050919050565b6124e2816124c8565b81146124ec575f80fd5b50565b5f813590506124fd816124d9565b92915050565b5f60208284031215612518576125176124a1565b5b5f612525848285016124ef565b91505092915050565b5f819050919050565b6125408161252e565b82525050565b5f6020820190506125595f830184612537565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125938161255f565b811461259d575f80fd5b50565b5f813590506125ae8161258a565b92915050565b5f602082840312156125c9576125c86124a1565b5b5f6125d6848285016125a0565b91505092915050565b5f8115159050919050565b6125f3816125df565b82525050565b5f60208201905061260c5f8301846125ea565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561264957808201518184015260208101905061262e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61266e82612612565b612678818561261c565b935061268881856020860161262c565b61269181612654565b840191505092915050565b5f6020820190508181035f8301526126b48184612664565b905092915050565b6126c58161252e565b81146126cf575f80fd5b50565b5f813590506126e0816126bc565b92915050565b5f602082840312156126fb576126fa6124a1565b5b5f612708848285016126d2565b91505092915050565b61271a816124c8565b82525050565b5f6020820190506127335f830184612711565b92915050565b5f806040838503121561274f5761274e6124a1565b5b5f61275c858286016124ef565b925050602061276d858286016126d2565b9150509250929050565b5f805f6060848603121561278e5761278d6124a1565b5b5f61279b868287016124ef565b93505060206127ac868287016124ef565b92505060406127bd868287016126d2565b9150509250925092565b6127d0816125df565b81146127da575f80fd5b50565b5f813590506127eb816127c7565b92915050565b5f60208284031215612806576128056124a1565b5b5f612813848285016127dd565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61285a82612654565b810181811067ffffffffffffffff8211171561287957612878612824565b5b80604052505050565b5f61288b612498565b90506128978282612851565b919050565b5f67ffffffffffffffff8211156128b6576128b5612824565b5b6128bf82612654565b9050602081019050919050565b828183375f83830152505050565b5f6128ec6128e78461289c565b612882565b90508281526020810184848401111561290857612907612820565b5b6129138482856128cc565b509392505050565b5f82601f83011261292f5761292e61281c565b5b813561293f8482602086016128da565b91505092915050565b5f6020828403121561295d5761295c6124a1565b5b5f82013567ffffffffffffffff81111561297a576129796124a5565b5b6129868482850161291b565b91505092915050565b5f80604083850312156129a5576129a46124a1565b5b5f6129b2858286016124ef565b92505060206129c3858286016127dd565b9150509250929050565b5f67ffffffffffffffff8211156129e7576129e6612824565b5b6129f082612654565b9050602081019050919050565b5f612a0f612a0a846129cd565b612882565b905082815260208101848484011115612a2b57612a2a612820565b5b612a368482856128cc565b509392505050565b5f82601f830112612a5257612a5161281c565b5b8135612a628482602086016129fd565b91505092915050565b5f805f8060808587031215612a8357612a826124a1565b5b5f612a90878288016124ef565b9450506020612aa1878288016124ef565b9350506040612ab2878288016126d2565b925050606085013567ffffffffffffffff811115612ad357612ad26124a5565b5b612adf87828801612a3e565b91505092959194509250565b5f8060408385031215612b0157612b006124a1565b5b5f612b0e858286016124ef565b9250506020612b1f858286016124ef565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b6d57607f821691505b602082108103612b8057612b7f612b29565b5b50919050565b5f81905092915050565b50565b5f612b9e5f83612b86565b9150612ba982612b90565b5f82019050919050565b5f612bbd82612b93565b9150819050919050565b7f497473204e6f7420706f737369626c65000000000000000000000000000000005f82015250565b5f612bfb60108361261c565b9150612c0682612bc7565b602082019050919050565b5f6020820190508181035f830152612c2881612bef565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c668261252e565b9150612c718361252e565b9250828201905080821115612c8957612c88612c2f565b5b92915050565b7f45786365656473206d617820737570706c7900000000000000000000000000005f82015250565b5f612cc360128361261c565b9150612cce82612c8f565b602082019050919050565b5f6020820190508181035f830152612cf081612cb7565b9050919050565b7f44616e6b7a2073616c65206973206f6e207061757365000000000000000000005f82015250565b5f612d2b60168361261c565b9150612d3682612cf7565b602082019050919050565b5f6020820190508181035f830152612d5881612d1f565b9050919050565b5f612d698261252e565b9150612d748361252e565b9250828202612d828161252e565b91508282048414831517612d9957612d98612c2f565b5b5092915050565b7f496e73756666696369656e74206574682066756e6473000000000000000000005f82015250565b5f612dd460168361261c565b9150612ddf82612da0565b602082019050919050565b5f6020820190508181035f830152612e0181612dc8565b9050919050565b5f612e128261252e565b9150612e1d8361252e565b9250828203905081811115612e3557612e34612c2f565b5b92915050565b7f496e73756666696369656e742066756e647300000000000000000000000000005f82015250565b5f612e6f60128361261c565b9150612e7a82612e3b565b602082019050919050565b5f6020820190508181035f830152612e9c81612e63565b9050919050565b7f45786365656473206d61782044616e6b7a207065722077616c6c6574000000005f82015250565b5f612ed7601c8361261c565b9150612ee282612ea3565b602082019050919050565b5f6020820190508181035f830152612f0481612ecb565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612f677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f2c565b612f718683612f2c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612fac612fa7612fa28461252e565b612f89565b61252e565b9050919050565b5f819050919050565b612fc583612f92565b612fd9612fd182612fb3565b848454612f38565b825550505050565b5f90565b612fed612fe1565b612ff8818484612fbc565b505050565b5b8181101561301b576130105f82612fe5565b600181019050612ffe565b5050565b601f8211156130605761303181612f0b565b61303a84612f1d565b81016020851015613049578190505b61305d61305585612f1d565b830182612ffd565b50505b505050565b5f82821c905092915050565b5f6130805f1984600802613065565b1980831691505092915050565b5f6130988383613071565b9150826002028217905092915050565b6130b182612612565b67ffffffffffffffff8111156130ca576130c9612824565b5b6130d48254612b56565b6130df82828561301f565b5f60209050601f831160018114613110575f84156130fe578287015190505b613108858261308d565b86555061316f565b601f19841661311e86612f0b565b5f5b8281101561314557848901518255600182019150602085019450602081019050613120565b86831015613162578489015161315e601f891682613071565b8355505b6001600288020188555050505b505050505050565b7f546861742044616e6b7a20746f6b656e20646f65736e277420657869737400005f82015250565b5f6131ab601e8361261c565b91506131b682613177565b602082019050919050565b5f6020820190508181035f8301526131d88161319f565b9050919050565b5f81905092915050565b5f6131f382612612565b6131fd81856131df565b935061320d81856020860161262c565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f61324d6005836131df565b915061325882613219565b600582019050919050565b5f61326e82856131e9565b915061327a82846131e9565b915061328582613241565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6132eb60268361261c565b91506132f682613291565b604082019050919050565b5f6020820190508181035f830152613318816132df565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61335360208361261c565b915061335e8261331f565b602082019050919050565b5f6020820190508181035f83015261338081613347565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6133ab82613387565b6133b58185613391565b93506133c581856020860161262c565b6133ce81612654565b840191505092915050565b5f6080820190506133ec5f830187612711565b6133f96020830186612711565b6134066040830185612537565b818103606083015261341881846133a1565b905095945050505050565b5f815190506134318161258a565b92915050565b5f6020828403121561344c5761344b6124a1565b5b5f61345984828501613423565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea264697066735822122015cced816a2db4d9a17ab4857fe03088fce28f9b472fd1d4da7e3ed91030be4264736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656966766a6d6e68656461353361646775336c76636d7632716932346d62707237357979636e656e786f6b357076777477347432676d2f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405260043610610224575f3560e01c806370a0823111610122578063a22cb465116100aa578063cb2b1c5e1161006e578063cb2b1c5e1461077e578063d5abeb01146107a6578063e268e4d3146107d0578063e985e9c5146107f8578063f2fde38b1461083457610224565b8063a22cb465146106ac578063abfc4efa146106d4578063b88d4fde146106fe578063bedb86fb1461071a578063c87b56dd1461074257610224565b80638da5cb5b116100f15780638da5cb5b146105ec578063940cd05b1461061657806395d89b411461063e578063a0712d6814610668578063a0bcfc7f1461068457610224565b806370a0823114610548578063715018a6146105845780638456cb591461059a5780638ba4cc3c146105c457610224565b80633ccfd60b116101b05780634751333411610174578063475133341461046857806354214f69146104925780635b28fd91146104bc5780636352211e146104e45780636f8b44b01461052057610224565b80633ccfd60b146103bc5780633d6d652a146103d257806342842e0e146103fa57806344a0d68a14610416578063453c23101461043e57610224565b8063095ea7b3116101f7578063095ea7b31461030657806313faede6146103225780631638fef01461034c57806318160ddd1461037657806323b872dd146103a057610224565b80630103c92b1461022857806301ffc9a71461026457806306fdde03146102a0578063081812fc146102ca575b5f80fd5b348015610233575f80fd5b5061024e60048036038101906102499190612503565b61085c565b60405161025b9190612546565b60405180910390f35b34801561026f575f80fd5b5061028a600480360381019061028591906125b4565b610871565b60405161029791906125f9565b60405180910390f35b3480156102ab575f80fd5b506102b4610902565b6040516102c1919061269c565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb91906126e6565b610992565b6040516102fd9190612720565b60405180910390f35b610320600480360381019061031b9190612739565b610a0c565b005b34801561032d575f80fd5b50610336610b4b565b6040516103439190612546565b60405180910390f35b348015610357575f80fd5b50610360610b51565b60405161036d919061269c565b60405180910390f35b348015610381575f80fd5b5061038a610bdd565b6040516103979190612546565b60405180910390f35b6103ba60048036038101906103b59190612777565b610bf2565b005b3480156103c7575f80fd5b506103d0610f00565b005b3480156103dd575f80fd5b506103f860048036038101906103f391906126e6565b610f83565b005b610414600480360381019061040f9190612777565b610fd9565b005b348015610421575f80fd5b5061043c600480360381019061043791906126e6565b610ff8565b005b348015610449575f80fd5b5061045261100a565b60405161045f9190612546565b60405180910390f35b348015610473575f80fd5b5061047c611010565b6040516104899190612546565b60405180910390f35b34801561049d575f80fd5b506104a6611016565b6040516104b391906125f9565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd91906126e6565b611028565b005b3480156104ef575f80fd5b5061050a600480360381019061050591906126e6565b61103a565b6040516105179190612720565b60405180910390f35b34801561052b575f80fd5b50610546600480360381019061054191906126e6565b61104b565b005b348015610553575f80fd5b5061056e60048036038101906105699190612503565b61105d565b60405161057b9190612546565b60405180910390f35b34801561058f575f80fd5b50610598611112565b005b3480156105a5575f80fd5b506105ae611125565b6040516105bb91906125f9565b60405180910390f35b3480156105cf575f80fd5b506105ea60048036038101906105e59190612739565b611138565b005b3480156105f7575f80fd5b506106006111a5565b60405161060d9190612720565b60405180910390f35b348015610621575f80fd5b5061063c600480360381019061063791906127f1565b6111cd565b005b348015610649575f80fd5b506106526111f1565b60405161065f919061269c565b60405180910390f35b610682600480360381019061067d91906126e6565b611281565b005b34801561068f575f80fd5b506106aa60048036038101906106a59190612948565b611651565b005b3480156106b7575f80fd5b506106d260048036038101906106cd919061298f565b61166c565b005b3480156106df575f80fd5b506106e8611772565b6040516106f59190612546565b60405180910390f35b61071860048036038101906107139190612a6b565b611778565b005b348015610725575f80fd5b50610740600480360381019061073b91906127f1565b6117ea565b005b34801561074d575f80fd5b50610768600480360381019061076391906126e6565b61180f565b604051610775919061269c565b60405180910390f35b348015610789575f80fd5b506107a4600480360381019061079f9190612948565b61195f565b005b3480156107b1575f80fd5b506107ba61197a565b6040516107c79190612546565b60405180910390f35b3480156107db575f80fd5b506107f660048036038101906107f191906126e6565b611980565b005b348015610803575f80fd5b5061081e60048036038101906108199190612aeb565b6119d6565b60405161082b91906125f9565b60405180910390f35b34801561083f575f80fd5b5061085a60048036038101906108559190612503565b611a64565b005b6012602052805f5260405f205f915090505481565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108cb57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108fb5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461091190612b56565b80601f016020809104026020016040519081016040528092919081815260200182805461093d90612b56565b80156109885780601f1061095f57610100808354040283529160200191610988565b820191905f5260205f20905b81548152906001019060200180831161096b57829003601f168201915b5050505050905090565b5f61099c82611ae6565b6109d2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610a168261103a565b90508073ffffffffffffffffffffffffffffffffffffffff16610a37611b40565b73ffffffffffffffffffffffffffffffffffffffff1614610a9a57610a6381610a5e611b40565b6119d6565b610a99576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260065f8481526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600c5481565b60118054610b5e90612b56565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a90612b56565b8015610bd55780601f10610bac57610100808354040283529160200191610bd5565b820191905f5260205f20905b815481529060010190602001808311610bb857829003601f168201915b505050505081565b5f610be6611b47565b6001545f540303905090565b5f610bfc82611b4f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c63576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610c6e84611c12565b91509150610c848187610c7f611b40565b611c35565b610cd057610c9986610c94611b40565b6119d6565b610ccf576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d35576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d428686866001611c78565b8015610d4c575f82555b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550610e1485610df0888887611c7e565b7c020000000000000000000000000000000000000000000000000000000017611ca5565b60045f8681526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603610e90575f6001850190505f60045f8381526020019081526020015f205403610e8e575f548114610e8d578360045f8381526020019081526020015f20819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ef88686866001611ccf565b505050505050565b610f08611cd5565b5f610f116111a5565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f3490612bb3565b5f6040518083038185875af1925050503d805f8114610f6e576040519150601f19603f3d011682016040523d82523d5f602084013e610f73565b606091505b5050905080610f80575f80fd5b50565b610f8b611cd5565b600e548110610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690612c11565b60405180910390fd5b80600d8190555050565b610ff383838360405180602001604052805f815250611778565b505050565b611000611cd5565b80600c8190555050565b600e5481565b600b5481565b600f5f9054906101000a900460ff1681565b611030611cd5565b80600b8190555050565b5f61104482611b4f565b9050919050565b611053611cd5565b80600a8190555050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b61111a611cd5565b6111235f611d53565b565b600f60019054906101000a900460ff1681565b611140611cd5565b600a548161114c611e16565b6111569190612c5c565b1115611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e90612cd9565b60405180910390fd5b6111a18282611e27565b5050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111d5611cd5565b80600f5f6101000a81548160ff02191690831515021790555050565b60606003805461120090612b56565b80601f016020809104026020016040519081016040528092919081815260200182805461122c90612b56565b80156112775780601f1061124e57610100808354040283529160200191611277565b820191905f5260205f20905b81548152906001019060200180831161125a57829003601f168201915b5050505050905090565b600f60019054906101000a900460ff16156112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890612d41565b60405180910390fd5b600d5460125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061136c5780600c546113259190612d5f565b341015611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90612dea565b60405180910390fd5b6114d6565b600b5481611378610bdd565b6113829190612c5c565b116114845760125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d546113d29190612e08565b81111561147f5760125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d546114249190612e08565b8161142f9190612e08565b600c5461143c9190612d5f565b34101561147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590612e85565b60405180910390fd5b5b6114d5565b80600c546114929190612d5f565b3410156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90612dea565b60405180910390fd5b5b5b600a54816114e2611e16565b6114ec9190612c5c565b111561152d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152490612cd9565b60405180910390fd5b600e548160125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115799190612c5c565b11156115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b190612eed565b60405180910390fd5b6115c43382611e27565b8060125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461160d9190612c5c565b60125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b611659611cd5565b806010908161166891906130a8565b5050565b8060075f611678611b40565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611721611b40565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161176691906125f9565b60405180910390a35050565b600d5481565b611783848484610bf2565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146117e4576117ad84848484611e44565b6117e3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6117f2611cd5565b80600f60016101000a81548160ff02191690831515021790555050565b606061181a82611ae6565b611859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611850906131c1565b60405180910390fd5b5f1515600f5f9054906101000a900460ff16151503611902576011805461187f90612b56565b80601f01602080910402602001604051908101604052809291908181526020018280546118ab90612b56565b80156118f65780601f106118cd576101008083540402835291602001916118f6565b820191905f5260205f20905b8154815290600101906020018083116118d957829003601f168201915b5050505050905061195a565b5f61190b611f8f565b51116119255760405180602001604052805f815250611957565b61192d611f8f565b6119368361201f565b604051602001611947929190613263565b6040516020818303038152906040525b90505b919050565b611967611cd5565b806011908161197691906130a8565b5050565b600a5481565b611988611cd5565b600d5481116119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612c11565b60405180910390fd5b80600e8190555050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611a6c611cd5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613301565b60405180910390fd5b611ae381611d53565b50565b5f81611af0611b47565b11158015611afe57505f5482105b8015611b3957505f7c010000000000000000000000000000000000000000000000000000000060045f8581526020019081526020015f205416145b9050919050565b5f33905090565b5f6001905090565b5f8082905080611b5d611b47565b11611bdb575f54811015611bda575f60045f8381526020019081526020015f205490505f7c0100000000000000000000000000000000000000000000000000000000821603611bd8575b5f8103611bce5760045f836001900393508381526020019081526020015f20549050611ba7565b8092505050611c0d565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f805f60065f8581526020019081526020015f2090508092508254915050915091565b5f73ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b5f8060e883901c905060e8611c948686846120e9565b62ffffff16901b9150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b611cdd6120f1565b73ffffffffffffffffffffffffffffffffffffffff16611cfb6111a5565b73ffffffffffffffffffffffffffffffffffffffff1614611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890613369565b60405180910390fd5b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f611e1f611b47565b5f5403905090565b611e40828260405180602001604052805f8152506120f8565b5050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e69611b40565b8786866040518563ffffffff1660e01b8152600401611e8b94939291906133d9565b6020604051808303815f875af1925050508015611ec657506040513d601f19601f82011682018060405250810190611ec39190613437565b60015b611f3c573d805f8114611ef4576040519150601f19603f3d011682016040523d82523d5f602084013e611ef9565b606091505b505f815103611f34576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060108054611f9e90612b56565b80601f0160208091040260200160405190810160405280929190818152602001828054611fca90612b56565b80156120155780601f10611fec57610100808354040283529160200191612015565b820191905f5260205f20905b815481529060010190602001808311611ff857829003601f168201915b5050505050905090565b60605f600161202d8461218f565b0190505f8167ffffffffffffffff81111561204b5761204a612824565b5b6040519080825280601f01601f19166020018201604052801561207d5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156120de578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120d3576120d2613462565b5b0494505f850361208a575b819350505050919050565b5f9392505050565b5f33905090565b61210283836122e0565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1461218a575f805490505f83820390505b61213e5f868380600101945086611e44565b612174576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061212c57815f5414612187575f80fd5b50505b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106121eb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816121e1576121e0613462565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612228576d04ee2d6d415b85acef8100000000838161221e5761221d613462565b5b0492506020810190505b662386f26fc10000831061225757662386f26fc10000838161224d5761224c613462565b5b0492506010810190505b6305f5e1008310612280576305f5e100838161227657612275613462565b5b0492506008810190505b61271083106122a557612710838161229b5761229a613462565b5b0492506004810190505b606483106122c857606483816122be576122bd613462565b5b0492506002810190505b600a83106122d7576001810190505b80915050919050565b5f805490505f820361231e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61232a5f848385611c78565b600160406001901b17820260055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555061239c8361238d5f865f611c7e565b61239685612489565b17611ca5565b60045f8381526020019081526020015f20819055505f80838301905073ffffffffffffffffffffffffffffffffffffffff8516915082825f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600183015b8181146124365780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a46001810190506123fd565b505f8203612470576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f8190555050506124845f848385611ccf565b505050565b5f6001821460e11b9050919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124d2826124a9565b9050919050565b6124e2816124c8565b81146124ec575f80fd5b50565b5f813590506124fd816124d9565b92915050565b5f60208284031215612518576125176124a1565b5b5f612525848285016124ef565b91505092915050565b5f819050919050565b6125408161252e565b82525050565b5f6020820190506125595f830184612537565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125938161255f565b811461259d575f80fd5b50565b5f813590506125ae8161258a565b92915050565b5f602082840312156125c9576125c86124a1565b5b5f6125d6848285016125a0565b91505092915050565b5f8115159050919050565b6125f3816125df565b82525050565b5f60208201905061260c5f8301846125ea565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561264957808201518184015260208101905061262e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61266e82612612565b612678818561261c565b935061268881856020860161262c565b61269181612654565b840191505092915050565b5f6020820190508181035f8301526126b48184612664565b905092915050565b6126c58161252e565b81146126cf575f80fd5b50565b5f813590506126e0816126bc565b92915050565b5f602082840312156126fb576126fa6124a1565b5b5f612708848285016126d2565b91505092915050565b61271a816124c8565b82525050565b5f6020820190506127335f830184612711565b92915050565b5f806040838503121561274f5761274e6124a1565b5b5f61275c858286016124ef565b925050602061276d858286016126d2565b9150509250929050565b5f805f6060848603121561278e5761278d6124a1565b5b5f61279b868287016124ef565b93505060206127ac868287016124ef565b92505060406127bd868287016126d2565b9150509250925092565b6127d0816125df565b81146127da575f80fd5b50565b5f813590506127eb816127c7565b92915050565b5f60208284031215612806576128056124a1565b5b5f612813848285016127dd565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61285a82612654565b810181811067ffffffffffffffff8211171561287957612878612824565b5b80604052505050565b5f61288b612498565b90506128978282612851565b919050565b5f67ffffffffffffffff8211156128b6576128b5612824565b5b6128bf82612654565b9050602081019050919050565b828183375f83830152505050565b5f6128ec6128e78461289c565b612882565b90508281526020810184848401111561290857612907612820565b5b6129138482856128cc565b509392505050565b5f82601f83011261292f5761292e61281c565b5b813561293f8482602086016128da565b91505092915050565b5f6020828403121561295d5761295c6124a1565b5b5f82013567ffffffffffffffff81111561297a576129796124a5565b5b6129868482850161291b565b91505092915050565b5f80604083850312156129a5576129a46124a1565b5b5f6129b2858286016124ef565b92505060206129c3858286016127dd565b9150509250929050565b5f67ffffffffffffffff8211156129e7576129e6612824565b5b6129f082612654565b9050602081019050919050565b5f612a0f612a0a846129cd565b612882565b905082815260208101848484011115612a2b57612a2a612820565b5b612a368482856128cc565b509392505050565b5f82601f830112612a5257612a5161281c565b5b8135612a628482602086016129fd565b91505092915050565b5f805f8060808587031215612a8357612a826124a1565b5b5f612a90878288016124ef565b9450506020612aa1878288016124ef565b9350506040612ab2878288016126d2565b925050606085013567ffffffffffffffff811115612ad357612ad26124a5565b5b612adf87828801612a3e565b91505092959194509250565b5f8060408385031215612b0157612b006124a1565b5b5f612b0e858286016124ef565b9250506020612b1f858286016124ef565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b6d57607f821691505b602082108103612b8057612b7f612b29565b5b50919050565b5f81905092915050565b50565b5f612b9e5f83612b86565b9150612ba982612b90565b5f82019050919050565b5f612bbd82612b93565b9150819050919050565b7f497473204e6f7420706f737369626c65000000000000000000000000000000005f82015250565b5f612bfb60108361261c565b9150612c0682612bc7565b602082019050919050565b5f6020820190508181035f830152612c2881612bef565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c668261252e565b9150612c718361252e565b9250828201905080821115612c8957612c88612c2f565b5b92915050565b7f45786365656473206d617820737570706c7900000000000000000000000000005f82015250565b5f612cc360128361261c565b9150612cce82612c8f565b602082019050919050565b5f6020820190508181035f830152612cf081612cb7565b9050919050565b7f44616e6b7a2073616c65206973206f6e207061757365000000000000000000005f82015250565b5f612d2b60168361261c565b9150612d3682612cf7565b602082019050919050565b5f6020820190508181035f830152612d5881612d1f565b9050919050565b5f612d698261252e565b9150612d748361252e565b9250828202612d828161252e565b91508282048414831517612d9957612d98612c2f565b5b5092915050565b7f496e73756666696369656e74206574682066756e6473000000000000000000005f82015250565b5f612dd460168361261c565b9150612ddf82612da0565b602082019050919050565b5f6020820190508181035f830152612e0181612dc8565b9050919050565b5f612e128261252e565b9150612e1d8361252e565b9250828203905081811115612e3557612e34612c2f565b5b92915050565b7f496e73756666696369656e742066756e647300000000000000000000000000005f82015250565b5f612e6f60128361261c565b9150612e7a82612e3b565b602082019050919050565b5f6020820190508181035f830152612e9c81612e63565b9050919050565b7f45786365656473206d61782044616e6b7a207065722077616c6c6574000000005f82015250565b5f612ed7601c8361261c565b9150612ee282612ea3565b602082019050919050565b5f6020820190508181035f830152612f0481612ecb565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612f677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f2c565b612f718683612f2c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612fac612fa7612fa28461252e565b612f89565b61252e565b9050919050565b5f819050919050565b612fc583612f92565b612fd9612fd182612fb3565b848454612f38565b825550505050565b5f90565b612fed612fe1565b612ff8818484612fbc565b505050565b5b8181101561301b576130105f82612fe5565b600181019050612ffe565b5050565b601f8211156130605761303181612f0b565b61303a84612f1d565b81016020851015613049578190505b61305d61305585612f1d565b830182612ffd565b50505b505050565b5f82821c905092915050565b5f6130805f1984600802613065565b1980831691505092915050565b5f6130988383613071565b9150826002028217905092915050565b6130b182612612565b67ffffffffffffffff8111156130ca576130c9612824565b5b6130d48254612b56565b6130df82828561301f565b5f60209050601f831160018114613110575f84156130fe578287015190505b613108858261308d565b86555061316f565b601f19841661311e86612f0b565b5f5b8281101561314557848901518255600182019150602085019450602081019050613120565b86831015613162578489015161315e601f891682613071565b8355505b6001600288020188555050505b505050505050565b7f546861742044616e6b7a20746f6b656e20646f65736e277420657869737400005f82015250565b5f6131ab601e8361261c565b91506131b682613177565b602082019050919050565b5f6020820190508181035f8301526131d88161319f565b9050919050565b5f81905092915050565b5f6131f382612612565b6131fd81856131df565b935061320d81856020860161262c565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f61324d6005836131df565b915061325882613219565b600582019050919050565b5f61326e82856131e9565b915061327a82846131e9565b915061328582613241565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6132eb60268361261c565b91506132f682613291565b604082019050919050565b5f6020820190508181035f830152613318816132df565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61335360208361261c565b915061335e8261331f565b602082019050919050565b5f6020820190508181035f83015261338081613347565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6133ab82613387565b6133b58185613391565b93506133c581856020860161262c565b6133ce81612654565b840191505092915050565b5f6080820190506133ec5f830187612711565b6133f96020830186612711565b6134066040830185612537565b818103606083015261341881846133a1565b905095945050505050565b5f815190506134318161258a565b92915050565b5f6020828403121561344c5761344b6124a1565b5b5f61345984828501613423565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea264697066735822122015cced816a2db4d9a17ab4857fe03088fce28f9b472fd1d4da7e3ed91030be4264736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656966766a6d6e68656461353361646775336c76636d7632716932346d62707237357979636e656e786f6b357076777477347432676d2f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseMetadataUrl (string): ipfs://bafybeifvjmnheda53adgu3lvcmv2qi24mbpr75yycnenxok5pvwtw4t2gm/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [2] : 697066733a2f2f6261667962656966766a6d6e68656461353361646775336c76
Arg [3] : 636d7632716932346d62707237357979636e656e786f6b357076777477347432
Arg [4] : 676d2f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
41202:3612:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41650:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21550:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21912:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26052:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25636:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41375:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41597:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19635:323;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28348:2337;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44637:174;;;;;;;;;;;;;:::i;:::-;;44289:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30781:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44129:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41458:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41333:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41498:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43601:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22560:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43496:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20380:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3303:103;;;;;;;;;;;;;:::i;:::-;;41531:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42959:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3068:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43309:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22020:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42044:907;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41944:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26278:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41416:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30982:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44210:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43719:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43169:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41295:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44466:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26520:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3414:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41650:46;;;;;;;;;;;;;;;;;:::o;21550:354::-;21635:4;21689:10;21674:25;;:11;:25;;;;:102;;;;21766:10;21751:25;;:11;:25;;;;21674:102;:179;;;;21843:10;21828:25;;:11;:25;;;;21674:179;21654:199;;21550:354;;;:::o;21912:100::-;21966:13;21999:5;21992:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21912:100;:::o;26052:218::-;26128:7;26153:16;26161:7;26153;:16::i;:::-;26148:64;;26178:34;;;;;;;;;;;;;;26148:64;26232:15;:24;26248:7;26232:24;;;;;;;;;;;:30;;;;;;;;;;;;26225:37;;26052:218;;;:::o;25636:408::-;25725:13;25741:16;25749:7;25741;:16::i;:::-;25725:32;;25797:5;25774:28;;:19;:17;:19::i;:::-;:28;;;25770:175;;25822:44;25839:5;25846:19;:17;:19::i;:::-;25822:16;:44::i;:::-;25817:128;;25894:35;;;;;;;;;;;;;;25817:128;25770:175;25990:2;25957:15;:24;25973:7;25957:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;26028:7;26024:2;26008:28;;26017:5;26008:28;;;;;;;;;;;;25714:330;25636:408;;:::o;41375:34::-;;;;:::o;41597:44::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19635:323::-;19696:7;19924:15;:13;:15::i;:::-;19909:12;;19893:13;;:28;:46;19886:53;;19635:323;:::o;28348:2337::-;28490:27;28520;28539:7;28520:18;:27::i;:::-;28490:57;;28605:4;28564:45;;28580:19;28564:45;;;28560:86;;28618:28;;;;;;;;;;;;;;28560:86;28660:27;28689:23;28716:35;28743:7;28716:26;:35::i;:::-;28659:92;;;;28851:68;28876:15;28893:4;28899:19;:17;:19::i;:::-;28851:24;:68::i;:::-;28846:180;;28939:43;28956:4;28962:19;:17;:19::i;:::-;28939:16;:43::i;:::-;28934:92;;28991:35;;;;;;;;;;;;;;28934:92;28846:180;29057:1;29043:16;;:2;:16;;;29039:52;;29068:23;;;;;;;;;;;;;;29039:52;29104:43;29126:4;29132:2;29136:7;29145:1;29104:21;:43::i;:::-;29240:15;29237:160;;;29380:1;29359:19;29352:30;29237:160;29517:18;:24;29536:4;29517:24;;;;;;;;;;;;;;;;29515:26;;;;;;;;;;;;29586:18;:22;29605:2;29586:22;;;;;;;;;;;;;;;;29584:24;;;;;;;;;;;29680:146;29717:2;29766:45;29781:4;29787:2;29791:19;29766:14;:45::i;:::-;18028:8;29738:73;29680:18;:146::i;:::-;29651:17;:26;29669:7;29651:26;;;;;;;;;;;:175;;;;29997:1;18028:8;29946:19;:47;:52;29942:627;;30019:19;30051:1;30041:7;:11;30019:33;;30208:1;30174:17;:30;30192:11;30174:30;;;;;;;;;;;;:35;30170:384;;30312:13;;30297:11;:28;30293:242;;30492:19;30459:17;:30;30477:11;30459:30;;;;;;;;;;;:52;;;;30293:242;30170:384;30000:569;29942:627;30616:7;30612:2;30597:27;;30606:4;30597:27;;;;;;;;;;;;30635:42;30656:4;30662:2;30666:7;30675:1;30635:20;:42::i;:::-;28479:2206;;;28348:2337;;;:::o;44637:174::-;3027:13;:11;:13::i;:::-;44682:12:::1;44708:7;:5;:7::i;:::-;44700:21;;44743;44700:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44681:98;;;44798:7;44790:16;;;::::0;::::1;;44676:135;44637:174::o:0;44289:169::-;3027:13;:11;:13::i;:::-;44380:12:::1;;44370:7;:22;44362:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44443:7;44424:16;:26;;;;44289:169:::0;:::o;30781:193::-;30927:39;30944:4;30950:2;30954:7;30927:39;;;;;;;;;;;;:16;:39::i;:::-;30781:193;;;:::o;44129:76::-;3027:13;:11;:13::i;:::-;44192:8:::1;44185:4;:15;;;;44129:76:::0;:::o;41458:33::-;;;;:::o;41333:35::-;;;;:::o;41498:29::-;;;;;;;;;;;;;:::o;43601:113::-;3027:13;:11;:13::i;:::-;43693:16:::1;43677:13;:32;;;;43601:113:::0;:::o;22560:152::-;22632:7;22675:27;22694:7;22675:18;:27::i;:::-;22652:52;;22560:152;;;:::o;43496:97::-;3027:13;:11;:13::i;:::-;43576:12:::1;43564:9;:24;;;;43496:97:::0;:::o;20380:233::-;20452:7;20493:1;20476:19;;:5;:19;;;20472:60;;20504:28;;;;;;;;;;;;;;20472:60;16972:13;20550:18;:25;20569:5;20550:25;;;;;;;;;;;;;;;;:55;20543:62;;20380:233;;;:::o;3303:103::-;3027:13;:11;:13::i;:::-;3368:30:::1;3395:1;3368:18;:30::i;:::-;3303:103::o:0;41531:25::-;;;;;;;;;;;;;:::o;42959:202::-;3027:13;:11;:13::i;:::-;43076:9:::1;;43062:10;43045:14;:12;:14::i;:::-;:27;;;;:::i;:::-;:40;;43032:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;43121:25;43131:2;43135:10;43121:9;:25::i;:::-;42959:202:::0;;:::o;3068:87::-;3114:7;3141:6;;;;;;;;;;;3134:13;;3068:87;:::o;43309:80::-;3027:13;:11;:13::i;:::-;43378:6:::1;43365:10;;:19;;;;;;;;;;;;;;;;;;43309:80:::0;:::o;22020:104::-;22076:13;22109:7;22102:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22020:104;:::o;42044:907::-;42109:5;;;;;;;;;;;42108:6;42100:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;42182:16;;42155:11;:23;42167:10;42155:23;;;;;;;;;;;;;;;;:43;42152:493;;42228:10;42221:4;;:17;;;;:::i;:::-;42208:9;:30;;42200:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42152:493;;;42328:13;;42314:10;42298:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:43;42295:338;;42397:11;:23;42409:10;42397:23;;;;;;;;;;;;;;;;42378:16;;:42;;;;:::i;:::-;42364:10;:57;42361:172;;;42485:11;:23;42497:10;42485:23;;;;;;;;;;;;;;;;42466:16;;:42;;;;:::i;:::-;42452:10;:57;;;;:::i;:::-;42444:4;;:66;;;;:::i;:::-;42431:9;:79;;42423:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;42361:172;42295:338;;;42596:10;42589:4;;:17;;;;:::i;:::-;42576:9;:30;;42568:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42295:338;42152:493;42694:9;;42680:10;42663:14;:12;:14::i;:::-;:27;;;;:::i;:::-;:40;;42655:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42784:12;;42770:10;42744:11;:23;42756:10;42744:23;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:52;;42736:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;42840:33;42850:10;42862;42840:9;:33::i;:::-;42936:10;42910:11;:23;42922:10;42910:23;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;42884:11;:23;42896:10;42884:23;;;;;;;;;;;;;;;:62;;;;42044:907;:::o;41944:92::-;3027:13;:11;:13::i;:::-;42023:8:::1;42013:7;:18;;;;;;:::i;:::-;;41944:92:::0;:::o;26278:234::-;26425:8;26373:18;:39;26392:19;:17;:19::i;:::-;26373:39;;;;;;;;;;;;;;;:49;26413:8;26373:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;26485:8;26449:55;;26464:19;:17;:19::i;:::-;26449:55;;;26495:8;26449:55;;;;;;:::i;:::-;;;;;;;;26278:234;;:::o;41416:35::-;;;;:::o;30982:407::-;31157:31;31170:4;31176:2;31180:7;31157:12;:31::i;:::-;31221:1;31203:2;:14;;;:19;31199:183;;31242:56;31273:4;31279:2;31283:7;31292:5;31242:30;:56::i;:::-;31237:145;;31326:40;;;;;;;;;;;;;;31237:145;31199:183;30982:407;;;;:::o;44210:71::-;3027:13;:11;:13::i;:::-;44270:6:::1;44262:5;;:14;;;;;;;;;;;;;;;;;;44210:71:::0;:::o;43719:405::-;43796:13;43832:16;43840:7;43832;:16::i;:::-;43824:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43911:5;43897:19;;:10;;;;;;;;;;;:19;;;43894:225;;43940:17;43933:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43894:225;44018:1;43997:10;:8;:10::i;:::-;43991:24;:28;:128;;;;;;;;;;;;;;;;;44060:10;:8;:10::i;:::-;44072:18;:7;:16;:18::i;:::-;44043:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43991:128;43984:135;;43719:405;;;;:::o;43169:132::-;3027:13;:11;:13::i;:::-;43278:18:::1;43258:17;:38;;;;;;:::i;:::-;;43169:132:::0;:::o;41295:31::-;;;;:::o;44466:166::-;3027:13;:11;:13::i;:::-;44554:16:::1;;44544:7;:26;44536:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44617:7;44602:12;:22;;;;44466:166:::0;:::o;26520:164::-;26617:4;26641:18;:25;26660:5;26641:25;;;;;;;;;;;;;;;:35;26667:8;26641:35;;;;;;;;;;;;;;;;;;;;;;;;;26634:42;;26520:164;;;;:::o;3414:201::-;3027:13;:11;:13::i;:::-;3523:1:::1;3503:22;;:8;:22;;::::0;3495:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3579:28;3598:8;3579:18;:28::i;:::-;3414:201:::0;:::o;26692:282::-;26757:4;26813:7;26794:15;:13;:15::i;:::-;:26;;:66;;;;;26847:13;;26837:7;:23;26794:66;:153;;;;;26946:1;17748:8;26898:17;:26;26916:7;26898:26;;;;;;;;;;;;:44;:49;26794:153;26774:173;;26692:282;;;:::o;39537:105::-;39597:7;39624:10;39617:17;;39537:105;:::o;43394:97::-;43459:7;43483:1;43476:8;;43394:97;:::o;23534:670::-;23601:7;23621:12;23636:7;23621:22;;23704:4;23685:15;:13;:15::i;:::-;:23;23681:456;;23738:13;;23731:4;:20;23727:410;;;23776:14;23793:17;:23;23811:4;23793:23;;;;;;;;;;;;23776:40;;23910:1;17748:8;23882:6;:24;:29;23878:240;;23942:113;23959:1;23949:6;:11;23942:113;;24002:17;:25;24020:6;;;;;;;24002:25;;;;;;;;;;;;23993:34;;23942:113;;;24088:6;24081:13;;;;;;23878:240;23753:384;23727:410;23681:456;24165:31;;;;;;;;;;;;;;23534:670;;;;:::o;27855:485::-;27957:27;27986:23;28027:38;28068:15;:24;28084:7;28068:24;;;;;;;;;;;28027:65;;28245:18;28222:41;;28302:19;28296:26;28277:45;;28207:126;27855:485;;;:::o;27083:659::-;27232:11;27397:16;27390:5;27386:28;27377:37;;27557:16;27546:9;27542:32;27529:45;;27707:15;27696:9;27693:30;27685:5;27674:9;27671:20;27668:56;27658:66;;27083:659;;;;;:::o;31397:159::-;;;;;:::o;39218:311::-;39353:7;39373:16;18152:3;39399:19;:41;;39373:68;;18152:3;39467:31;39478:4;39484:2;39488:9;39467:10;:31::i;:::-;39459:40;;:62;;39452:69;;;39218:311;;;;;:::o;24752:450::-;24832:14;25000:16;24993:5;24989:28;24980:37;;25177:5;25163:11;25138:23;25134:41;25131:52;25124:5;25121:63;25111:73;;24752:450;;;;:::o;31567:158::-;;;;;:::o;3163:132::-;3238:12;:10;:12::i;:::-;3227:23;;:7;:5;:7::i;:::-;:23;;;3219:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3163:132::o;3623:191::-;3697:16;3716:6;;;;;;;;;;;3697:25;;3742:8;3733:6;;:17;;;;;;;;;;;;;;;;;;3797:8;3766:40;;3787:8;3766:40;;;;;;;;;;;;3686:128;3623:191;:::o;19966:296::-;20021:7;20228:15;:13;:15::i;:::-;20212:13;;:31;20205:38;;19966:296;:::o;35990:112::-;36067:27;36077:2;36081:8;36067:27;;;;;;;;;;;;:9;:27::i;:::-;35990:112;;:::o;31733:716::-;31896:4;31942:2;31917:45;;;31963:19;:17;:19::i;:::-;31984:4;31990:7;31999:5;31917:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31913:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32217:1;32200:6;:13;:18;32196:235;;32246:40;;;;;;;;;;;;;;32196:235;32389:6;32383:13;32374:6;32370:2;32366:15;32359:38;31913:529;32086:54;;;32076:64;;;:6;:64;;;;32069:71;;;31733:716;;;;;;:::o;41845:91::-;41897:13;41924:7;41917:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41845:91;:::o;12063:716::-;12119:13;12170:14;12207:1;12187:17;12198:5;12187:10;:17::i;:::-;:21;12170:38;;12223:20;12257:6;12246:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12223:41;;12279:11;12408:6;12404:2;12400:15;12392:6;12388:28;12381:35;;12445:288;12452:4;12445:288;;;12477:5;;;;;;;;12619:8;12614:2;12607:5;12603:14;12598:30;12593:3;12585:44;12675:2;12666:11;;;;;;:::i;:::-;;;;;12709:1;12700:5;:10;12445:288;12696:21;12445:288;12754:6;12747:13;;;;;12063:716;;;:::o;39063:147::-;39200:6;39063:147;;;;;:::o;2514:98::-;2567:7;2594:10;2587:17;;2514:98;:::o;35293:689::-;35424:19;35430:2;35434:8;35424:5;:19::i;:::-;35503:1;35485:2;:14;;;:19;35481:483;;35525:11;35539:13;;35525:27;;35571:13;35593:8;35587:3;:14;35571:30;;35620:233;35651:62;35690:1;35694:2;35698:7;;;;;;35707:5;35651:30;:62::i;:::-;35646:167;;35749:40;;;;;;;;;;;;;;35646:167;35848:3;35840:5;:11;35620:233;;35935:3;35918:13;;:20;35914:34;;35940:8;;;35914:34;35506:458;;35481:483;35293:689;;;:::o;9651:922::-;9704:7;9724:14;9741:1;9724:18;;9791:6;9782:5;:15;9778:102;;9827:6;9818:15;;;;;;:::i;:::-;;;;;9862:2;9852:12;;;;9778:102;9907:6;9898:5;:15;9894:102;;9943:6;9934:15;;;;;;:::i;:::-;;;;;9978:2;9968:12;;;;9894:102;10023:6;10014:5;:15;10010:102;;10059:6;10050:15;;;;;;:::i;:::-;;;;;10094:2;10084:12;;;;10010:102;10139:5;10130;:14;10126:99;;10174:5;10165:14;;;;;;:::i;:::-;;;;;10208:1;10198:11;;;;10126:99;10252:5;10243;:14;10239:99;;10287:5;10278:14;;;;;;:::i;:::-;;;;;10321:1;10311:11;;;;10239:99;10365:5;10356;:14;10352:99;;10400:5;10391:14;;;;;;:::i;:::-;;;;;10434:1;10424:11;;;;10352:99;10478:5;10469;:14;10465:66;;10514:1;10504:11;;;;10465:66;10559:6;10552:13;;;9651:922;;;:::o;32457:1770::-;32530:20;32553:13;;32530:36;;32593:1;32581:8;:13;32577:44;;32603:18;;;;;;;;;;;;;;32577:44;32634:61;32664:1;32668:2;32672:12;32686:8;32634:21;:61::i;:::-;32804:1;17110:2;32774:1;:26;;32773:32;32761:8;:45;32735:18;:22;32754:2;32735:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;32857:139;32894:2;32948:33;32971:1;32975:2;32979:1;32948:14;:33::i;:::-;32915:30;32936:8;32915:20;:30::i;:::-;:66;32857:18;:139::i;:::-;32823:17;:31;32841:12;32823:31;;;;;;;;;;;:173;;;;33013:16;33044:11;33073:8;33058:12;:23;33044:37;;33244:16;33240:2;33236:25;33224:37;;33616:12;33576:8;33535:1;33473:25;33414:1;33353;33326:335;33741:1;33727:12;33723:20;33681:346;33782:3;33773:7;33770:16;33681:346;;34000:7;33990:8;33987:1;33960:25;33957:1;33954;33949:59;33835:1;33826:7;33822:15;33811:26;;33681:346;;;33685:77;34072:1;34060:8;:13;34056:45;;34082:19;;;;;;;;;;;;;;34056:45;34134:3;34118:13;:19;;;;32708:1441;;34159:60;34188:1;34192:2;34196:12;34210:8;34159:20;:60::i;:::-;32519:1708;32457:1770;;:::o;25304:324::-;25374:14;25607:1;25597:8;25594:15;25568:24;25564:46;25554:56;;25304:324;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:149::-;1647:7;1687:66;1680:5;1676:78;1665:89;;1611:149;;;:::o;1766:120::-;1838:23;1855:5;1838:23;:::i;:::-;1831:5;1828:34;1818:62;;1876:1;1873;1866:12;1818:62;1766:120;:::o;1892:137::-;1937:5;1975:6;1962:20;1953:29;;1991:32;2017:5;1991:32;:::i;:::-;1892:137;;;;:::o;2035:327::-;2093:6;2142:2;2130:9;2121:7;2117:23;2113:32;2110:119;;;2148:79;;:::i;:::-;2110:119;2268:1;2293:52;2337:7;2328:6;2317:9;2313:22;2293:52;:::i;:::-;2283:62;;2239:116;2035:327;;;;:::o;2368:90::-;2402:7;2445:5;2438:13;2431:21;2420:32;;2368:90;;;:::o;2464:109::-;2545:21;2560:5;2545:21;:::i;:::-;2540:3;2533:34;2464:109;;:::o;2579:210::-;2666:4;2704:2;2693:9;2689:18;2681:26;;2717:65;2779:1;2768:9;2764:17;2755:6;2717:65;:::i;:::-;2579:210;;;;:::o;2795:99::-;2847:6;2881:5;2875:12;2865:22;;2795:99;;;:::o;2900:169::-;2984:11;3018:6;3013:3;3006:19;3058:4;3053:3;3049:14;3034:29;;2900:169;;;;:::o;3075:246::-;3156:1;3166:113;3180:6;3177:1;3174:13;3166:113;;;3265:1;3260:3;3256:11;3250:18;3246:1;3241:3;3237:11;3230:39;3202:2;3199:1;3195:10;3190:15;;3166:113;;;3313:1;3304:6;3299:3;3295:16;3288:27;3137:184;3075:246;;;:::o;3327:102::-;3368:6;3419:2;3415:7;3410:2;3403:5;3399:14;3395:28;3385:38;;3327:102;;;:::o;3435:377::-;3523:3;3551:39;3584:5;3551:39;:::i;:::-;3606:71;3670:6;3665:3;3606:71;:::i;:::-;3599:78;;3686:65;3744:6;3739:3;3732:4;3725:5;3721:16;3686:65;:::i;:::-;3776:29;3798:6;3776:29;:::i;:::-;3771:3;3767:39;3760:46;;3527:285;3435:377;;;;:::o;3818:313::-;3931:4;3969:2;3958:9;3954:18;3946:26;;4018:9;4012:4;4008:20;4004:1;3993:9;3989:17;3982:47;4046:78;4119:4;4110:6;4046:78;:::i;:::-;4038:86;;3818:313;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:329::-;4469:6;4518:2;4506:9;4497:7;4493:23;4489:32;4486:119;;;4524:79;;:::i;:::-;4486:119;4644:1;4669:53;4714:7;4705:6;4694:9;4690:22;4669:53;:::i;:::-;4659:63;;4615:117;4410:329;;;;:::o;4745:118::-;4832:24;4850:5;4832:24;:::i;:::-;4827:3;4820:37;4745:118;;:::o;4869:222::-;4962:4;5000:2;4989:9;4985:18;4977:26;;5013:71;5081:1;5070:9;5066:17;5057:6;5013:71;:::i;:::-;4869:222;;;;:::o;5097:474::-;5165:6;5173;5222:2;5210:9;5201:7;5197:23;5193:32;5190:119;;;5228:79;;:::i;:::-;5190:119;5348:1;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5319:117;5475:2;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5446:118;5097:474;;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:116::-;6272:21;6287:5;6272:21;:::i;:::-;6265:5;6262:32;6252:60;;6308:1;6305;6298:12;6252:60;6202:116;:::o;6324:133::-;6367:5;6405:6;6392:20;6383:29;;6421:30;6445:5;6421:30;:::i;:::-;6324:133;;;;:::o;6463:323::-;6519:6;6568:2;6556:9;6547:7;6543:23;6539:32;6536:119;;;6574:79;;:::i;:::-;6536:119;6694:1;6719:50;6761:7;6752:6;6741:9;6737:22;6719:50;:::i;:::-;6709:60;;6665:114;6463:323;;;;:::o;6792:117::-;6901:1;6898;6891:12;6915:117;7024:1;7021;7014:12;7038:180;7086:77;7083:1;7076:88;7183:4;7180:1;7173:15;7207:4;7204:1;7197:15;7224:281;7307:27;7329:4;7307:27;:::i;:::-;7299:6;7295:40;7437:6;7425:10;7422:22;7401:18;7389:10;7386:34;7383:62;7380:88;;;7448:18;;:::i;:::-;7380:88;7488:10;7484:2;7477:22;7267:238;7224:281;;:::o;7511:129::-;7545:6;7572:20;;:::i;:::-;7562:30;;7601:33;7629:4;7621:6;7601:33;:::i;:::-;7511:129;;;:::o;7646:308::-;7708:4;7798:18;7790:6;7787:30;7784:56;;;7820:18;;:::i;:::-;7784:56;7858:29;7880:6;7858:29;:::i;:::-;7850:37;;7942:4;7936;7932:15;7924:23;;7646:308;;;:::o;7960:146::-;8057:6;8052:3;8047;8034:30;8098:1;8089:6;8084:3;8080:16;8073:27;7960:146;;;:::o;8112:425::-;8190:5;8215:66;8231:49;8273:6;8231:49;:::i;:::-;8215:66;:::i;:::-;8206:75;;8304:6;8297:5;8290:21;8342:4;8335:5;8331:16;8380:3;8371:6;8366:3;8362:16;8359:25;8356:112;;;8387:79;;:::i;:::-;8356:112;8477:54;8524:6;8519:3;8514;8477:54;:::i;:::-;8196:341;8112:425;;;;;:::o;8557:340::-;8613:5;8662:3;8655:4;8647:6;8643:17;8639:27;8629:122;;8670:79;;:::i;:::-;8629:122;8787:6;8774:20;8812:79;8887:3;8879:6;8872:4;8864:6;8860:17;8812:79;:::i;:::-;8803:88;;8619:278;8557:340;;;;:::o;8903:509::-;8972:6;9021:2;9009:9;9000:7;8996:23;8992:32;8989:119;;;9027:79;;:::i;:::-;8989:119;9175:1;9164:9;9160:17;9147:31;9205:18;9197:6;9194:30;9191:117;;;9227:79;;:::i;:::-;9191:117;9332:63;9387:7;9378:6;9367:9;9363:22;9332:63;:::i;:::-;9322:73;;9118:287;8903:509;;;;:::o;9418:468::-;9483:6;9491;9540:2;9528:9;9519:7;9515:23;9511:32;9508:119;;;9546:79;;:::i;:::-;9508:119;9666:1;9691:53;9736:7;9727:6;9716:9;9712:22;9691:53;:::i;:::-;9681:63;;9637:117;9793:2;9819:50;9861:7;9852:6;9841:9;9837:22;9819:50;:::i;:::-;9809:60;;9764:115;9418:468;;;;;:::o;9892:307::-;9953:4;10043:18;10035:6;10032:30;10029:56;;;10065:18;;:::i;:::-;10029:56;10103:29;10125:6;10103:29;:::i;:::-;10095:37;;10187:4;10181;10177:15;10169:23;;9892:307;;;:::o;10205:423::-;10282:5;10307:65;10323:48;10364:6;10323:48;:::i;:::-;10307:65;:::i;:::-;10298:74;;10395:6;10388:5;10381:21;10433:4;10426:5;10422:16;10471:3;10462:6;10457:3;10453:16;10450:25;10447:112;;;10478:79;;:::i;:::-;10447:112;10568:54;10615:6;10610:3;10605;10568:54;:::i;:::-;10288:340;10205:423;;;;;:::o;10647:338::-;10702:5;10751:3;10744:4;10736:6;10732:17;10728:27;10718:122;;10759:79;;:::i;:::-;10718:122;10876:6;10863:20;10901:78;10975:3;10967:6;10960:4;10952:6;10948:17;10901:78;:::i;:::-;10892:87;;10708:277;10647:338;;;;:::o;10991:943::-;11086:6;11094;11102;11110;11159:3;11147:9;11138:7;11134:23;11130:33;11127:120;;;11166:79;;:::i;:::-;11127:120;11286:1;11311:53;11356:7;11347:6;11336:9;11332:22;11311:53;:::i;:::-;11301:63;;11257:117;11413:2;11439:53;11484:7;11475:6;11464:9;11460:22;11439:53;:::i;:::-;11429:63;;11384:118;11541:2;11567:53;11612:7;11603:6;11592:9;11588:22;11567:53;:::i;:::-;11557:63;;11512:118;11697:2;11686:9;11682:18;11669:32;11728:18;11720:6;11717:30;11714:117;;;11750:79;;:::i;:::-;11714:117;11855:62;11909:7;11900:6;11889:9;11885:22;11855:62;:::i;:::-;11845:72;;11640:287;10991:943;;;;;;;:::o;11940:474::-;12008:6;12016;12065:2;12053:9;12044:7;12040:23;12036:32;12033:119;;;12071:79;;:::i;:::-;12033:119;12191:1;12216:53;12261:7;12252:6;12241:9;12237:22;12216:53;:::i;:::-;12206:63;;12162:117;12318:2;12344:53;12389:7;12380:6;12369:9;12365:22;12344:53;:::i;:::-;12334:63;;12289:118;11940:474;;;;;:::o;12420:180::-;12468:77;12465:1;12458:88;12565:4;12562:1;12555:15;12589:4;12586:1;12579:15;12606:320;12650:6;12687:1;12681:4;12677:12;12667:22;;12734:1;12728:4;12724:12;12755:18;12745:81;;12811:4;12803:6;12799:17;12789:27;;12745:81;12873:2;12865:6;12862:14;12842:18;12839:38;12836:84;;12892:18;;:::i;:::-;12836:84;12657:269;12606:320;;;:::o;12932:147::-;13033:11;13070:3;13055:18;;12932:147;;;;:::o;13085:114::-;;:::o;13205:398::-;13364:3;13385:83;13466:1;13461:3;13385:83;:::i;:::-;13378:90;;13477:93;13566:3;13477:93;:::i;:::-;13595:1;13590:3;13586:11;13579:18;;13205:398;;;:::o;13609:379::-;13793:3;13815:147;13958:3;13815:147;:::i;:::-;13808:154;;13979:3;13972:10;;13609:379;;;:::o;13994:166::-;14134:18;14130:1;14122:6;14118:14;14111:42;13994:166;:::o;14166:366::-;14308:3;14329:67;14393:2;14388:3;14329:67;:::i;:::-;14322:74;;14405:93;14494:3;14405:93;:::i;:::-;14523:2;14518:3;14514:12;14507:19;;14166:366;;;:::o;14538:419::-;14704:4;14742:2;14731:9;14727:18;14719:26;;14791:9;14785:4;14781:20;14777:1;14766:9;14762:17;14755:47;14819:131;14945:4;14819:131;:::i;:::-;14811:139;;14538:419;;;:::o;14963:180::-;15011:77;15008:1;15001:88;15108:4;15105:1;15098:15;15132:4;15129:1;15122:15;15149:191;15189:3;15208:20;15226:1;15208:20;:::i;:::-;15203:25;;15242:20;15260:1;15242:20;:::i;:::-;15237:25;;15285:1;15282;15278:9;15271:16;;15306:3;15303:1;15300:10;15297:36;;;15313:18;;:::i;:::-;15297:36;15149:191;;;;:::o;15346:168::-;15486:20;15482:1;15474:6;15470:14;15463:44;15346:168;:::o;15520:366::-;15662:3;15683:67;15747:2;15742:3;15683:67;:::i;:::-;15676:74;;15759:93;15848:3;15759:93;:::i;:::-;15877:2;15872:3;15868:12;15861:19;;15520:366;;;:::o;15892:419::-;16058:4;16096:2;16085:9;16081:18;16073:26;;16145:9;16139:4;16135:20;16131:1;16120:9;16116:17;16109:47;16173:131;16299:4;16173:131;:::i;:::-;16165:139;;15892:419;;;:::o;16317:172::-;16457:24;16453:1;16445:6;16441:14;16434:48;16317:172;:::o;16495:366::-;16637:3;16658:67;16722:2;16717:3;16658:67;:::i;:::-;16651:74;;16734:93;16823:3;16734:93;:::i;:::-;16852:2;16847:3;16843:12;16836:19;;16495:366;;;:::o;16867:419::-;17033:4;17071:2;17060:9;17056:18;17048:26;;17120:9;17114:4;17110:20;17106:1;17095:9;17091:17;17084:47;17148:131;17274:4;17148:131;:::i;:::-;17140:139;;16867:419;;;:::o;17292:410::-;17332:7;17355:20;17373:1;17355:20;:::i;:::-;17350:25;;17389:20;17407:1;17389:20;:::i;:::-;17384:25;;17444:1;17441;17437:9;17466:30;17484:11;17466:30;:::i;:::-;17455:41;;17645:1;17636:7;17632:15;17629:1;17626:22;17606:1;17599:9;17579:83;17556:139;;17675:18;;:::i;:::-;17556:139;17340:362;17292:410;;;;:::o;17708:172::-;17848:24;17844:1;17836:6;17832:14;17825:48;17708:172;:::o;17886:366::-;18028:3;18049:67;18113:2;18108:3;18049:67;:::i;:::-;18042:74;;18125:93;18214:3;18125:93;:::i;:::-;18243:2;18238:3;18234:12;18227:19;;17886:366;;;:::o;18258:419::-;18424:4;18462:2;18451:9;18447:18;18439:26;;18511:9;18505:4;18501:20;18497:1;18486:9;18482:17;18475:47;18539:131;18665:4;18539:131;:::i;:::-;18531:139;;18258:419;;;:::o;18683:194::-;18723:4;18743:20;18761:1;18743:20;:::i;:::-;18738:25;;18777:20;18795:1;18777:20;:::i;:::-;18772:25;;18821:1;18818;18814:9;18806:17;;18845:1;18839:4;18836:11;18833:37;;;18850:18;;:::i;:::-;18833:37;18683:194;;;;:::o;18883:168::-;19023:20;19019:1;19011:6;19007:14;19000:44;18883:168;:::o;19057:366::-;19199:3;19220:67;19284:2;19279:3;19220:67;:::i;:::-;19213:74;;19296:93;19385:3;19296:93;:::i;:::-;19414:2;19409:3;19405:12;19398:19;;19057:366;;;:::o;19429:419::-;19595:4;19633:2;19622:9;19618:18;19610:26;;19682:9;19676:4;19672:20;19668:1;19657:9;19653:17;19646:47;19710:131;19836:4;19710:131;:::i;:::-;19702:139;;19429:419;;;:::o;19854:178::-;19994:30;19990:1;19982:6;19978:14;19971:54;19854:178;:::o;20038:366::-;20180:3;20201:67;20265:2;20260:3;20201:67;:::i;:::-;20194:74;;20277:93;20366:3;20277:93;:::i;:::-;20395:2;20390:3;20386:12;20379:19;;20038:366;;;:::o;20410:419::-;20576:4;20614:2;20603:9;20599:18;20591:26;;20663:9;20657:4;20653:20;20649:1;20638:9;20634:17;20627:47;20691:131;20817:4;20691:131;:::i;:::-;20683:139;;20410:419;;;:::o;20835:141::-;20884:4;20907:3;20899:11;;20930:3;20927:1;20920:14;20964:4;20961:1;20951:18;20943:26;;20835:141;;;:::o;20982:93::-;21019:6;21066:2;21061;21054:5;21050:14;21046:23;21036:33;;20982:93;;;:::o;21081:107::-;21125:8;21175:5;21169:4;21165:16;21144:37;;21081:107;;;;:::o;21194:393::-;21263:6;21313:1;21301:10;21297:18;21336:97;21366:66;21355:9;21336:97;:::i;:::-;21454:39;21484:8;21473:9;21454:39;:::i;:::-;21442:51;;21526:4;21522:9;21515:5;21511:21;21502:30;;21575:4;21565:8;21561:19;21554:5;21551:30;21541:40;;21270:317;;21194:393;;;;;:::o;21593:60::-;21621:3;21642:5;21635:12;;21593:60;;;:::o;21659:142::-;21709:9;21742:53;21760:34;21769:24;21787:5;21769:24;:::i;:::-;21760:34;:::i;:::-;21742:53;:::i;:::-;21729:66;;21659:142;;;:::o;21807:75::-;21850:3;21871:5;21864:12;;21807:75;;;:::o;21888:269::-;21998:39;22029:7;21998:39;:::i;:::-;22059:91;22108:41;22132:16;22108:41;:::i;:::-;22100:6;22093:4;22087:11;22059:91;:::i;:::-;22053:4;22046:105;21964:193;21888:269;;;:::o;22163:73::-;22208:3;22163:73;:::o;22242:189::-;22319:32;;:::i;:::-;22360:65;22418:6;22410;22404:4;22360:65;:::i;:::-;22295:136;22242:189;;:::o;22437:186::-;22497:120;22514:3;22507:5;22504:14;22497:120;;;22568:39;22605:1;22598:5;22568:39;:::i;:::-;22541:1;22534:5;22530:13;22521:22;;22497:120;;;22437:186;;:::o;22629:543::-;22730:2;22725:3;22722:11;22719:446;;;22764:38;22796:5;22764:38;:::i;:::-;22848:29;22866:10;22848:29;:::i;:::-;22838:8;22834:44;23031:2;23019:10;23016:18;23013:49;;;23052:8;23037:23;;23013:49;23075:80;23131:22;23149:3;23131:22;:::i;:::-;23121:8;23117:37;23104:11;23075:80;:::i;:::-;22734:431;;22719:446;22629:543;;;:::o;23178:117::-;23232:8;23282:5;23276:4;23272:16;23251:37;;23178:117;;;;:::o;23301:169::-;23345:6;23378:51;23426:1;23422:6;23414:5;23411:1;23407:13;23378:51;:::i;:::-;23374:56;23459:4;23453;23449:15;23439:25;;23352:118;23301:169;;;;:::o;23475:295::-;23551:4;23697:29;23722:3;23716:4;23697:29;:::i;:::-;23689:37;;23759:3;23756:1;23752:11;23746:4;23743:21;23735:29;;23475:295;;;;:::o;23775:1395::-;23892:37;23925:3;23892:37;:::i;:::-;23994:18;23986:6;23983:30;23980:56;;;24016:18;;:::i;:::-;23980:56;24060:38;24092:4;24086:11;24060:38;:::i;:::-;24145:67;24205:6;24197;24191:4;24145:67;:::i;:::-;24239:1;24263:4;24250:17;;24295:2;24287:6;24284:14;24312:1;24307:618;;;;24969:1;24986:6;24983:77;;;25035:9;25030:3;25026:19;25020:26;25011:35;;24983:77;25086:67;25146:6;25139:5;25086:67;:::i;:::-;25080:4;25073:81;24942:222;24277:887;;24307:618;24359:4;24355:9;24347:6;24343:22;24393:37;24425:4;24393:37;:::i;:::-;24452:1;24466:208;24480:7;24477:1;24474:14;24466:208;;;24559:9;24554:3;24550:19;24544:26;24536:6;24529:42;24610:1;24602:6;24598:14;24588:24;;24657:2;24646:9;24642:18;24629:31;;24503:4;24500:1;24496:12;24491:17;;24466:208;;;24702:6;24693:7;24690:19;24687:179;;;24760:9;24755:3;24751:19;24745:26;24803:48;24845:4;24837:6;24833:17;24822:9;24803:48;:::i;:::-;24795:6;24788:64;24710:156;24687:179;24912:1;24908;24900:6;24896:14;24892:22;24886:4;24879:36;24314:611;;;24277:887;;23867:1303;;;23775:1395;;:::o;25176:180::-;25316:32;25312:1;25304:6;25300:14;25293:56;25176:180;:::o;25362:366::-;25504:3;25525:67;25589:2;25584:3;25525:67;:::i;:::-;25518:74;;25601:93;25690:3;25601:93;:::i;:::-;25719:2;25714:3;25710:12;25703:19;;25362:366;;;:::o;25734:419::-;25900:4;25938:2;25927:9;25923:18;25915:26;;25987:9;25981:4;25977:20;25973:1;25962:9;25958:17;25951:47;26015:131;26141:4;26015:131;:::i;:::-;26007:139;;25734:419;;;:::o;26159:148::-;26261:11;26298:3;26283:18;;26159:148;;;;:::o;26313:390::-;26419:3;26447:39;26480:5;26447:39;:::i;:::-;26502:89;26584:6;26579:3;26502:89;:::i;:::-;26495:96;;26600:65;26658:6;26653:3;26646:4;26639:5;26635:16;26600:65;:::i;:::-;26690:6;26685:3;26681:16;26674:23;;26423:280;26313:390;;;;:::o;26709:155::-;26849:7;26845:1;26837:6;26833:14;26826:31;26709:155;:::o;26870:400::-;27030:3;27051:84;27133:1;27128:3;27051:84;:::i;:::-;27044:91;;27144:93;27233:3;27144:93;:::i;:::-;27262:1;27257:3;27253:11;27246:18;;26870:400;;;:::o;27276:701::-;27557:3;27579:95;27670:3;27661:6;27579:95;:::i;:::-;27572:102;;27691:95;27782:3;27773:6;27691:95;:::i;:::-;27684:102;;27803:148;27947:3;27803:148;:::i;:::-;27796:155;;27968:3;27961:10;;27276:701;;;;;:::o;27983:225::-;28123:34;28119:1;28111:6;28107:14;28100:58;28192:8;28187:2;28179:6;28175:15;28168:33;27983:225;:::o;28214:366::-;28356:3;28377:67;28441:2;28436:3;28377:67;:::i;:::-;28370:74;;28453:93;28542:3;28453:93;:::i;:::-;28571:2;28566:3;28562:12;28555:19;;28214:366;;;:::o;28586:419::-;28752:4;28790:2;28779:9;28775:18;28767:26;;28839:9;28833:4;28829:20;28825:1;28814:9;28810:17;28803:47;28867:131;28993:4;28867:131;:::i;:::-;28859:139;;28586:419;;;:::o;29011:182::-;29151:34;29147:1;29139:6;29135:14;29128:58;29011:182;:::o;29199:366::-;29341:3;29362:67;29426:2;29421:3;29362:67;:::i;:::-;29355:74;;29438:93;29527:3;29438:93;:::i;:::-;29556:2;29551:3;29547:12;29540:19;;29199:366;;;:::o;29571:419::-;29737:4;29775:2;29764:9;29760:18;29752:26;;29824:9;29818:4;29814:20;29810:1;29799:9;29795:17;29788:47;29852:131;29978:4;29852:131;:::i;:::-;29844:139;;29571:419;;;:::o;29996:98::-;30047:6;30081:5;30075:12;30065:22;;29996:98;;;:::o;30100:168::-;30183:11;30217:6;30212:3;30205:19;30257:4;30252:3;30248:14;30233:29;;30100:168;;;;:::o;30274:373::-;30360:3;30388:38;30420:5;30388:38;:::i;:::-;30442:70;30505:6;30500:3;30442:70;:::i;:::-;30435:77;;30521:65;30579:6;30574:3;30567:4;30560:5;30556:16;30521:65;:::i;:::-;30611:29;30633:6;30611:29;:::i;:::-;30606:3;30602:39;30595:46;;30364:283;30274:373;;;;:::o;30653:640::-;30848:4;30886:3;30875:9;30871:19;30863:27;;30900:71;30968:1;30957:9;30953:17;30944:6;30900:71;:::i;:::-;30981:72;31049:2;31038:9;31034:18;31025:6;30981:72;:::i;:::-;31063;31131:2;31120:9;31116:18;31107:6;31063:72;:::i;:::-;31182:9;31176:4;31172:20;31167:2;31156:9;31152:18;31145:48;31210:76;31281:4;31272:6;31210:76;:::i;:::-;31202:84;;30653:640;;;;;;;:::o;31299:141::-;31355:5;31386:6;31380:13;31371:22;;31402:32;31428:5;31402:32;:::i;:::-;31299:141;;;;:::o;31446:349::-;31515:6;31564:2;31552:9;31543:7;31539:23;31535:32;31532:119;;;31570:79;;:::i;:::-;31532:119;31690:1;31715:63;31770:7;31761:6;31750:9;31746:22;31715:63;:::i;:::-;31705:73;;31661:127;31446:349;;;;:::o;31801:180::-;31849:77;31846:1;31839:88;31946:4;31943:1;31936:15;31970:4;31967:1;31960:15
Swarm Source
ipfs://15cced816a2db4d9a17ab4857fe03088fce28f9b472fd1d4da7e3ed91030be42
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.