Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
9,999 TWD
Holders
705
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 TWDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheWisdomians
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-07 */ // SPDX-License-Identifier: MIT // Dev : A Square pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { 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); } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IERC721 is IERC165 { 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 ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 1; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract TheWisdomians is Ownable, ERC721A, ReentrancyGuard { using Strings for uint256; uint256 public MAX_PER_Transaction = 10; // maximam amount that user can mint/Transaction uint256 public MAX_PER_WALLET = 10; // maximam amount that user can mint/Wallet uint256 public TOKEN_NUMBER = 5000; uint256 private constant TotalCollectionSize_ = 9999; // total number of nfts uint256 private constant MaxMintPerBatch_ = 20; //max mint per transaction uint256 public PRICE = 0.0012 ether; mapping(address => uint256) public publicClaimedBy; string private _baseTokenURI; string private second_baseTokenURI; string private _uriBeforeReveal; bool public revealed = false; uint public status = 0; //0-pause 1-Public constructor() ERC721A("The Wisdomians","TWD") { } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function mint(uint256 quantity) external payable callerIsUser { require(status == 1 , "Sale is not Active"); require(totalSupply() + quantity <= TotalCollectionSize_, "reached max supply"); require(quantity <= MAX_PER_Transaction,"can not mint this many"); require(msg.value >= PRICE * quantity, "Need to send more ETH."); publicClaimedBy[msg.sender] += quantity; require(publicClaimedBy[msg.sender] <= MAX_PER_WALLET, "Purchase exceeds max allowed"); _safeMint(msg.sender, quantity); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token"); if(revealed == false){ return _uriBeforeReveal; } if(tokenId <= TOKEN_NUMBER) { string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, "/", tokenId.toString(), ".json")) : ""; } else { return bytes(second_baseTokenURI).length > 0 ? string(abi.encodePacked(second_baseTokenURI, "/", tokenId.toString(), ".json")) : ""; } } function changeRevealStatus() public onlyOwner { revealed = true; } function setBaseURI(string memory baseURI) external onlyOwner { _baseTokenURI = baseURI; } function setSecondBaseURI(string memory baseURI) external onlyOwner { second_baseTokenURI = baseURI; } function setURIbeforeReveal(string memory URI) external onlyOwner { _uriBeforeReveal = URI; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return _ownershipOf(tokenId); } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function changeMintPrice(uint256 _newPrice) external onlyOwner { PRICE = _newPrice; } function changeMAX_PER_Transaction(uint256 q) external onlyOwner { MAX_PER_Transaction = q; } function changeMAX_PER_WALLET(uint256 q) external onlyOwner { MAX_PER_WALLET = q; } function changeTOKEN_NUMBER(uint256 q) external onlyOwner { TOKEN_NUMBER = q; } function setStatus(uint256 s)external onlyOwner{ status = s; } function getStatus()public view returns(uint){ return status; } function getPrice(uint256 _quantity) public view returns (uint256) { return _quantity*PRICE; } function burnNFT(uint256 tokenId) public { require(ownerOf(tokenId) == msg.sender,"You are not the owner of tokenId"); _burn(tokenId); } function airdrop(address sendTo, uint quantity)public onlyOwner{ require(totalSupply() + quantity <= TotalCollectionSize_, "reached max supply"); _safeMint(sendTo, quantity); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_Transaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_NUMBER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sendTo","type":"address"},{"internalType":"uint256","name":"quantity","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Transaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeRevealStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeTOKEN_NUMBER","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","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":[{"internalType":"address","name":"","type":"address"}],"name":"publicClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setSecondBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setURIbeforeReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600a8055600a600b55611388600c5566044364c5bb0000600d556000601260006101000a81548160ff02191690831515021790555060006013553480156200004b57600080fd5b506040518060400160405280600e81526020017f54686520576973646f6d69616e730000000000000000000000000000000000008152506040518060400160405280600381526020017f5457440000000000000000000000000000000000000000000000000000000000815250620000d8620000cc6200013060201b60201c565b6200013860201b60201c565b8160039080519060200190620000f092919062000205565b5080600490805190602001906200010992919062000205565b506200011a620001fc60201b60201c565b600181905550505060016009819055506200031a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b8280546200021390620002b5565b90600052602060002090601f01602090048101928262000237576000855562000283565b82601f106200025257805160ff191683800117855562000283565b8280016001018555821562000283579182015b828111156200028257825182559160200191906001019062000265565b5b50905062000292919062000296565b5090565b5b80821115620002b157600081600090555060010162000297565b5090565b60006002820490506001821680620002ce57607f821691505b60208210811415620002e557620002e4620002eb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6147b8806200032a6000396000f3fe6080604052600436106102465760003560e01c806369ba1a7511610139578063a0712d68116100b6578063c7b8fca71161007a578063c7b8fca714610831578063c87b56dd1461085a578063dc33e68114610897578063e7572230146108d4578063e985e9c514610911578063f2fde38b1461094e57610246565b8063a0712d6814610783578063a22cb4651461079f578063a40ece7a146107c8578063ac446002146107f1578063b88d4fde1461080857610246565b80638d859f3e116100fd5780638d859f3e1461069c5780638da5cb5b146106c75780639231ab2a146106f2578063930fa27b1461072f57806395d89b411461075857610246565b806369ba1a75146105b957806370a08231146105e2578063715018a61461061f57806375236143146106365780638ba4cc3c1461067357610246565b80632d5b005d116101c7578063518302271161018b57806351830227146104d257806351d7ff93146104fd57806355f804b3146105285780636352211e1461055157806364662f681461058e57610246565b80632d5b005d146104155780633fd173661461042c57806342842e0e1461045557806345ab07ee1461047e5780634e69d560146104a757610246565b806318160ddd1161020e57806318160ddd14610344578063200d2ed21461036f57806323b872dd1461039a5780632890e0d7146103c35780632ba2865b146103ec57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630f2cdd6c14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613865565b610977565b60405161027f9190613df0565b60405180910390f35b34801561029457600080fd5b5061029d610a59565b6040516102aa9190613e0b565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613908565b610aeb565b6040516102e79190613d89565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613825565b610b67565b005b34801561032557600080fd5b5061032e610c72565b60405161033b9190613fc8565b60405180910390f35b34801561035057600080fd5b50610359610c78565b6040516103669190613fc8565b60405180910390f35b34801561037b57600080fd5b50610384610c8f565b6040516103919190613fc8565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc919061370f565b610c95565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190613908565b610ca5565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613908565b610d27565b005b34801561042157600080fd5b5061042a610dad565b005b34801561043857600080fd5b50610453600480360381019061044e9190613908565b610e46565b005b34801561046157600080fd5b5061047c6004803603810190610477919061370f565b610ecc565b005b34801561048a57600080fd5b506104a560048036038101906104a09190613908565b610eec565b005b3480156104b357600080fd5b506104bc610f72565b6040516104c99190613fc8565b60405180910390f35b3480156104de57600080fd5b506104e7610f7c565b6040516104f49190613df0565b60405180910390f35b34801561050957600080fd5b50610512610f8f565b60405161051f9190613fc8565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a91906138bf565b610f95565b005b34801561055d57600080fd5b5061057860048036038101906105739190613908565b61102b565b6040516105859190613d89565b60405180910390f35b34801561059a57600080fd5b506105a3611041565b6040516105b09190613fc8565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190613908565b611047565b005b3480156105ee57600080fd5b50610609600480360381019061060491906136a2565b6110cd565b6040516106169190613fc8565b60405180910390f35b34801561062b57600080fd5b5061063461119d565b005b34801561064257600080fd5b5061065d600480360381019061065891906136a2565b611225565b60405161066a9190613fc8565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613825565b61123d565b005b3480156106a857600080fd5b506106b161131e565b6040516106be9190613fc8565b60405180910390f35b3480156106d357600080fd5b506106dc611324565b6040516106e99190613d89565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613908565b61134d565b6040516107269190613fad565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906138bf565b611365565b005b34801561076457600080fd5b5061076d6113fb565b60405161077a9190613e0b565b60405180910390f35b61079d60048036038101906107989190613908565b61148d565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906137e5565b611713565b005b3480156107d457600080fd5b506107ef60048036038101906107ea9190613908565b61188b565b005b3480156107fd57600080fd5b50610806611911565b005b34801561081457600080fd5b5061082f600480360381019061082a9190613762565b611a92565b005b34801561083d57600080fd5b50610858600480360381019061085391906138bf565b611b0e565b005b34801561086657600080fd5b50610881600480360381019061087c9190613908565b611ba4565b60405161088e9190613e0b565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b991906136a2565b611d61565b6040516108cb9190613fc8565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f69190613908565b611d73565b6040516109089190613fc8565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906136cf565b611d8a565b6040516109459190613df0565b60405180910390f35b34801561095a57600080fd5b50610975600480360381019061097091906136a2565b611e1e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a525750610a5182611f16565b5b9050919050565b606060038054610a68906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610a94906142ac565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b6000610af682611f80565b610b2c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b728261102b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bda576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf9611fce565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c2b5750610c2981610c24611fce565b611d8a565b155b15610c62576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6d838383611fd6565b505050565b600b5481565b6000610c82612088565b6002546001540303905090565b60135481565b610ca0838383612091565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610cc58261102b565b73ffffffffffffffffffffffffffffffffffffffff1614610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613f0d565b60405180910390fd5b610d2481612547565b50565b610d2f611fce565b73ffffffffffffffffffffffffffffffffffffffff16610d4d611324565b73ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90613ead565b60405180910390fd5b80600b8190555050565b610db5611fce565b73ffffffffffffffffffffffffffffffffffffffff16610dd3611324565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613ead565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b610e4e611fce565b73ffffffffffffffffffffffffffffffffffffffff16610e6c611324565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613ead565b60405180910390fd5b80600d8190555050565b610ee783838360405180602001604052806000815250611a92565b505050565b610ef4611fce565b73ffffffffffffffffffffffffffffffffffffffff16610f12611324565b73ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613ead565b60405180910390fd5b80600c8190555050565b6000601354905090565b601260009054906101000a900460ff1681565b600a5481565b610f9d611fce565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611324565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890613ead565b60405180910390fd5b80600f9080519060200190611027929190613473565b5050565b600061103682612555565b600001519050919050565b600c5481565b61104f611fce565b73ffffffffffffffffffffffffffffffffffffffff1661106d611324565b73ffffffffffffffffffffffffffffffffffffffff16146110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90613ead565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611135576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6111a5611fce565b73ffffffffffffffffffffffffffffffffffffffff166111c3611324565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613ead565b60405180910390fd5b61122360006127e4565b565b600e6020528060005260406000206000915090505481565b611245611fce565b73ffffffffffffffffffffffffffffffffffffffff16611263611324565b73ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b090613ead565b60405180910390fd5b61270f816112c5610c78565b6112cf91906140cd565b1115611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790613e8d565b60405180910390fd5b61131a82826128a8565b5050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113556134f9565b61135e82612555565b9050919050565b61136d611fce565b73ffffffffffffffffffffffffffffffffffffffff1661138b611324565b73ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890613ead565b60405180910390fd5b80601090805190602001906113f7929190613473565b5050565b60606004805461140a906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611436906142ac565b80156114835780601f1061145857610100808354040283529160200191611483565b820191906000526020600020905b81548152906001019060200180831161146657829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613e6d565b60405180910390fd5b600160135414611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613e4d565b60405180910390fd5b61270f8161154c610c78565b61155691906140cd565b1115611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613e8d565b60405180910390fd5b600a548111156115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390613f4d565b60405180910390fd5b80600d546115ea9190614154565b34101561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613f2d565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461167b91906140cd565b92505081905550600b54600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613f6d565b60405180910390fd5b61171033826128a8565b50565b61171b611fce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611780576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061178d611fce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661183a611fce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187f9190613df0565b60405180910390a35050565b611893611fce565b73ffffffffffffffffffffffffffffffffffffffff166118b1611324565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613ead565b60405180910390fd5b80600a8190555050565b611919611fce565b73ffffffffffffffffffffffffffffffffffffffff16611937611324565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490613ead565b60405180910390fd5b600260095414156119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90613f8d565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a0190613d74565b60006040518083038185875af1925050503d8060008114611a3e576040519150601f19603f3d011682016040523d82523d6000602084013e611a43565b606091505b5050905080611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613eed565b60405180910390fd5b506001600981905550565b611a9d848484612091565b611abc8373ffffffffffffffffffffffffffffffffffffffff166128c6565b8015611ad15750611acf848484846128d9565b155b15611b08576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611b16611fce565b73ffffffffffffffffffffffffffffffffffffffff16611b34611324565b73ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190613ead565b60405180910390fd5b8060119080519060200190611ba0929190613473565b5050565b6060611baf82611f80565b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613ecd565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415611c9c5760118054611c17906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611c43906142ac565b8015611c905780601f10611c6557610100808354040283529160200191611c90565b820191906000526020600020905b815481529060010190602001808311611c7357829003601f168201915b50505050509050611d5c565b600c548211611d02576000611caf612a39565b90506000815111611ccf5760405180602001604052806000815250611cfa565b80611cd984612acb565b604051602001611cea929190613d00565b6040516020818303038152906040525b915050611d5c565b600060108054611d11906142ac565b905011611d2d5760405180602001604052806000815250611d59565b6010611d3883612acb565b604051602001611d49929190613d3a565b6040516020818303038152906040525b90505b919050565b6000611d6c82612c2c565b9050919050565b6000600d5482611d839190614154565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e26611fce565b73ffffffffffffffffffffffffffffffffffffffff16611e44611324565b73ffffffffffffffffffffffffffffffffffffffff1614611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190613ead565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190613e2d565b60405180910390fd5b611f13816127e4565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611f8b612088565b11158015611f9a575060015482105b8015611fc7575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061209c82612555565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612107576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612128611fce565b73ffffffffffffffffffffffffffffffffffffffff161480612157575061215685612151611fce565b611d8a565b5b8061219c5750612165611fce565b73ffffffffffffffffffffffffffffffffffffffff1661218484610aeb565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806121d5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561223c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122498585856001612c96565b61225560008487611fd6565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124d55760015482146124d457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125408585856001612c9c565b5050505050565b612552816000612ca2565b50565b61255d6134f9565b60008290508061256b612088565b1115801561257a575060015481105b156127ad576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516127ab57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461268f5780925050506127df565b5b6001156127aa57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127a55780925050506127df565b612690565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128c2828260405180602001604052806000815250613092565b5050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ff611fce565b8786866040518563ffffffff1660e01b81526004016129219493929190613da4565b602060405180830381600087803b15801561293b57600080fd5b505af192505050801561296c57506040513d601f19601f820116820180604052508101906129699190613892565b60015b6129e6573d806000811461299c576040519150601f19603f3d011682016040523d82523d6000602084013e6129a1565b606091505b506000815114156129de576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f8054612a48906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612a74906142ac565b8015612ac15780601f10612a9657610100808354040283529160200191612ac1565b820191906000526020600020905b815481529060010190602001808311612aa457829003601f168201915b5050505050905090565b60606000821415612b13576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c27565b600082905060005b60008214612b45578080612b2e9061430f565b915050600a82612b3e9190614123565b9150612b1b565b60008167ffffffffffffffff811115612b6157612b60614445565b5b6040519080825280601f01601f191660200182016040528015612b935781602001600182028036833780820191505090505b5090505b60008514612c2057600182612bac91906141ae565b9150600a85612bbb9190614358565b6030612bc791906140cd565b60f81b818381518110612bdd57612bdc614416565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c199190614123565b9450612b97565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6000612cad83612555565b90506000816000015190508215612d8e5760008173ffffffffffffffffffffffffffffffffffffffff16612cdf611fce565b73ffffffffffffffffffffffffffffffffffffffff161480612d0e5750612d0d82612d08611fce565b611d8a565b5b80612d535750612d1c611fce565b73ffffffffffffffffffffffffffffffffffffffff16612d3b86610aeb565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612d8c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612d9c816000866001612c96565b612da860008583611fd6565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561300c57600154821461300b57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461307a816000866001612c9c565b60026000815480929190600101919050555050505050565b61309f83838360016130a4565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613112576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561314d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61315a6000868387612c96565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561332457506133238773ffffffffffffffffffffffffffffffffffffffff166128c6565b5b156133ea575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461339960008884806001019550886128d9565b6133cf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561332a5782600154146133e557600080fd5b613456565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156133eb575b81600181905550505061346c6000868387612c9c565b5050505050565b82805461347f906142ac565b90600052602060002090601f0160209004810192826134a157600085556134e8565b82601f106134ba57805160ff19168380011785556134e8565b828001600101855582156134e8579182015b828111156134e75782518255916020019190600101906134cc565b5b5090506134f5919061353c565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561355557600081600090555060010161353d565b5090565b600061356c61356784614008565b613fe3565b90508281526020810184848401111561358857613587614479565b5b61359384828561426a565b509392505050565b60006135ae6135a984614039565b613fe3565b9050828152602081018484840111156135ca576135c9614479565b5b6135d584828561426a565b509392505050565b6000813590506135ec81614726565b92915050565b6000813590506136018161473d565b92915050565b60008135905061361681614754565b92915050565b60008151905061362b81614754565b92915050565b600082601f83011261364657613645614474565b5b8135613656848260208601613559565b91505092915050565b600082601f83011261367457613673614474565b5b813561368484826020860161359b565b91505092915050565b60008135905061369c8161476b565b92915050565b6000602082840312156136b8576136b7614483565b5b60006136c6848285016135dd565b91505092915050565b600080604083850312156136e6576136e5614483565b5b60006136f4858286016135dd565b9250506020613705858286016135dd565b9150509250929050565b60008060006060848603121561372857613727614483565b5b6000613736868287016135dd565b9350506020613747868287016135dd565b92505060406137588682870161368d565b9150509250925092565b6000806000806080858703121561377c5761377b614483565b5b600061378a878288016135dd565b945050602061379b878288016135dd565b93505060406137ac8782880161368d565b925050606085013567ffffffffffffffff8111156137cd576137cc61447e565b5b6137d987828801613631565b91505092959194509250565b600080604083850312156137fc576137fb614483565b5b600061380a858286016135dd565b925050602061381b858286016135f2565b9150509250929050565b6000806040838503121561383c5761383b614483565b5b600061384a858286016135dd565b925050602061385b8582860161368d565b9150509250929050565b60006020828403121561387b5761387a614483565b5b600061388984828501613607565b91505092915050565b6000602082840312156138a8576138a7614483565b5b60006138b68482850161361c565b91505092915050565b6000602082840312156138d5576138d4614483565b5b600082013567ffffffffffffffff8111156138f3576138f261447e565b5b6138ff8482850161365f565b91505092915050565b60006020828403121561391e5761391d614483565b5b600061392c8482850161368d565b91505092915050565b61393e816141e2565b82525050565b61394d816141e2565b82525050565b61395c816141f4565b82525050565b61396b816141f4565b82525050565b600061397c8261407f565b6139868185614095565b9350613996818560208601614279565b61399f81614488565b840191505092915050565b60006139b58261408a565b6139bf81856140b1565b93506139cf818560208601614279565b6139d881614488565b840191505092915050565b60006139ee8261408a565b6139f881856140c2565b9350613a08818560208601614279565b80840191505092915050565b60008154613a21816142ac565b613a2b81866140c2565b94506001821660008114613a465760018114613a5757613a8a565b60ff19831686528186019350613a8a565b613a608561406a565b60005b83811015613a8257815481890152600182019150602081019050613a63565b838801955050505b50505092915050565b6000613aa06026836140b1565b9150613aab82614499565b604082019050919050565b6000613ac36012836140b1565b9150613ace826144e8565b602082019050919050565b6000613ae6601e836140b1565b9150613af182614511565b602082019050919050565b6000613b096012836140b1565b9150613b148261453a565b602082019050919050565b6000613b2c6005836140c2565b9150613b3782614563565b600582019050919050565b6000613b4f6020836140b1565b9150613b5a8261458c565b602082019050919050565b6000613b72602f836140b1565b9150613b7d826145b5565b604082019050919050565b6000613b956000836140a6565b9150613ba082614604565b600082019050919050565b6000613bb86010836140b1565b9150613bc382614607565b602082019050919050565b6000613bdb6020836140b1565b9150613be682614630565b602082019050919050565b6000613bfe6016836140b1565b9150613c0982614659565b602082019050919050565b6000613c216016836140b1565b9150613c2c82614682565b602082019050919050565b6000613c44601c836140b1565b9150613c4f826146ab565b602082019050919050565b6000613c67601f836140b1565b9150613c72826146d4565b602082019050919050565b6000613c8a6001836140c2565b9150613c95826146fd565b600182019050919050565b606082016000820151613cb66000850182613935565b506020820151613cc96020850182613cf1565b506040820151613cdc6040850182613953565b50505050565b613ceb8161424c565b82525050565b613cfa81614256565b82525050565b6000613d0c82856139e3565b9150613d1782613c7d565b9150613d2382846139e3565b9150613d2e82613b1f565b91508190509392505050565b6000613d468285613a14565b9150613d5182613c7d565b9150613d5d82846139e3565b9150613d6882613b1f565b91508190509392505050565b6000613d7f82613b88565b9150819050919050565b6000602082019050613d9e6000830184613944565b92915050565b6000608082019050613db96000830187613944565b613dc66020830186613944565b613dd36040830185613ce2565b8181036060830152613de58184613971565b905095945050505050565b6000602082019050613e056000830184613962565b92915050565b60006020820190508181036000830152613e2581846139aa565b905092915050565b60006020820190508181036000830152613e4681613a93565b9050919050565b60006020820190508181036000830152613e6681613ab6565b9050919050565b60006020820190508181036000830152613e8681613ad9565b9050919050565b60006020820190508181036000830152613ea681613afc565b9050919050565b60006020820190508181036000830152613ec681613b42565b9050919050565b60006020820190508181036000830152613ee681613b65565b9050919050565b60006020820190508181036000830152613f0681613bab565b9050919050565b60006020820190508181036000830152613f2681613bce565b9050919050565b60006020820190508181036000830152613f4681613bf1565b9050919050565b60006020820190508181036000830152613f6681613c14565b9050919050565b60006020820190508181036000830152613f8681613c37565b9050919050565b60006020820190508181036000830152613fa681613c5a565b9050919050565b6000606082019050613fc26000830184613ca0565b92915050565b6000602082019050613fdd6000830184613ce2565b92915050565b6000613fed613ffe565b9050613ff982826142de565b919050565b6000604051905090565b600067ffffffffffffffff82111561402357614022614445565b5b61402c82614488565b9050602081019050919050565b600067ffffffffffffffff82111561405457614053614445565b5b61405d82614488565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140d88261424c565b91506140e38361424c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561411857614117614389565b5b828201905092915050565b600061412e8261424c565b91506141398361424c565b925082614149576141486143b8565b5b828204905092915050565b600061415f8261424c565b915061416a8361424c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141a3576141a2614389565b5b828202905092915050565b60006141b98261424c565b91506141c48361424c565b9250828210156141d7576141d6614389565b5b828203905092915050565b60006141ed8261422c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561429757808201518184015260208101905061427c565b838111156142a6576000848401525b50505050565b600060028204905060018216806142c457607f821691505b602082108114156142d8576142d76143e7565b5b50919050565b6142e782614488565b810181811067ffffffffffffffff8211171561430657614305614445565b5b80604052505050565b600061431a8261424c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561434d5761434c614389565b5b600182019050919050565b60006143638261424c565b915061436e8361424c565b92508261437e5761437d6143b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f596f7520617265206e6f7420746865206f776e6572206f6620746f6b656e4964600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61472f816141e2565b811461473a57600080fd5b50565b614746816141f4565b811461475157600080fd5b50565b61475d81614200565b811461476857600080fd5b50565b6147748161424c565b811461477f57600080fd5b5056fea2646970667358221220851238accf411fe30275cf6d0985f67c5172c1490c5d7c2a99d4fb262885865a64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102465760003560e01c806369ba1a7511610139578063a0712d68116100b6578063c7b8fca71161007a578063c7b8fca714610831578063c87b56dd1461085a578063dc33e68114610897578063e7572230146108d4578063e985e9c514610911578063f2fde38b1461094e57610246565b8063a0712d6814610783578063a22cb4651461079f578063a40ece7a146107c8578063ac446002146107f1578063b88d4fde1461080857610246565b80638d859f3e116100fd5780638d859f3e1461069c5780638da5cb5b146106c75780639231ab2a146106f2578063930fa27b1461072f57806395d89b411461075857610246565b806369ba1a75146105b957806370a08231146105e2578063715018a61461061f57806375236143146106365780638ba4cc3c1461067357610246565b80632d5b005d116101c7578063518302271161018b57806351830227146104d257806351d7ff93146104fd57806355f804b3146105285780636352211e1461055157806364662f681461058e57610246565b80632d5b005d146104155780633fd173661461042c57806342842e0e1461045557806345ab07ee1461047e5780634e69d560146104a757610246565b806318160ddd1161020e57806318160ddd14610344578063200d2ed21461036f57806323b872dd1461039a5780632890e0d7146103c35780632ba2865b146103ec57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630f2cdd6c14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613865565b610977565b60405161027f9190613df0565b60405180910390f35b34801561029457600080fd5b5061029d610a59565b6040516102aa9190613e0b565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613908565b610aeb565b6040516102e79190613d89565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613825565b610b67565b005b34801561032557600080fd5b5061032e610c72565b60405161033b9190613fc8565b60405180910390f35b34801561035057600080fd5b50610359610c78565b6040516103669190613fc8565b60405180910390f35b34801561037b57600080fd5b50610384610c8f565b6040516103919190613fc8565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc919061370f565b610c95565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190613908565b610ca5565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613908565b610d27565b005b34801561042157600080fd5b5061042a610dad565b005b34801561043857600080fd5b50610453600480360381019061044e9190613908565b610e46565b005b34801561046157600080fd5b5061047c6004803603810190610477919061370f565b610ecc565b005b34801561048a57600080fd5b506104a560048036038101906104a09190613908565b610eec565b005b3480156104b357600080fd5b506104bc610f72565b6040516104c99190613fc8565b60405180910390f35b3480156104de57600080fd5b506104e7610f7c565b6040516104f49190613df0565b60405180910390f35b34801561050957600080fd5b50610512610f8f565b60405161051f9190613fc8565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a91906138bf565b610f95565b005b34801561055d57600080fd5b5061057860048036038101906105739190613908565b61102b565b6040516105859190613d89565b60405180910390f35b34801561059a57600080fd5b506105a3611041565b6040516105b09190613fc8565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190613908565b611047565b005b3480156105ee57600080fd5b50610609600480360381019061060491906136a2565b6110cd565b6040516106169190613fc8565b60405180910390f35b34801561062b57600080fd5b5061063461119d565b005b34801561064257600080fd5b5061065d600480360381019061065891906136a2565b611225565b60405161066a9190613fc8565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613825565b61123d565b005b3480156106a857600080fd5b506106b161131e565b6040516106be9190613fc8565b60405180910390f35b3480156106d357600080fd5b506106dc611324565b6040516106e99190613d89565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613908565b61134d565b6040516107269190613fad565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906138bf565b611365565b005b34801561076457600080fd5b5061076d6113fb565b60405161077a9190613e0b565b60405180910390f35b61079d60048036038101906107989190613908565b61148d565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906137e5565b611713565b005b3480156107d457600080fd5b506107ef60048036038101906107ea9190613908565b61188b565b005b3480156107fd57600080fd5b50610806611911565b005b34801561081457600080fd5b5061082f600480360381019061082a9190613762565b611a92565b005b34801561083d57600080fd5b50610858600480360381019061085391906138bf565b611b0e565b005b34801561086657600080fd5b50610881600480360381019061087c9190613908565b611ba4565b60405161088e9190613e0b565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b991906136a2565b611d61565b6040516108cb9190613fc8565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f69190613908565b611d73565b6040516109089190613fc8565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906136cf565b611d8a565b6040516109459190613df0565b60405180910390f35b34801561095a57600080fd5b50610975600480360381019061097091906136a2565b611e1e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a525750610a5182611f16565b5b9050919050565b606060038054610a68906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610a94906142ac565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b6000610af682611f80565b610b2c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b728261102b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bda576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf9611fce565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c2b5750610c2981610c24611fce565b611d8a565b155b15610c62576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6d838383611fd6565b505050565b600b5481565b6000610c82612088565b6002546001540303905090565b60135481565b610ca0838383612091565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610cc58261102b565b73ffffffffffffffffffffffffffffffffffffffff1614610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613f0d565b60405180910390fd5b610d2481612547565b50565b610d2f611fce565b73ffffffffffffffffffffffffffffffffffffffff16610d4d611324565b73ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90613ead565b60405180910390fd5b80600b8190555050565b610db5611fce565b73ffffffffffffffffffffffffffffffffffffffff16610dd3611324565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613ead565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b610e4e611fce565b73ffffffffffffffffffffffffffffffffffffffff16610e6c611324565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613ead565b60405180910390fd5b80600d8190555050565b610ee783838360405180602001604052806000815250611a92565b505050565b610ef4611fce565b73ffffffffffffffffffffffffffffffffffffffff16610f12611324565b73ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613ead565b60405180910390fd5b80600c8190555050565b6000601354905090565b601260009054906101000a900460ff1681565b600a5481565b610f9d611fce565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611324565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890613ead565b60405180910390fd5b80600f9080519060200190611027929190613473565b5050565b600061103682612555565b600001519050919050565b600c5481565b61104f611fce565b73ffffffffffffffffffffffffffffffffffffffff1661106d611324565b73ffffffffffffffffffffffffffffffffffffffff16146110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90613ead565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611135576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6111a5611fce565b73ffffffffffffffffffffffffffffffffffffffff166111c3611324565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613ead565b60405180910390fd5b61122360006127e4565b565b600e6020528060005260406000206000915090505481565b611245611fce565b73ffffffffffffffffffffffffffffffffffffffff16611263611324565b73ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b090613ead565b60405180910390fd5b61270f816112c5610c78565b6112cf91906140cd565b1115611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790613e8d565b60405180910390fd5b61131a82826128a8565b5050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113556134f9565b61135e82612555565b9050919050565b61136d611fce565b73ffffffffffffffffffffffffffffffffffffffff1661138b611324565b73ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890613ead565b60405180910390fd5b80601090805190602001906113f7929190613473565b5050565b60606004805461140a906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611436906142ac565b80156114835780601f1061145857610100808354040283529160200191611483565b820191906000526020600020905b81548152906001019060200180831161146657829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613e6d565b60405180910390fd5b600160135414611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613e4d565b60405180910390fd5b61270f8161154c610c78565b61155691906140cd565b1115611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613e8d565b60405180910390fd5b600a548111156115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390613f4d565b60405180910390fd5b80600d546115ea9190614154565b34101561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613f2d565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461167b91906140cd565b92505081905550600b54600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613f6d565b60405180910390fd5b61171033826128a8565b50565b61171b611fce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611780576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061178d611fce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661183a611fce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187f9190613df0565b60405180910390a35050565b611893611fce565b73ffffffffffffffffffffffffffffffffffffffff166118b1611324565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613ead565b60405180910390fd5b80600a8190555050565b611919611fce565b73ffffffffffffffffffffffffffffffffffffffff16611937611324565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490613ead565b60405180910390fd5b600260095414156119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90613f8d565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a0190613d74565b60006040518083038185875af1925050503d8060008114611a3e576040519150601f19603f3d011682016040523d82523d6000602084013e611a43565b606091505b5050905080611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613eed565b60405180910390fd5b506001600981905550565b611a9d848484612091565b611abc8373ffffffffffffffffffffffffffffffffffffffff166128c6565b8015611ad15750611acf848484846128d9565b155b15611b08576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611b16611fce565b73ffffffffffffffffffffffffffffffffffffffff16611b34611324565b73ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190613ead565b60405180910390fd5b8060119080519060200190611ba0929190613473565b5050565b6060611baf82611f80565b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613ecd565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415611c9c5760118054611c17906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611c43906142ac565b8015611c905780601f10611c6557610100808354040283529160200191611c90565b820191906000526020600020905b815481529060010190602001808311611c7357829003601f168201915b50505050509050611d5c565b600c548211611d02576000611caf612a39565b90506000815111611ccf5760405180602001604052806000815250611cfa565b80611cd984612acb565b604051602001611cea929190613d00565b6040516020818303038152906040525b915050611d5c565b600060108054611d11906142ac565b905011611d2d5760405180602001604052806000815250611d59565b6010611d3883612acb565b604051602001611d49929190613d3a565b6040516020818303038152906040525b90505b919050565b6000611d6c82612c2c565b9050919050565b6000600d5482611d839190614154565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e26611fce565b73ffffffffffffffffffffffffffffffffffffffff16611e44611324565b73ffffffffffffffffffffffffffffffffffffffff1614611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190613ead565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190613e2d565b60405180910390fd5b611f13816127e4565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611f8b612088565b11158015611f9a575060015482105b8015611fc7575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061209c82612555565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612107576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612128611fce565b73ffffffffffffffffffffffffffffffffffffffff161480612157575061215685612151611fce565b611d8a565b5b8061219c5750612165611fce565b73ffffffffffffffffffffffffffffffffffffffff1661218484610aeb565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806121d5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561223c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122498585856001612c96565b61225560008487611fd6565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124d55760015482146124d457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125408585856001612c9c565b5050505050565b612552816000612ca2565b50565b61255d6134f9565b60008290508061256b612088565b1115801561257a575060015481105b156127ad576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516127ab57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461268f5780925050506127df565b5b6001156127aa57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127a55780925050506127df565b612690565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128c2828260405180602001604052806000815250613092565b5050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ff611fce565b8786866040518563ffffffff1660e01b81526004016129219493929190613da4565b602060405180830381600087803b15801561293b57600080fd5b505af192505050801561296c57506040513d601f19601f820116820180604052508101906129699190613892565b60015b6129e6573d806000811461299c576040519150601f19603f3d011682016040523d82523d6000602084013e6129a1565b606091505b506000815114156129de576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f8054612a48906142ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612a74906142ac565b8015612ac15780601f10612a9657610100808354040283529160200191612ac1565b820191906000526020600020905b815481529060010190602001808311612aa457829003601f168201915b5050505050905090565b60606000821415612b13576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c27565b600082905060005b60008214612b45578080612b2e9061430f565b915050600a82612b3e9190614123565b9150612b1b565b60008167ffffffffffffffff811115612b6157612b60614445565b5b6040519080825280601f01601f191660200182016040528015612b935781602001600182028036833780820191505090505b5090505b60008514612c2057600182612bac91906141ae565b9150600a85612bbb9190614358565b6030612bc791906140cd565b60f81b818381518110612bdd57612bdc614416565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c199190614123565b9450612b97565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6000612cad83612555565b90506000816000015190508215612d8e5760008173ffffffffffffffffffffffffffffffffffffffff16612cdf611fce565b73ffffffffffffffffffffffffffffffffffffffff161480612d0e5750612d0d82612d08611fce565b611d8a565b5b80612d535750612d1c611fce565b73ffffffffffffffffffffffffffffffffffffffff16612d3b86610aeb565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612d8c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612d9c816000866001612c96565b612da860008583611fd6565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561300c57600154821461300b57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461307a816000866001612c9c565b60026000815480929190600101919050555050505050565b61309f83838360016130a4565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613112576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561314d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61315a6000868387612c96565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561332457506133238773ffffffffffffffffffffffffffffffffffffffff166128c6565b5b156133ea575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461339960008884806001019550886128d9565b6133cf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561332a5782600154146133e557600080fd5b613456565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156133eb575b81600181905550505061346c6000868387612c9c565b5050505050565b82805461347f906142ac565b90600052602060002090601f0160209004810192826134a157600085556134e8565b82601f106134ba57805160ff19168380011785556134e8565b828001600101855582156134e8579182015b828111156134e75782518255916020019190600101906134cc565b5b5090506134f5919061353c565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561355557600081600090555060010161353d565b5090565b600061356c61356784614008565b613fe3565b90508281526020810184848401111561358857613587614479565b5b61359384828561426a565b509392505050565b60006135ae6135a984614039565b613fe3565b9050828152602081018484840111156135ca576135c9614479565b5b6135d584828561426a565b509392505050565b6000813590506135ec81614726565b92915050565b6000813590506136018161473d565b92915050565b60008135905061361681614754565b92915050565b60008151905061362b81614754565b92915050565b600082601f83011261364657613645614474565b5b8135613656848260208601613559565b91505092915050565b600082601f83011261367457613673614474565b5b813561368484826020860161359b565b91505092915050565b60008135905061369c8161476b565b92915050565b6000602082840312156136b8576136b7614483565b5b60006136c6848285016135dd565b91505092915050565b600080604083850312156136e6576136e5614483565b5b60006136f4858286016135dd565b9250506020613705858286016135dd565b9150509250929050565b60008060006060848603121561372857613727614483565b5b6000613736868287016135dd565b9350506020613747868287016135dd565b92505060406137588682870161368d565b9150509250925092565b6000806000806080858703121561377c5761377b614483565b5b600061378a878288016135dd565b945050602061379b878288016135dd565b93505060406137ac8782880161368d565b925050606085013567ffffffffffffffff8111156137cd576137cc61447e565b5b6137d987828801613631565b91505092959194509250565b600080604083850312156137fc576137fb614483565b5b600061380a858286016135dd565b925050602061381b858286016135f2565b9150509250929050565b6000806040838503121561383c5761383b614483565b5b600061384a858286016135dd565b925050602061385b8582860161368d565b9150509250929050565b60006020828403121561387b5761387a614483565b5b600061388984828501613607565b91505092915050565b6000602082840312156138a8576138a7614483565b5b60006138b68482850161361c565b91505092915050565b6000602082840312156138d5576138d4614483565b5b600082013567ffffffffffffffff8111156138f3576138f261447e565b5b6138ff8482850161365f565b91505092915050565b60006020828403121561391e5761391d614483565b5b600061392c8482850161368d565b91505092915050565b61393e816141e2565b82525050565b61394d816141e2565b82525050565b61395c816141f4565b82525050565b61396b816141f4565b82525050565b600061397c8261407f565b6139868185614095565b9350613996818560208601614279565b61399f81614488565b840191505092915050565b60006139b58261408a565b6139bf81856140b1565b93506139cf818560208601614279565b6139d881614488565b840191505092915050565b60006139ee8261408a565b6139f881856140c2565b9350613a08818560208601614279565b80840191505092915050565b60008154613a21816142ac565b613a2b81866140c2565b94506001821660008114613a465760018114613a5757613a8a565b60ff19831686528186019350613a8a565b613a608561406a565b60005b83811015613a8257815481890152600182019150602081019050613a63565b838801955050505b50505092915050565b6000613aa06026836140b1565b9150613aab82614499565b604082019050919050565b6000613ac36012836140b1565b9150613ace826144e8565b602082019050919050565b6000613ae6601e836140b1565b9150613af182614511565b602082019050919050565b6000613b096012836140b1565b9150613b148261453a565b602082019050919050565b6000613b2c6005836140c2565b9150613b3782614563565b600582019050919050565b6000613b4f6020836140b1565b9150613b5a8261458c565b602082019050919050565b6000613b72602f836140b1565b9150613b7d826145b5565b604082019050919050565b6000613b956000836140a6565b9150613ba082614604565b600082019050919050565b6000613bb86010836140b1565b9150613bc382614607565b602082019050919050565b6000613bdb6020836140b1565b9150613be682614630565b602082019050919050565b6000613bfe6016836140b1565b9150613c0982614659565b602082019050919050565b6000613c216016836140b1565b9150613c2c82614682565b602082019050919050565b6000613c44601c836140b1565b9150613c4f826146ab565b602082019050919050565b6000613c67601f836140b1565b9150613c72826146d4565b602082019050919050565b6000613c8a6001836140c2565b9150613c95826146fd565b600182019050919050565b606082016000820151613cb66000850182613935565b506020820151613cc96020850182613cf1565b506040820151613cdc6040850182613953565b50505050565b613ceb8161424c565b82525050565b613cfa81614256565b82525050565b6000613d0c82856139e3565b9150613d1782613c7d565b9150613d2382846139e3565b9150613d2e82613b1f565b91508190509392505050565b6000613d468285613a14565b9150613d5182613c7d565b9150613d5d82846139e3565b9150613d6882613b1f565b91508190509392505050565b6000613d7f82613b88565b9150819050919050565b6000602082019050613d9e6000830184613944565b92915050565b6000608082019050613db96000830187613944565b613dc66020830186613944565b613dd36040830185613ce2565b8181036060830152613de58184613971565b905095945050505050565b6000602082019050613e056000830184613962565b92915050565b60006020820190508181036000830152613e2581846139aa565b905092915050565b60006020820190508181036000830152613e4681613a93565b9050919050565b60006020820190508181036000830152613e6681613ab6565b9050919050565b60006020820190508181036000830152613e8681613ad9565b9050919050565b60006020820190508181036000830152613ea681613afc565b9050919050565b60006020820190508181036000830152613ec681613b42565b9050919050565b60006020820190508181036000830152613ee681613b65565b9050919050565b60006020820190508181036000830152613f0681613bab565b9050919050565b60006020820190508181036000830152613f2681613bce565b9050919050565b60006020820190508181036000830152613f4681613bf1565b9050919050565b60006020820190508181036000830152613f6681613c14565b9050919050565b60006020820190508181036000830152613f8681613c37565b9050919050565b60006020820190508181036000830152613fa681613c5a565b9050919050565b6000606082019050613fc26000830184613ca0565b92915050565b6000602082019050613fdd6000830184613ce2565b92915050565b6000613fed613ffe565b9050613ff982826142de565b919050565b6000604051905090565b600067ffffffffffffffff82111561402357614022614445565b5b61402c82614488565b9050602081019050919050565b600067ffffffffffffffff82111561405457614053614445565b5b61405d82614488565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140d88261424c565b91506140e38361424c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561411857614117614389565b5b828201905092915050565b600061412e8261424c565b91506141398361424c565b925082614149576141486143b8565b5b828204905092915050565b600061415f8261424c565b915061416a8361424c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141a3576141a2614389565b5b828202905092915050565b60006141b98261424c565b91506141c48361424c565b9250828210156141d7576141d6614389565b5b828203905092915050565b60006141ed8261422c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561429757808201518184015260208101905061427c565b838111156142a6576000848401525b50505050565b600060028204905060018216806142c457607f821691505b602082108114156142d8576142d76143e7565b5b50919050565b6142e782614488565b810181811067ffffffffffffffff8211171561430657614305614445565b5b80604052505050565b600061431a8261424c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561434d5761434c614389565b5b600182019050919050565b60006143638261424c565b915061436e8361424c565b92508261437e5761437d6143b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f596f7520617265206e6f7420746865206f776e6572206f6620746f6b656e4964600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61472f816141e2565b811461473a57600080fd5b50565b614746816141f4565b811461475157600080fd5b50565b61475d81614200565b811461476857600080fd5b50565b6147748161424c565b811461477f57600080fd5b5056fea2646970667358221220851238accf411fe30275cf6d0985f67c5172c1490c5d7c2a99d4fb262885865a64736f6c63430008070033
Deployed Bytecode Sourcemap
32885:4189:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15140:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18253:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19756:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19319:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33075:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14389:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33598:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20621:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36720:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36232:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35032:81;;;;;;;;;;;;;:::i;:::-;;36012:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20862:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36334:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36513:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33563:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32982:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35119:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18061:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33158:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36434:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15509:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5171:103;;;;;;;;;;;;;:::i;:::-;;33398:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36882:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33356:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4948:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35671:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35223:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18422:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33823:528;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20032:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36118:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35825:181;;;;;;;;;;;;;:::i;:::-;;21118:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35339:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34358:667;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35560:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36596:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20390:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5283:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15140:305;15242:4;15294:25;15279:40;;;:11;:40;;;;:105;;;;15351:33;15336:48;;;:11;:48;;;;15279:105;:158;;;;15401:36;15425:11;15401:23;:36::i;:::-;15279:158;15259:178;;15140:305;;;:::o;18253:100::-;18307:13;18340:5;18333:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18253:100;:::o;19756:204::-;19824:7;19849:16;19857:7;19849;:16::i;:::-;19844:64;;19874:34;;;;;;;;;;;;;;19844:64;19928:15;:24;19944:7;19928:24;;;;;;;;;;;;;;;;;;;;;19921:31;;19756:204;;;:::o;19319:371::-;19392:13;19408:24;19424:7;19408:15;:24::i;:::-;19392:40;;19453:5;19447:11;;:2;:11;;;19443:48;;;19467:24;;;;;;;;;;;;;;19443:48;19524:5;19508:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;19534:37;19551:5;19558:12;:10;:12::i;:::-;19534:16;:37::i;:::-;19533:38;19508:63;19504:138;;;19595:35;;;;;;;;;;;;;;19504:138;19654:28;19663:2;19667:7;19676:5;19654:8;:28::i;:::-;19381:309;19319:371;;:::o;33075:34::-;;;;:::o;14389:303::-;14433:7;14658:15;:13;:15::i;:::-;14643:12;;14627:13;;:28;:46;14620:53;;14389:303;:::o;33598:22::-;;;;:::o;20621:170::-;20755:28;20765:4;20771:2;20775:7;20755:9;:28::i;:::-;20621:170;;;:::o;36720:156::-;36799:10;36779:30;;:16;36787:7;36779;:16::i;:::-;:30;;;36771:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;36856:14;36862:7;36856:5;:14::i;:::-;36720:156;:::o;36232:96::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36321:1:::1;36304:14;:18;;;;36232:96:::0;:::o;35032:81::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35101:4:::1;35090:8;;:15;;;;;;;;;;;;;;;;;;35032:81::o:0;36012:98::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36095:9:::1;36087:5;:17;;;;36012:98:::0;:::o;20862:185::-;21000:39;21017:4;21023:2;21027:7;21000:39;;;;;;;;;;;;:16;:39::i;:::-;20862:185;;;:::o;36334:92::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36419:1:::1;36404:12;:16;;;;36334:92:::0;:::o;36513:73::-;36553:4;36574:6;;36567:13;;36513:73;:::o;33563:28::-;;;;;;;;;;;;;:::o;32982:39::-;;;;:::o;35119:98::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35204:7:::1;35188:13;:23;;;;;;;;;;;;:::i;:::-;;35119:98:::0;:::o;18061:125::-;18125:7;18152:21;18165:7;18152:12;:21::i;:::-;:26;;;18145:33;;18061:125;;;:::o;33158:34::-;;;;:::o;36434:72::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36499:1:::1;36490:6;:10;;;;36434:72:::0;:::o;15509:206::-;15573:7;15614:1;15597:19;;:5;:19;;;15593:60;;;15625:28;;;;;;;;;;;;;;15593:60;15679:12;:19;15692:5;15679:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;15671:36;;15664:43;;15509:206;;;:::o;5171:103::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5236:30:::1;5263:1;5236:18;:30::i;:::-;5171:103::o:0;33398:50::-;;;;;;;;;;;;;;;;;:::o;36882:189::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33245:4:::1;36976:8;36960:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;36952:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;37038:27;37048:6;37056:8;37038:9;:27::i;:::-;36882:189:::0;;:::o;33356:35::-;;;;:::o;4948:87::-;4994:7;5021:6;;;;;;;;;;;5014:13;;4948:87;:::o;35671:148::-;35752:21;;:::i;:::-;35792;35805:7;35792:12;:21::i;:::-;35785:28;;35671:148;;;:::o;35223:110::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35320:7:::1;35298:19;:29;;;;;;;;;;;;:::i;:::-;;35223:110:::0;:::o;18422:104::-;18478:13;18511:7;18504:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18422:104;:::o;33823:528::-;33757:10;33744:23;;:9;:23;;;33736:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33910:1:::1;33900:6;;:11;33892:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;33245:4;33966:8;33950:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;33942:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;34048:19;;34036:8;:31;;34028:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34129:8;34121:5;;:16;;;;:::i;:::-;34108:9;:29;;34100:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34204:8;34173:15;:27;34189:10;34173:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34258:14;;34227:15;:27;34243:10;34227:27;;;;;;;;;;;;;;;;:45;;34219:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;34314:31;34324:10;34336:8;34314:9;:31::i;:::-;33823:528:::0;:::o;20032:287::-;20143:12;:10;:12::i;:::-;20131:24;;:8;:24;;;20127:54;;;20164:17;;;;;;;;;;;;;;20127:54;20239:8;20194:18;:32;20213:12;:10;:12::i;:::-;20194:32;;;;;;;;;;;;;;;:42;20227:8;20194:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20292:8;20263:48;;20278:12;:10;:12::i;:::-;20263:48;;;20302:8;20263:48;;;;;;:::i;:::-;;;;;;;;20032:287;;:::o;36118:106::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36217:1:::1;36195:19;:23;;;;36118:106:::0;:::o;35825:181::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2730:1:::1;2876:7;;:19;;2868:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2730:1;2937:7;:18;;;;35890:12:::2;35908:10;:15;;35931:21;35908:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35889:68;;;35972:7;35964:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;35882:124;2686:1:::1;2980:7;:22;;;;35825:181::o:0;21118:369::-;21285:28;21295:4;21301:2;21305:7;21285:9;:28::i;:::-;21328:15;:2;:13;;;:15::i;:::-;:76;;;;;21348:56;21379:4;21385:2;21389:7;21398:5;21348:30;:56::i;:::-;21347:57;21328:76;21324:156;;;21428:40;;;;;;;;;;;;;;21324:156;21118:369;;;;:::o;35339:101::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35431:3:::1;35412:16;:22;;;;;;;;;;;;:::i;:::-;;35339:101:::0;:::o;34358:667::-;34431:13;34461:16;34469:7;34461;:16::i;:::-;34453:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34552:5;34540:17;;:8;;;;;;;;;;;:17;;;34537:63;;;34576:16;34569:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34537:63;34622:12;;34611:7;:23;34608:412;;34647:21;34671:10;:8;:10::i;:::-;34647:34;;34736:1;34718:7;34712:21;:25;:113;;;;;;;;;;;;;;;;;34777:7;34791:18;:7;:16;:18::i;:::-;34760:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34712:113;34692:133;;;;;34608:412;34911:1;34881:19;34875:33;;;;;:::i;:::-;;;:37;:137;;;;;;;;;;;;;;;;;34952:19;34978:18;:7;:16;:18::i;:::-;34935:71;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34875:137;34855:157;;34358:667;;;;:::o;35560:107::-;35618:7;35641:20;35655:5;35641:13;:20::i;:::-;35634:27;;35560:107;;;:::o;36596:117::-;36654:7;36700:5;;36690:9;:15;;;;:::i;:::-;36683:22;;36596:117;;;:::o;20390:164::-;20487:4;20511:18;:25;20530:5;20511:25;;;;;;;;;;;;;;;:35;20537:8;20511:35;;;;;;;;;;;;;;;;;;;;;;;;;20504:42;;20390:164;;;;:::o;5283:201::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5392:1:::1;5372:22;;:8;:22;;;;5364:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5448:28;5467:8;5448:18;:28::i;:::-;5283:201:::0;:::o;9601:157::-;9686:4;9725:25;9710:40;;;:11;:40;;;;9703:47;;9601:157;;;:::o;21742:174::-;21799:4;21842:7;21823:15;:13;:15::i;:::-;:26;;:53;;;;;21863:13;;21853:7;:23;21823:53;:85;;;;;21881:11;:20;21893:7;21881:20;;;;;;;;;;;:27;;;;;;;;;;;;21880:28;21823:85;21816:92;;21742:174;;;:::o;4491:98::-;4544:7;4571:10;4564:17;;4491:98;:::o;29899:196::-;30041:2;30014:15;:24;30030:7;30014:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30079:7;30075:2;30059:28;;30068:5;30059:28;;;;;;;;;;;;29899:196;;;:::o;14163:92::-;14219:7;14246:1;14239:8;;14163:92;:::o;24842:2130::-;24957:35;24995:21;25008:7;24995:12;:21::i;:::-;24957:59;;25055:4;25033:26;;:13;:18;;;:26;;;25029:67;;25068:28;;;;;;;;;;;;;;25029:67;25109:22;25151:4;25135:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;25172:36;25189:4;25195:12;:10;:12::i;:::-;25172:16;:36::i;:::-;25135:73;:126;;;;25249:12;:10;:12::i;:::-;25225:36;;:20;25237:7;25225:11;:20::i;:::-;:36;;;25135:126;25109:153;;25280:17;25275:66;;25306:35;;;;;;;;;;;;;;25275:66;25370:1;25356:16;;:2;:16;;;25352:52;;;25381:23;;;;;;;;;;;;;;25352:52;25417:43;25439:4;25445:2;25449:7;25458:1;25417:21;:43::i;:::-;25525:35;25542:1;25546:7;25555:4;25525:8;:35::i;:::-;25886:1;25856:12;:18;25869:4;25856:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25930:1;25902:12;:16;25915:2;25902:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25948:31;25982:11;:20;25994:7;25982:20;;;;;;;;;;;25948:54;;26033:2;26017:8;:13;;;:18;;;;;;;;;;;;;;;;;;26083:15;26050:8;:23;;;:49;;;;;;;;;;;;;;;;;;26351:19;26383:1;26373:7;:11;26351:33;;26399:31;26433:11;:24;26445:11;26433:24;;;;;;;;;;;26399:58;;26501:1;26476:27;;:8;:13;;;;;;;;;;;;:27;;;26472:384;;;26686:13;;26671:11;:28;26667:174;;26740:4;26724:8;:13;;;:20;;;;;;;;;;;;;;;;;;26793:13;:28;;;26767:8;:23;;;:54;;;;;;;;;;;;;;;;;;26667:174;26472:384;25831:1036;;;26903:7;26899:2;26884:27;;26893:4;26884:27;;;;;;;;;;;;26922:42;26943:4;26949:2;26953:7;26962:1;26922:20;:42::i;:::-;24946:2026;;24842:2130;;;:::o;27055:89::-;27115:21;27121:7;27130:5;27115;:21::i;:::-;27055:89;:::o;16890:1109::-;16952:21;;:::i;:::-;16986:12;17001:7;16986:22;;17069:4;17050:15;:13;:15::i;:::-;:23;;:47;;;;;17084:13;;17077:4;:20;17050:47;17046:886;;;17118:31;17152:11;:17;17164:4;17152:17;;;;;;;;;;;17118:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17193:9;:16;;;17188:729;;17264:1;17238:28;;:9;:14;;;:28;;;17234:101;;17302:9;17295:16;;;;;;17234:101;17637:261;17644:4;17637:261;;;17677:6;;;;;;;;17722:11;:17;17734:4;17722:17;;;;;;;;;;;17710:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17796:1;17770:28;;:9;:14;;;:28;;;17766:109;;17838:9;17831:16;;;;;;17766:109;17637:261;;;17188:729;17099:833;17046:886;17960:31;;;;;;;;;;;;;;16890:1109;;;;:::o;5493:191::-;5567:16;5586:6;;;;;;;;;;;5567:25;;5612:8;5603:6;;:17;;;;;;;;;;;;;;;;;;5667:8;5636:40;;5657:8;5636:40;;;;;;;;;;;;5556:128;5493:191;:::o;21924:104::-;21993:27;22003:2;22007:8;21993:27;;;;;;;;;;;;:9;:27::i;:::-;21924:104;;:::o;5716:197::-;5776:4;5794:12;5861:7;5849:20;5841:28;;5904:1;5897:4;:8;5890:15;;;5716:197;;;:::o;30587:667::-;30750:4;30787:2;30771:36;;;30808:12;:10;:12::i;:::-;30822:4;30828:7;30837:5;30771:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30767:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31022:1;31005:6;:13;:18;31001:235;;;31051:40;;;;;;;;;;;;;;31001:235;31194:6;31188:13;31179:6;31175:2;31171:15;31164:38;30767:480;30900:45;;;30890:55;;;:6;:55;;;;30883:62;;;30587:667;;;;;;:::o;35446:108::-;35506:13;35535;35528:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35446:108;:::o;3108:533::-;3164:13;3204:1;3195:5;:10;3191:53;;;3222:10;;;;;;;;;;;;;;;;;;;;;3191:53;3254:12;3269:5;3254:20;;3285:14;3310:78;3325:1;3317:4;:9;3310:78;;3343:8;;;;;:::i;:::-;;;;3374:2;3366:10;;;;;:::i;:::-;;;3310:78;;;3398:19;3430:6;3420:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3398:39;;3448:154;3464:1;3455:5;:10;3448:154;;3492:1;3482:11;;;;;:::i;:::-;;;3559:2;3551:5;:10;;;;:::i;:::-;3538:2;:24;;;;:::i;:::-;3525:39;;3508:6;3515;3508:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3588:2;3579:11;;;;;:::i;:::-;;;3448:154;;;3626:6;3612:21;;;;;3108:533;;;;:::o;15797:137::-;15858:7;15893:12;:19;15906:5;15893:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;15885:41;;15878:48;;15797:137;;;:::o;31902:159::-;;;;;:::o;32720:158::-;;;;;:::o;27373:2408::-;27453:35;27491:21;27504:7;27491:12;:21::i;:::-;27453:59;;27525:12;27540:13;:18;;;27525:33;;27575:13;27571:290;;;27605:22;27647:4;27631:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;27672:36;27689:4;27695:12;:10;:12::i;:::-;27672:16;:36::i;:::-;27631:77;:134;;;;27753:12;:10;:12::i;:::-;27729:36;;:20;27741:7;27729:11;:20::i;:::-;:36;;;27631:134;27605:161;;27788:17;27783:66;;27814:35;;;;;;;;;;;;;;27783:66;27590:271;27571:290;27873:51;27895:4;27909:1;27913:7;27922:1;27873:21;:51::i;:::-;27989:35;28006:1;28010:7;28019:4;27989:8;:35::i;:::-;28320:31;28354:12;:18;28367:4;28354:18;;;;;;;;;;;;;;;28320:52;;28410:1;28387:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28454:1;28426:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28554:31;28588:11;:20;28600:7;28588:20;;;;;;;;;;;28554:54;;28639:4;28623:8;:13;;;:20;;;;;;;;;;;;;;;;;;28691:15;28658:8;:23;;;:49;;;;;;;;;;;;;;;;;;28740:4;28722:8;:15;;;:22;;;;;;;;;;;;;;;;;;28992:19;29024:1;29014:7;:11;28992:33;;29040:31;29074:11;:24;29086:11;29074:24;;;;;;;;;;;29040:58;;29142:1;29117:27;;:8;:13;;;;;;;;;;;;:27;;;29113:384;;;29327:13;;29312:11;:28;29308:174;;29381:4;29365:8;:13;;;:20;;;;;;;;;;;;;;;;;;29434:13;:28;;;29408:8;:23;;;:54;;;;;;;;;;;;;;;;;;29308:174;29113:384;28295:1213;;;;29552:7;29548:1;29525:35;;29534:4;29525:35;;;;;;;;;;;;29571:50;29592:4;29606:1;29610:7;29619:1;29571:20;:50::i;:::-;29748:12;;:14;;;;;;;;;;;;;27442:2339;;27373:2408;;:::o;22391:163::-;22514:32;22520:2;22524:8;22534:5;22541:4;22514:5;:32::i;:::-;22391:163;;;:::o;22813:1775::-;22952:20;22975:13;;22952:36;;23017:1;23003:16;;:2;:16;;;22999:48;;;23028:19;;;;;;;;;;;;;;22999:48;23074:1;23062:8;:13;23058:44;;;23084:18;;;;;;;;;;;;;;23058:44;23115:61;23145:1;23149:2;23153:12;23167:8;23115:21;:61::i;:::-;23488:8;23453:12;:16;23466:2;23453:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23552:8;23512:12;:16;23525:2;23512:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23611:2;23578:11;:25;23590:12;23578:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;23678:15;23628:11;:25;23640:12;23628:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;23711:20;23734:12;23711:35;;23761:11;23790:8;23775:12;:23;23761:37;;23819:4;:23;;;;;23827:15;:2;:13;;;:15::i;:::-;23819:23;23815:641;;;23863:314;23919:12;23915:2;23894:38;;23911:1;23894:38;;;;;;;;;;;;23960:69;23999:1;24003:2;24007:14;;;;;;24023:5;23960:30;:69::i;:::-;23955:174;;24065:40;;;;;;;;;;;;;;23955:174;24172:3;24156:12;:19;;23863:314;;24258:12;24241:13;;:29;24237:43;;24272:8;;;24237:43;23815:641;;;24321:120;24377:14;;;;;;24373:2;24352:40;;24369:1;24352:40;;;;;;;;;;;;24436:3;24420:12;:19;;24321:120;;23815:641;24486:12;24470:13;:28;;;;23428:1082;;24520:60;24549:1;24553:2;24557:12;24571:8;24520:20;:60::i;:::-;22941:1647;22813:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:108::-;7235:24;7253:5;7235:24;:::i;:::-;7230:3;7223:37;7158:108;;:::o;7272:118::-;7359:24;7377:5;7359:24;:::i;:::-;7354:3;7347:37;7272:118;;:::o;7396:99::-;7467:21;7482:5;7467:21;:::i;:::-;7462:3;7455:34;7396:99;;:::o;7501:109::-;7582:21;7597:5;7582:21;:::i;:::-;7577:3;7570:34;7501:109;;:::o;7616:360::-;7702:3;7730:38;7762:5;7730:38;:::i;:::-;7784:70;7847:6;7842:3;7784:70;:::i;:::-;7777:77;;7863:52;7908:6;7903:3;7896:4;7889:5;7885:16;7863:52;:::i;:::-;7940:29;7962:6;7940:29;:::i;:::-;7935:3;7931:39;7924:46;;7706:270;7616:360;;;;:::o;7982:364::-;8070:3;8098:39;8131:5;8098:39;:::i;:::-;8153:71;8217:6;8212:3;8153:71;:::i;:::-;8146:78;;8233:52;8278:6;8273:3;8266:4;8259:5;8255:16;8233:52;:::i;:::-;8310:29;8332:6;8310:29;:::i;:::-;8305:3;8301:39;8294:46;;8074:272;7982:364;;;;:::o;8352:377::-;8458:3;8486:39;8519:5;8486:39;:::i;:::-;8541:89;8623:6;8618:3;8541:89;:::i;:::-;8534:96;;8639:52;8684:6;8679:3;8672:4;8665:5;8661:16;8639:52;:::i;:::-;8716:6;8711:3;8707:16;8700:23;;8462:267;8352:377;;;;:::o;8759:845::-;8862:3;8899:5;8893:12;8928:36;8954:9;8928:36;:::i;:::-;8980:89;9062:6;9057:3;8980:89;:::i;:::-;8973:96;;9100:1;9089:9;9085:17;9116:1;9111:137;;;;9262:1;9257:341;;;;9078:520;;9111:137;9195:4;9191:9;9180;9176:25;9171:3;9164:38;9231:6;9226:3;9222:16;9215:23;;9111:137;;9257:341;9324:38;9356:5;9324:38;:::i;:::-;9384:1;9398:154;9412:6;9409:1;9406:13;9398:154;;;9486:7;9480:14;9476:1;9471:3;9467:11;9460:35;9536:1;9527:7;9523:15;9512:26;;9434:4;9431:1;9427:12;9422:17;;9398:154;;;9581:6;9576:3;9572:16;9565:23;;9264:334;;9078:520;;8866:738;;8759:845;;;;:::o;9610:366::-;9752:3;9773:67;9837:2;9832:3;9773:67;:::i;:::-;9766:74;;9849:93;9938:3;9849:93;:::i;:::-;9967:2;9962:3;9958:12;9951:19;;9610:366;;;:::o;9982:::-;10124:3;10145:67;10209:2;10204:3;10145:67;:::i;:::-;10138:74;;10221:93;10310:3;10221:93;:::i;:::-;10339:2;10334:3;10330:12;10323:19;;9982:366;;;:::o;10354:::-;10496:3;10517:67;10581:2;10576:3;10517:67;:::i;:::-;10510:74;;10593:93;10682:3;10593:93;:::i;:::-;10711:2;10706:3;10702:12;10695:19;;10354:366;;;:::o;10726:::-;10868:3;10889:67;10953:2;10948:3;10889:67;:::i;:::-;10882:74;;10965:93;11054:3;10965:93;:::i;:::-;11083:2;11078:3;11074:12;11067:19;;10726:366;;;:::o;11098:400::-;11258:3;11279:84;11361:1;11356:3;11279:84;:::i;:::-;11272:91;;11372:93;11461:3;11372:93;:::i;:::-;11490:1;11485:3;11481:11;11474:18;;11098:400;;;:::o;11504:366::-;11646:3;11667:67;11731:2;11726:3;11667:67;:::i;:::-;11660:74;;11743:93;11832:3;11743:93;:::i;:::-;11861:2;11856:3;11852:12;11845:19;;11504:366;;;:::o;11876:::-;12018:3;12039:67;12103:2;12098:3;12039:67;:::i;:::-;12032:74;;12115:93;12204:3;12115:93;:::i;:::-;12233:2;12228:3;12224:12;12217:19;;11876:366;;;:::o;12248:398::-;12407:3;12428:83;12509:1;12504:3;12428:83;:::i;:::-;12421:90;;12520:93;12609:3;12520:93;:::i;:::-;12638:1;12633:3;12629:11;12622:18;;12248:398;;;:::o;12652:366::-;12794:3;12815:67;12879:2;12874:3;12815:67;:::i;:::-;12808:74;;12891:93;12980:3;12891:93;:::i;:::-;13009:2;13004:3;13000:12;12993:19;;12652:366;;;:::o;13024:::-;13166:3;13187:67;13251:2;13246:3;13187:67;:::i;:::-;13180:74;;13263:93;13352:3;13263:93;:::i;:::-;13381:2;13376:3;13372:12;13365:19;;13024:366;;;:::o;13396:::-;13538:3;13559:67;13623:2;13618:3;13559:67;:::i;:::-;13552:74;;13635:93;13724:3;13635:93;:::i;:::-;13753:2;13748:3;13744:12;13737:19;;13396:366;;;:::o;13768:::-;13910:3;13931:67;13995:2;13990:3;13931:67;:::i;:::-;13924:74;;14007:93;14096:3;14007:93;:::i;:::-;14125:2;14120:3;14116:12;14109:19;;13768:366;;;:::o;14140:::-;14282:3;14303:67;14367:2;14362:3;14303:67;:::i;:::-;14296:74;;14379:93;14468:3;14379:93;:::i;:::-;14497:2;14492:3;14488:12;14481:19;;14140:366;;;:::o;14512:::-;14654:3;14675:67;14739:2;14734:3;14675:67;:::i;:::-;14668:74;;14751:93;14840:3;14751:93;:::i;:::-;14869:2;14864:3;14860:12;14853:19;;14512:366;;;:::o;14884:400::-;15044:3;15065:84;15147:1;15142:3;15065:84;:::i;:::-;15058:91;;15158:93;15247:3;15158:93;:::i;:::-;15276:1;15271:3;15267:11;15260:18;;14884:400;;;:::o;15360:697::-;15519:4;15514:3;15510:14;15606:4;15599:5;15595:16;15589:23;15625:63;15682:4;15677:3;15673:14;15659:12;15625:63;:::i;:::-;15534:164;15790:4;15783:5;15779:16;15773:23;15809:61;15864:4;15859:3;15855:14;15841:12;15809:61;:::i;:::-;15708:172;15964:4;15957:5;15953:16;15947:23;15983:57;16034:4;16029:3;16025:14;16011:12;15983:57;:::i;:::-;15890:160;15488:569;15360:697;;:::o;16063:118::-;16150:24;16168:5;16150:24;:::i;:::-;16145:3;16138:37;16063:118;;:::o;16187:105::-;16262:23;16279:5;16262:23;:::i;:::-;16257:3;16250:36;16187:105;;:::o;16298:967::-;16680:3;16702:95;16793:3;16784:6;16702:95;:::i;:::-;16695:102;;16814:148;16958:3;16814:148;:::i;:::-;16807:155;;16979:95;17070:3;17061:6;16979:95;:::i;:::-;16972:102;;17091:148;17235:3;17091:148;:::i;:::-;17084:155;;17256:3;17249:10;;16298:967;;;;;:::o;17271:961::-;17650:3;17672:92;17760:3;17751:6;17672:92;:::i;:::-;17665:99;;17781:148;17925:3;17781:148;:::i;:::-;17774:155;;17946:95;18037:3;18028:6;17946:95;:::i;:::-;17939:102;;18058:148;18202:3;18058:148;:::i;:::-;18051:155;;18223:3;18216:10;;17271:961;;;;;:::o;18238:379::-;18422:3;18444:147;18587:3;18444:147;:::i;:::-;18437:154;;18608:3;18601:10;;18238:379;;;:::o;18623:222::-;18716:4;18754:2;18743:9;18739:18;18731:26;;18767:71;18835:1;18824:9;18820:17;18811:6;18767:71;:::i;:::-;18623:222;;;;:::o;18851:640::-;19046:4;19084:3;19073:9;19069:19;19061:27;;19098:71;19166:1;19155:9;19151:17;19142:6;19098:71;:::i;:::-;19179:72;19247:2;19236:9;19232:18;19223:6;19179:72;:::i;:::-;19261;19329:2;19318:9;19314:18;19305:6;19261:72;:::i;:::-;19380:9;19374:4;19370:20;19365:2;19354:9;19350:18;19343:48;19408:76;19479:4;19470:6;19408:76;:::i;:::-;19400:84;;18851:640;;;;;;;:::o;19497:210::-;19584:4;19622:2;19611:9;19607:18;19599:26;;19635:65;19697:1;19686:9;19682:17;19673:6;19635:65;:::i;:::-;19497:210;;;;:::o;19713:313::-;19826:4;19864:2;19853:9;19849:18;19841:26;;19913:9;19907:4;19903:20;19899:1;19888:9;19884:17;19877:47;19941:78;20014:4;20005:6;19941:78;:::i;:::-;19933:86;;19713:313;;;;:::o;20032:419::-;20198:4;20236:2;20225:9;20221:18;20213:26;;20285:9;20279:4;20275:20;20271:1;20260:9;20256:17;20249:47;20313:131;20439:4;20313:131;:::i;:::-;20305:139;;20032:419;;;:::o;20457:::-;20623:4;20661:2;20650:9;20646:18;20638:26;;20710:9;20704:4;20700:20;20696:1;20685:9;20681:17;20674:47;20738:131;20864:4;20738:131;:::i;:::-;20730:139;;20457:419;;;:::o;20882:::-;21048:4;21086:2;21075:9;21071:18;21063:26;;21135:9;21129:4;21125:20;21121:1;21110:9;21106:17;21099:47;21163:131;21289:4;21163:131;:::i;:::-;21155:139;;20882:419;;;:::o;21307:::-;21473:4;21511:2;21500:9;21496:18;21488:26;;21560:9;21554:4;21550:20;21546:1;21535:9;21531:17;21524:47;21588:131;21714:4;21588:131;:::i;:::-;21580:139;;21307:419;;;:::o;21732:::-;21898:4;21936:2;21925:9;21921:18;21913:26;;21985:9;21979:4;21975:20;21971:1;21960:9;21956:17;21949:47;22013:131;22139:4;22013:131;:::i;:::-;22005:139;;21732:419;;;:::o;22157:::-;22323:4;22361:2;22350:9;22346:18;22338:26;;22410:9;22404:4;22400:20;22396:1;22385:9;22381:17;22374:47;22438:131;22564:4;22438:131;:::i;:::-;22430:139;;22157:419;;;:::o;22582:::-;22748:4;22786:2;22775:9;22771:18;22763:26;;22835:9;22829:4;22825:20;22821:1;22810:9;22806:17;22799:47;22863:131;22989:4;22863:131;:::i;:::-;22855:139;;22582:419;;;:::o;23007:::-;23173:4;23211:2;23200:9;23196:18;23188:26;;23260:9;23254:4;23250:20;23246:1;23235:9;23231:17;23224:47;23288:131;23414:4;23288:131;:::i;:::-;23280:139;;23007:419;;;:::o;23432:::-;23598:4;23636:2;23625:9;23621:18;23613:26;;23685:9;23679:4;23675:20;23671:1;23660:9;23656:17;23649:47;23713:131;23839:4;23713:131;:::i;:::-;23705:139;;23432:419;;;:::o;23857:::-;24023:4;24061:2;24050:9;24046:18;24038:26;;24110:9;24104:4;24100:20;24096:1;24085:9;24081:17;24074:47;24138:131;24264:4;24138:131;:::i;:::-;24130:139;;23857:419;;;:::o;24282:::-;24448:4;24486:2;24475:9;24471:18;24463:26;;24535:9;24529:4;24525:20;24521:1;24510:9;24506:17;24499:47;24563:131;24689:4;24563:131;:::i;:::-;24555:139;;24282:419;;;:::o;24707:::-;24873:4;24911:2;24900:9;24896:18;24888:26;;24960:9;24954:4;24950:20;24946:1;24935:9;24931:17;24924:47;24988:131;25114:4;24988:131;:::i;:::-;24980:139;;24707:419;;;:::o;25132:346::-;25287:4;25325:2;25314:9;25310:18;25302:26;;25338:133;25468:1;25457:9;25453:17;25444:6;25338:133;:::i;:::-;25132:346;;;;:::o;25484:222::-;25577:4;25615:2;25604:9;25600:18;25592:26;;25628:71;25696:1;25685:9;25681:17;25672:6;25628:71;:::i;:::-;25484:222;;;;:::o;25712:129::-;25746:6;25773:20;;:::i;:::-;25763:30;;25802:33;25830:4;25822:6;25802:33;:::i;:::-;25712:129;;;:::o;25847:75::-;25880:6;25913:2;25907:9;25897:19;;25847:75;:::o;25928:307::-;25989:4;26079:18;26071:6;26068:30;26065:56;;;26101:18;;:::i;:::-;26065:56;26139:29;26161:6;26139:29;:::i;:::-;26131:37;;26223:4;26217;26213:15;26205:23;;25928:307;;;:::o;26241:308::-;26303:4;26393:18;26385:6;26382:30;26379:56;;;26415:18;;:::i;:::-;26379:56;26453:29;26475:6;26453:29;:::i;:::-;26445:37;;26537:4;26531;26527:15;26519:23;;26241:308;;;:::o;26555:141::-;26604:4;26627:3;26619:11;;26650:3;26647:1;26640:14;26684:4;26681:1;26671:18;26663:26;;26555:141;;;:::o;26702:98::-;26753:6;26787:5;26781:12;26771:22;;26702:98;;;:::o;26806:99::-;26858:6;26892:5;26886:12;26876:22;;26806:99;;;:::o;26911:168::-;26994:11;27028:6;27023:3;27016:19;27068:4;27063:3;27059:14;27044:29;;26911:168;;;;:::o;27085:147::-;27186:11;27223:3;27208:18;;27085:147;;;;:::o;27238:169::-;27322:11;27356:6;27351:3;27344:19;27396:4;27391:3;27387:14;27372:29;;27238:169;;;;:::o;27413:148::-;27515:11;27552:3;27537:18;;27413:148;;;;:::o;27567:305::-;27607:3;27626:20;27644:1;27626:20;:::i;:::-;27621:25;;27660:20;27678:1;27660:20;:::i;:::-;27655:25;;27814:1;27746:66;27742:74;27739:1;27736:81;27733:107;;;27820:18;;:::i;:::-;27733:107;27864:1;27861;27857:9;27850:16;;27567:305;;;;:::o;27878:185::-;27918:1;27935:20;27953:1;27935:20;:::i;:::-;27930:25;;27969:20;27987:1;27969:20;:::i;:::-;27964:25;;28008:1;27998:35;;28013:18;;:::i;:::-;27998:35;28055:1;28052;28048:9;28043:14;;27878:185;;;;:::o;28069:348::-;28109:7;28132:20;28150:1;28132:20;:::i;:::-;28127:25;;28166:20;28184:1;28166:20;:::i;:::-;28161:25;;28354:1;28286:66;28282:74;28279:1;28276:81;28271:1;28264:9;28257:17;28253:105;28250:131;;;28361:18;;:::i;:::-;28250:131;28409:1;28406;28402:9;28391:20;;28069:348;;;;:::o;28423:191::-;28463:4;28483:20;28501:1;28483:20;:::i;:::-;28478:25;;28517:20;28535:1;28517:20;:::i;:::-;28512:25;;28556:1;28553;28550:8;28547:34;;;28561:18;;:::i;:::-;28547:34;28606:1;28603;28599:9;28591:17;;28423:191;;;;:::o;28620:96::-;28657:7;28686:24;28704:5;28686:24;:::i;:::-;28675:35;;28620:96;;;:::o;28722:90::-;28756:7;28799:5;28792:13;28785:21;28774:32;;28722:90;;;:::o;28818:149::-;28854:7;28894:66;28887:5;28883:78;28872:89;;28818:149;;;:::o;28973:126::-;29010:7;29050:42;29043:5;29039:54;29028:65;;28973:126;;;:::o;29105:77::-;29142:7;29171:5;29160:16;;29105:77;;;:::o;29188:101::-;29224:7;29264:18;29257:5;29253:30;29242:41;;29188:101;;;:::o;29295:154::-;29379:6;29374:3;29369;29356:30;29441:1;29432:6;29427:3;29423:16;29416:27;29295:154;;;:::o;29455:307::-;29523:1;29533:113;29547:6;29544:1;29541:13;29533:113;;;29632:1;29627:3;29623:11;29617:18;29613:1;29608:3;29604:11;29597:39;29569:2;29566:1;29562:10;29557:15;;29533:113;;;29664:6;29661:1;29658:13;29655:101;;;29744:1;29735:6;29730:3;29726:16;29719:27;29655:101;29504:258;29455:307;;;:::o;29768:320::-;29812:6;29849:1;29843:4;29839:12;29829:22;;29896:1;29890:4;29886:12;29917:18;29907:81;;29973:4;29965:6;29961:17;29951:27;;29907:81;30035:2;30027:6;30024:14;30004:18;30001:38;29998:84;;;30054:18;;:::i;:::-;29998:84;29819:269;29768:320;;;:::o;30094:281::-;30177:27;30199:4;30177:27;:::i;:::-;30169:6;30165:40;30307:6;30295:10;30292:22;30271:18;30259:10;30256:34;30253:62;30250:88;;;30318:18;;:::i;:::-;30250:88;30358:10;30354:2;30347:22;30137:238;30094:281;;:::o;30381:233::-;30420:3;30443:24;30461:5;30443:24;:::i;:::-;30434:33;;30489:66;30482:5;30479:77;30476:103;;;30559:18;;:::i;:::-;30476:103;30606:1;30599:5;30595:13;30588:20;;30381:233;;;:::o;30620:176::-;30652:1;30669:20;30687:1;30669:20;:::i;:::-;30664:25;;30703:20;30721:1;30703:20;:::i;:::-;30698:25;;30742:1;30732:35;;30747:18;;:::i;:::-;30732:35;30788:1;30785;30781:9;30776:14;;30620:176;;;;:::o;30802:180::-;30850:77;30847:1;30840:88;30947:4;30944:1;30937:15;30971:4;30968:1;30961:15;30988:180;31036:77;31033:1;31026:88;31133:4;31130:1;31123:15;31157:4;31154:1;31147:15;31174:180;31222:77;31219:1;31212:88;31319:4;31316:1;31309:15;31343:4;31340:1;31333:15;31360:180;31408:77;31405:1;31398:88;31505:4;31502:1;31495:15;31529:4;31526:1;31519:15;31546:180;31594:77;31591:1;31584:88;31691:4;31688:1;31681:15;31715:4;31712:1;31705:15;31732:117;31841:1;31838;31831:12;31855:117;31964:1;31961;31954:12;31978:117;32087:1;32084;32077:12;32101:117;32210:1;32207;32200:12;32224:102;32265:6;32316:2;32312:7;32307:2;32300:5;32296:14;32292:28;32282:38;;32224:102;;;:::o;32332:225::-;32472:34;32468:1;32460:6;32456:14;32449:58;32541:8;32536:2;32528:6;32524:15;32517:33;32332:225;:::o;32563:168::-;32703:20;32699:1;32691:6;32687:14;32680:44;32563:168;:::o;32737:180::-;32877:32;32873:1;32865:6;32861:14;32854:56;32737:180;:::o;32923:168::-;33063:20;33059:1;33051:6;33047:14;33040:44;32923:168;:::o;33097:155::-;33237:7;33233:1;33225:6;33221:14;33214:31;33097:155;:::o;33258:182::-;33398:34;33394:1;33386:6;33382:14;33375:58;33258:182;:::o;33446:234::-;33586:34;33582:1;33574:6;33570:14;33563:58;33655:17;33650:2;33642:6;33638:15;33631:42;33446:234;:::o;33686:114::-;;:::o;33806:166::-;33946:18;33942:1;33934:6;33930:14;33923:42;33806:166;:::o;33978:182::-;34118:34;34114:1;34106:6;34102:14;34095:58;33978:182;:::o;34166:172::-;34306:24;34302:1;34294:6;34290:14;34283:48;34166:172;:::o;34344:::-;34484:24;34480:1;34472:6;34468:14;34461:48;34344:172;:::o;34522:178::-;34662:30;34658:1;34650:6;34646:14;34639:54;34522:178;:::o;34706:181::-;34846:33;34842:1;34834:6;34830:14;34823:57;34706:181;:::o;34893:151::-;35033:3;35029:1;35021:6;35017:14;35010:27;34893:151;:::o;35050:122::-;35123:24;35141:5;35123:24;:::i;:::-;35116:5;35113:35;35103:63;;35162:1;35159;35152:12;35103:63;35050:122;:::o;35178:116::-;35248:21;35263:5;35248:21;:::i;:::-;35241:5;35238:32;35228:60;;35284:1;35281;35274:12;35228:60;35178:116;:::o;35300:120::-;35372:23;35389:5;35372:23;:::i;:::-;35365:5;35362:34;35352:62;;35410:1;35407;35400:12;35352:62;35300:120;:::o;35426:122::-;35499:24;35517:5;35499:24;:::i;:::-;35492:5;35489:35;35479:63;;35538:1;35535;35528:12;35479:63;35426:122;:::o
Swarm Source
ipfs://851238accf411fe30275cf6d0985f67c5172c1490c5d7c2a99d4fb262885865a
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.