Feature Tip: Add private address tag to any address under My Name Tag !
NFT
Overview
TokenID
662
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BadInfluence
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-25 */ pragma solidity 0.8.15; // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // Creator: Chiru Labs 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 (); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is 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 0; } /** * @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 {} } // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IBadInfluence { function tokenURI(uint256 tokenId) external view returns (string memory); function saleManagerMint(uint256 qty, address recipient) external; function setBaseURI(string memory _baseUri) external; function totalSupply() external view returns (uint256); function setSaleManager(address _mintDrop) external; function setTokenIndex(uint16 tokenId) external; function auctionAvailableTokens() external view returns (uint16 tokenId); function safeTransferFrom(address from, address to, uint256 tokenId) external; } contract BadInfluence is Ownable, ERC721A { using Strings for uint256; string public baseURI; address public saleManager; uint16[] public availableTokenIds; uint256 public maxSupply; uint256 public maxSupplyPhase2; uint256 public immutable teamAllocation; mapping(uint16 => uint16) public auctionTokensIds; constructor( string memory name, string memory symbol, uint256[3] memory _maxSupplyTeamAllocAndAuction ) ERC721A(name, symbol) { maxSupply = _maxSupplyTeamAllocAndAuction[0]; teamAllocation = _maxSupplyTeamAllocAndAuction[1]; maxSupplyPhase2 = _maxSupplyTeamAllocAndAuction[2]; } modifier onlySaleManager() { require(msg.sender == saleManager, "only sale manager"); _; } /// @notice sets the array with the available tokenIds to be mapped to auctioned tokens /// @param _availableTokenIds: array with the available tokenIds function setAvailableTokenIds(uint16[] memory _availableTokenIds) external onlyOwner { availableTokenIds = _availableTokenIds; } /// @notice returns the available tokenIds function auctionAvailableTokens() external view returns (uint16) { return uint16(availableTokenIds.length); } /// @notice reveal the auctioned token and remove the random index from availableTokenIds array /// @param tokenId: tokenId to get the uri for function setTokenIndex(uint16 tokenId) external onlySaleManager { uint16 randomId = uint16(getRandomTokenId()); //get a random token id from the availableTokenIds array and map it with the current token Id auctionTokensIds[tokenId] = availableTokenIds[randomId]; // remove the used token Id from availableTokenIds array availableTokenIds[randomId] = availableTokenIds[ availableTokenIds.length - 1 ]; availableTokenIds.pop(); } /// @notice return a random token id for use on auctioned tokens function getRandomTokenId() private view returns (uint256) { return uint256( keccak256(abi.encodePacked(msg.sender, totalSupply(), blockhash(block.number), block.timestamp)) ) % availableTokenIds.length; } function setBaseURI(string memory _baseUri) external onlyOwner { baseURI = _baseUri; } function saleManagerMint(uint256 qty, address recipient) external onlySaleManager { _safeMint(recipient, qty); } /// @notice get the tokenUri for the tokenId /// @param tokenId: tokenId to get the uri for function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "nonexistent token"); uint256 suffix = tokenId; //if tokenId is one of the auctioned then we will get the Id based on auctionTokensIds mapping if (tokenId >= maxSupply - maxSupplyPhase2) { require(tokenId < maxSupply - availableTokenIds.length, "token not auctioned"); suffix = uint256(auctionTokensIds[uint16(tokenId)]); } return string(abi.encodePacked(baseURI, suffix.toString())); } /// @notice Set the address for the saleManager /// @param _saleManager: address of the sale contract function setSaleManager(address _saleManager) external onlyOwner { saleManager = _saleManager; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256[3]","name":"_maxSupplyTeamAllocAndAuction","type":"uint256[3]"}],"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auctionAvailableTokens","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"auctionTokensIds","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"availableTokenIds","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyPhase2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"saleManagerMint","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":"uint16[]","name":"_availableTokenIds","type":"uint16[]"}],"name":"setAvailableTokenIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_saleManager","type":"address"}],"name":"setSaleManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"setTokenIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506040516200421d3803806200421d833981810160405281019062000037919062000477565b8282620000596200004d6200010560201b60201c565b6200010d60201b60201c565b81600390816200006a919062000752565b5080600490816200007c919062000752565b506200008d620001d160201b60201c565b600181905550505080600060038110620000ac57620000ab62000839565b5b6020020151600c8190555080600160038110620000ce57620000cd62000839565b5b60200201516080818152505080600260038110620000f157620000f062000839565b5b6020020151600d8190555050505062000868565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200023f82620001f4565b810181811067ffffffffffffffff8211171562000261576200026062000205565b5b80604052505050565b600062000276620001d6565b905062000284828262000234565b919050565b600067ffffffffffffffff821115620002a757620002a662000205565b5b620002b282620001f4565b9050602081019050919050565b60005b83811015620002df578082015181840152602081019050620002c2565b83811115620002ef576000848401525b50505050565b60006200030c620003068462000289565b6200026a565b9050828152602081018484840111156200032b576200032a620001ef565b5b62000338848285620002bf565b509392505050565b600082601f830112620003585762000357620001ea565b5b81516200036a848260208601620002f5565b91505092915050565b600067ffffffffffffffff82111562000391576200039062000205565b5b602082029050919050565b600080fd5b6000819050919050565b620003b681620003a1565b8114620003c257600080fd5b50565b600081519050620003d681620003ab565b92915050565b6000620003f3620003ed8462000373565b6200026a565b9050806020840283018581111562000410576200040f6200039c565b5b835b818110156200043d5780620004288882620003c5565b84526020840193505060208101905062000412565b5050509392505050565b600082601f8301126200045f576200045e620001ea565b5b60036200046e848285620003dc565b91505092915050565b600080600060a08486031215620004935762000492620001e0565b5b600084015167ffffffffffffffff811115620004b457620004b3620001e5565b5b620004c28682870162000340565b935050602084015167ffffffffffffffff811115620004e657620004e5620001e5565b5b620004f48682870162000340565b9250506040620005078682870162000447565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200056457607f821691505b6020821081036200057a57620005796200051c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005e47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005a5565b620005f08683620005a5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620006336200062d6200062784620003a1565b62000608565b620003a1565b9050919050565b6000819050919050565b6200064f8362000612565b620006676200065e826200063a565b848454620005b2565b825550505050565b600090565b6200067e6200066f565b6200068b81848462000644565b505050565b5b81811015620006b357620006a760008262000674565b60018101905062000691565b5050565b601f8211156200070257620006cc8162000580565b620006d78462000595565b81016020851015620006e7578190505b620006ff620006f68562000595565b83018262000690565b50505b505050565b600082821c905092915050565b6000620007276000198460080262000707565b1980831691505092915050565b600062000742838362000714565b9150826002028217905092915050565b6200075d8262000511565b67ffffffffffffffff81111562000779576200077862000205565b5b6200078582546200054b565b62000792828285620006b7565b600060209050601f831160018114620007ca5760008415620007b5578287015190505b620007c1858262000734565b86555062000831565b601f198416620007da8662000580565b60005b828110156200080457848901518255600182019150602085019450602081019050620007dd565b8683101562000824578489015162000820601f89168262000714565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b608051613999620008846000396000610a8d01526139996000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063715018a611610104578063c26e5cbc116100a2578063d5abeb0111610071578063d5abeb0114610543578063e985e9c514610561578063f2fde38b14610591578063f88b2f4d146105ad576101da565b8063c26e5cbc146104a9578063c65e799a146104c7578063c72edf5f146104e3578063c87b56dd14610513576101da565b80638da5cb5b116100de5780638da5cb5b1461043557806395d89b4114610453578063a22cb46514610471578063b88d4fde1461048d576101da565b8063715018a6146103f1578063746e60b5146103fb57806383c04b6314610419576101da565b80633bf303941161017c5780636352211e1161014b5780636352211e146103555780636816521a146103855780636c0360eb146103a357806370a08231146103c1576101da565b80633bf30394146102e357806342842e0e1461030157806355f804b31461031d578063563138fc14610339576101da565b8063095ea7b3116101b8578063095ea7b31461025d57806318160ddd146102795780631f283fc21461029757806323b872dd146102c7576101da565b806301ffc9a7146101df57806306fdde031461020f578063081812fc1461022d575b600080fd5b6101f960048036038101906101f49190612788565b6105c9565b60405161020691906127d0565b60405180910390f35b6102176106ab565b6040516102249190612884565b60405180910390f35b610247600480360381019061024291906128dc565b61073d565b604051610254919061294a565b60405180910390f35b61027760048036038101906102729190612991565b6107b9565b005b6102816108c3565b60405161028e91906129e0565b60405180910390f35b6102b160048036038101906102ac91906128dc565b6108da565b6040516102be9190612a18565b60405180910390f35b6102e160048036038101906102dc9190612a33565b610912565b005b6102eb610922565b6040516102f891906129e0565b60405180910390f35b61031b60048036038101906103169190612a33565b610928565b005b61033760048036038101906103329190612bbb565b610948565b005b610353600480360381019061034e9190612c04565b6109d7565b005b61036f600480360381019061036a91906128dc565b610a75565b60405161037c919061294a565b60405180910390f35b61038d610a8b565b60405161039a91906129e0565b60405180910390f35b6103ab610aaf565b6040516103b89190612884565b60405180910390f35b6103db60048036038101906103d69190612c44565b610b3d565b6040516103e891906129e0565b60405180910390f35b6103f9610c0c565b005b610403610c94565b604051610410919061294a565b60405180910390f35b610433600480360381019061042e9190612d65565b610cba565b005b61043d610d50565b60405161044a919061294a565b60405180910390f35b61045b610d79565b6040516104689190612884565b60405180910390f35b61048b60048036038101906104869190612dda565b610e0b565b005b6104a760048036038101906104a29190612ebb565b610f82565b005b6104b1610ffe565b6040516104be9190612a18565b60405180910390f35b6104e160048036038101906104dc9190612f3e565b61100b565b005b6104fd60048036038101906104f89190612f3e565b6111ec565b60405161050a9190612a18565b60405180910390f35b61052d600480360381019061052891906128dc565b61120d565b60405161053a9190612884565b60405180910390f35b61054b61132a565b60405161055891906129e0565b60405180910390f35b61057b60048036038101906105769190612f6b565b611330565b60405161058891906127d0565b60405180910390f35b6105ab60048036038101906105a69190612c44565b6113c4565b005b6105c760048036038101906105c29190612c44565b6114bb565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106a457506106a38261157b565b5b9050919050565b6060600380546106ba90612fda565b80601f01602080910402602001604051908101604052809291908181526020018280546106e690612fda565b80156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b6000610748826115e5565b61077e576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107c482610a75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361082b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661084a611633565b73ffffffffffffffffffffffffffffffffffffffff161415801561087c575061087a81610875611633565b611330565b155b156108b3576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108be83838361163b565b505050565b60006108cd6116ed565b6002546001540303905090565b600b81815481106108ea57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b61091d8383836116f2565b505050565b600d5481565b61094383838360405180602001604052806000815250610f82565b505050565b610950611633565b73ffffffffffffffffffffffffffffffffffffffff1661096e610d50565b73ffffffffffffffffffffffffffffffffffffffff16146109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90613057565b60405180910390fd5b80600990816109d39190613223565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90613341565b60405180910390fd5b610a718183611ba6565b5050565b6000610a8082611bc4565b600001519050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60098054610abc90612fda565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae890612fda565b8015610b355780601f10610b0a57610100808354040283529160200191610b35565b820191906000526020600020905b815481529060010190602001808311610b1857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ba4576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610c14611633565b73ffffffffffffffffffffffffffffffffffffffff16610c32610d50565b73ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f90613057565b60405180910390fd5b610c926000611e53565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cc2611633565b73ffffffffffffffffffffffffffffffffffffffff16610ce0610d50565b73ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90613057565b60405180910390fd5b80600b9080519060200190610d4c929190612612565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d8890612fda565b80601f0160208091040260200160405190810160405280929190818152602001828054610db490612fda565b8015610e015780601f10610dd657610100808354040283529160200191610e01565b820191906000526020600020905b815481529060010190602001808311610de457829003601f168201915b5050505050905090565b610e13611633565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e77576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000610e84611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f31611633565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f7691906127d0565b60405180910390a35050565b610f8d8484846116f2565b610fac8373ffffffffffffffffffffffffffffffffffffffff16611f17565b8015610fc15750610fbf84848484611f2a565b155b15610ff8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000600b80549050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613341565b60405180910390fd5b60006110a561207a565b9050600b8161ffff16815481106110bf576110be613361565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600e60008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550600b6001600b8054905061112c91906133bf565b8154811061113d5761113c613361565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600b8261ffff168154811061117957611178613361565b5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600b8054806111ba576111b96133f3565b5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff021916905590555050565b600e6020528060005260406000206000915054906101000a900461ffff1681565b6060611218826115e5565b611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e9061346e565b60405180910390fd5b6000829050600d54600c5461126c91906133bf565b83106112f757600b80549050600c5461128591906133bf565b83106112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd906134da565b60405180910390fd5b600e60008461ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1690505b6009611302826120c9565b6040516020016113139291906135b9565b604051602081830303815290604052915050919050565b600c5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113cc611633565b73ffffffffffffffffffffffffffffffffffffffff166113ea610d50565b73ffffffffffffffffffffffffffffffffffffffff1614611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790613057565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a69061364f565b60405180910390fd5b6114b881611e53565b50565b6114c3611633565b73ffffffffffffffffffffffffffffffffffffffff166114e1610d50565b73ffffffffffffffffffffffffffffffffffffffff1614611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90613057565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816115f06116ed565b111580156115ff575060015482105b801561162c575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006116fd82611bc4565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611768576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611789611633565b73ffffffffffffffffffffffffffffffffffffffff1614806117b857506117b7856117b2611633565b611330565b5b806117fd57506117c6611633565b73ffffffffffffffffffffffffffffffffffffffff166117e58461073d565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611836576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361189c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118a98585856001612229565b6118b56000848761163b565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b34576001548214611b3357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b9f858585600161222f565b5050505050565b611bc0828260405180602001604052806000815250612235565b5050565b611bcc6126bc565b600082905080611bda6116ed565b11158015611be9575060015481105b15611e1c576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611e1a57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611cfe578092505050611e4e565b5b600115611e1957818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611e14578092505050611e4e565b611cff565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f50611633565b8786866040518563ffffffff1660e01b8152600401611f7294939291906136c4565b6020604051808303816000875af1925050508015611fae57506040513d601f19601f82011682018060405250810190611fab9190613725565b60015b612027573d8060008114611fde576040519150601f19603f3d011682016040523d82523d6000602084013e611fe3565b606091505b50600081510361201f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600b805490503361208b6108c3565b4340426040516020016120a194939291906137e6565b6040516020818303038152906040528051906020012060001c6120c49190613863565b905090565b606060008203612110576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612224565b600082905060005b6000821461214257808061212b90613894565b915050600a8261213b91906138dc565b9150612118565b60008167ffffffffffffffff81111561215e5761215d612a90565b5b6040519080825280601f01601f1916602001820160405280156121905781602001600182028036833780820191505090505b5090505b6000851461221d576001826121a991906133bf565b9150600a856121b89190613863565b60306121c4919061390d565b60f81b8183815181106121da576121d9613361565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561221691906138dc565b9450612194565b8093505050505b919050565b50505050565b50505050565b6122428383836001612247565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122b4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084036122ee576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122fb6000868387612229565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156124c557506124c48773ffffffffffffffffffffffffffffffffffffffff16611f17565b5b1561258a575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461253a6000888480600101955088611f2a565b612570576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036124cb57826001541461258557600080fd5b6125f5565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480820361258b575b81600181905550505061260b600086838761222f565b5050505050565b82805482825590600052602060002090600f016010900481019282156126ab5791602002820160005b8382111561267b57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261263b565b80156126a95782816101000a81549061ffff021916905560020160208160010104928301926001030261267b565b505b5090506126b891906126ff565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612718576000816000905550600101612700565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61276581612730565b811461277057600080fd5b50565b6000813590506127828161275c565b92915050565b60006020828403121561279e5761279d612726565b5b60006127ac84828501612773565b91505092915050565b60008115159050919050565b6127ca816127b5565b82525050565b60006020820190506127e560008301846127c1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561282557808201518184015260208101905061280a565b83811115612834576000848401525b50505050565b6000601f19601f8301169050919050565b6000612856826127eb565b61286081856127f6565b9350612870818560208601612807565b6128798161283a565b840191505092915050565b6000602082019050818103600083015261289e818461284b565b905092915050565b6000819050919050565b6128b9816128a6565b81146128c457600080fd5b50565b6000813590506128d6816128b0565b92915050565b6000602082840312156128f2576128f1612726565b5b6000612900848285016128c7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061293482612909565b9050919050565b61294481612929565b82525050565b600060208201905061295f600083018461293b565b92915050565b61296e81612929565b811461297957600080fd5b50565b60008135905061298b81612965565b92915050565b600080604083850312156129a8576129a7612726565b5b60006129b68582860161297c565b92505060206129c7858286016128c7565b9150509250929050565b6129da816128a6565b82525050565b60006020820190506129f560008301846129d1565b92915050565b600061ffff82169050919050565b612a12816129fb565b82525050565b6000602082019050612a2d6000830184612a09565b92915050565b600080600060608486031215612a4c57612a4b612726565b5b6000612a5a8682870161297c565b9350506020612a6b8682870161297c565b9250506040612a7c868287016128c7565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ac88261283a565b810181811067ffffffffffffffff82111715612ae757612ae6612a90565b5b80604052505050565b6000612afa61271c565b9050612b068282612abf565b919050565b600067ffffffffffffffff821115612b2657612b25612a90565b5b612b2f8261283a565b9050602081019050919050565b82818337600083830152505050565b6000612b5e612b5984612b0b565b612af0565b905082815260208101848484011115612b7a57612b79612a8b565b5b612b85848285612b3c565b509392505050565b600082601f830112612ba257612ba1612a86565b5b8135612bb2848260208601612b4b565b91505092915050565b600060208284031215612bd157612bd0612726565b5b600082013567ffffffffffffffff811115612bef57612bee61272b565b5b612bfb84828501612b8d565b91505092915050565b60008060408385031215612c1b57612c1a612726565b5b6000612c29858286016128c7565b9250506020612c3a8582860161297c565b9150509250929050565b600060208284031215612c5a57612c59612726565b5b6000612c688482850161297c565b91505092915050565b600067ffffffffffffffff821115612c8c57612c8b612a90565b5b602082029050602081019050919050565b600080fd5b612cab816129fb565b8114612cb657600080fd5b50565b600081359050612cc881612ca2565b92915050565b6000612ce1612cdc84612c71565b612af0565b90508083825260208201905060208402830185811115612d0457612d03612c9d565b5b835b81811015612d2d5780612d198882612cb9565b845260208401935050602081019050612d06565b5050509392505050565b600082601f830112612d4c57612d4b612a86565b5b8135612d5c848260208601612cce565b91505092915050565b600060208284031215612d7b57612d7a612726565b5b600082013567ffffffffffffffff811115612d9957612d9861272b565b5b612da584828501612d37565b91505092915050565b612db7816127b5565b8114612dc257600080fd5b50565b600081359050612dd481612dae565b92915050565b60008060408385031215612df157612df0612726565b5b6000612dff8582860161297c565b9250506020612e1085828601612dc5565b9150509250929050565b600067ffffffffffffffff821115612e3557612e34612a90565b5b612e3e8261283a565b9050602081019050919050565b6000612e5e612e5984612e1a565b612af0565b905082815260208101848484011115612e7a57612e79612a8b565b5b612e85848285612b3c565b509392505050565b600082601f830112612ea257612ea1612a86565b5b8135612eb2848260208601612e4b565b91505092915050565b60008060008060808587031215612ed557612ed4612726565b5b6000612ee38782880161297c565b9450506020612ef48782880161297c565b9350506040612f05878288016128c7565b925050606085013567ffffffffffffffff811115612f2657612f2561272b565b5b612f3287828801612e8d565b91505092959194509250565b600060208284031215612f5457612f53612726565b5b6000612f6284828501612cb9565b91505092915050565b60008060408385031215612f8257612f81612726565b5b6000612f908582860161297c565b9250506020612fa18582860161297c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ff257607f821691505b60208210810361300557613004612fab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130416020836127f6565b915061304c8261300b565b602082019050919050565b6000602082019050818103600083015261307081613034565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026130d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261309c565b6130e3868361309c565b95508019841693508086168417925050509392505050565b6000819050919050565b600061312061311b613116846128a6565b6130fb565b6128a6565b9050919050565b6000819050919050565b61313a83613105565b61314e61314682613127565b8484546130a9565b825550505050565b600090565b613163613156565b61316e818484613131565b505050565b5b818110156131925761318760008261315b565b600181019050613174565b5050565b601f8211156131d7576131a881613077565b6131b18461308c565b810160208510156131c0578190505b6131d46131cc8561308c565b830182613173565b50505b505050565b600082821c905092915050565b60006131fa600019846008026131dc565b1980831691505092915050565b600061321383836131e9565b9150826002028217905092915050565b61322c826127eb565b67ffffffffffffffff81111561324557613244612a90565b5b61324f8254612fda565b61325a828285613196565b600060209050601f83116001811461328d576000841561327b578287015190505b6132858582613207565b8655506132ed565b601f19841661329b86613077565b60005b828110156132c35784890151825560018201915060208501945060208101905061329e565b868310156132e057848901516132dc601f8916826131e9565b8355505b6001600288020188555050505b505050505050565b7f6f6e6c792073616c65206d616e61676572000000000000000000000000000000600082015250565b600061332b6011836127f6565b9150613336826132f5565b602082019050919050565b6000602082019050818103600083015261335a8161331e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133ca826128a6565b91506133d5836128a6565b9250828210156133e8576133e7613390565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b60006134586011836127f6565b915061346382613422565b602082019050919050565b600060208201905081810360008301526134878161344b565b9050919050565b7f746f6b656e206e6f742061756374696f6e656400000000000000000000000000600082015250565b60006134c46013836127f6565b91506134cf8261348e565b602082019050919050565b600060208201905081810360008301526134f3816134b7565b9050919050565b600081905092915050565b6000815461351281612fda565b61351c81866134fa565b94506001821660008114613537576001811461354c5761357f565b60ff198316865281151582028601935061357f565b61355585613077565b60005b8381101561357757815481890152600182019150602081019050613558565b838801955050505b50505092915050565b6000613593826127eb565b61359d81856134fa565b93506135ad818560208601612807565b80840191505092915050565b60006135c58285613505565b91506135d18284613588565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136396026836127f6565b9150613644826135dd565b604082019050919050565b600060208201905081810360008301526136688161362c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136968261366f565b6136a0818561367a565b93506136b0818560208601612807565b6136b98161283a565b840191505092915050565b60006080820190506136d9600083018761293b565b6136e6602083018661293b565b6136f360408301856129d1565b8181036060830152613705818461368b565b905095945050505050565b60008151905061371f8161275c565b92915050565b60006020828403121561373b5761373a612726565b5b600061374984828501613710565b91505092915050565b60008160601b9050919050565b600061376a82613752565b9050919050565b600061377c8261375f565b9050919050565b61379461378f82612929565b613771565b82525050565b6000819050919050565b6137b56137b0826128a6565b61379a565b82525050565b6000819050919050565b6000819050919050565b6137e06137db826137bb565b6137c5565b82525050565b60006137f28287613783565b60148201915061380282866137a4565b60208201915061381282856137cf565b60208201915061382282846137a4565b60208201915081905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061386e826128a6565b9150613879836128a6565b92508261388957613888613834565b5b828206905092915050565b600061389f826128a6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138d1576138d0613390565b5b600182019050919050565b60006138e7826128a6565b91506138f2836128a6565b92508261390257613901613834565b5b828204905092915050565b6000613918826128a6565b9150613923836128a6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395857613957613390565b5b82820190509291505056fea2646970667358221220262fce82ffd78195fc561e068094993c7ecce815cd4b3bffd84ffd0d79c31f6364736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000000d42616420496e666c75656e63650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034241440000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063715018a611610104578063c26e5cbc116100a2578063d5abeb0111610071578063d5abeb0114610543578063e985e9c514610561578063f2fde38b14610591578063f88b2f4d146105ad576101da565b8063c26e5cbc146104a9578063c65e799a146104c7578063c72edf5f146104e3578063c87b56dd14610513576101da565b80638da5cb5b116100de5780638da5cb5b1461043557806395d89b4114610453578063a22cb46514610471578063b88d4fde1461048d576101da565b8063715018a6146103f1578063746e60b5146103fb57806383c04b6314610419576101da565b80633bf303941161017c5780636352211e1161014b5780636352211e146103555780636816521a146103855780636c0360eb146103a357806370a08231146103c1576101da565b80633bf30394146102e357806342842e0e1461030157806355f804b31461031d578063563138fc14610339576101da565b8063095ea7b3116101b8578063095ea7b31461025d57806318160ddd146102795780631f283fc21461029757806323b872dd146102c7576101da565b806301ffc9a7146101df57806306fdde031461020f578063081812fc1461022d575b600080fd5b6101f960048036038101906101f49190612788565b6105c9565b60405161020691906127d0565b60405180910390f35b6102176106ab565b6040516102249190612884565b60405180910390f35b610247600480360381019061024291906128dc565b61073d565b604051610254919061294a565b60405180910390f35b61027760048036038101906102729190612991565b6107b9565b005b6102816108c3565b60405161028e91906129e0565b60405180910390f35b6102b160048036038101906102ac91906128dc565b6108da565b6040516102be9190612a18565b60405180910390f35b6102e160048036038101906102dc9190612a33565b610912565b005b6102eb610922565b6040516102f891906129e0565b60405180910390f35b61031b60048036038101906103169190612a33565b610928565b005b61033760048036038101906103329190612bbb565b610948565b005b610353600480360381019061034e9190612c04565b6109d7565b005b61036f600480360381019061036a91906128dc565b610a75565b60405161037c919061294a565b60405180910390f35b61038d610a8b565b60405161039a91906129e0565b60405180910390f35b6103ab610aaf565b6040516103b89190612884565b60405180910390f35b6103db60048036038101906103d69190612c44565b610b3d565b6040516103e891906129e0565b60405180910390f35b6103f9610c0c565b005b610403610c94565b604051610410919061294a565b60405180910390f35b610433600480360381019061042e9190612d65565b610cba565b005b61043d610d50565b60405161044a919061294a565b60405180910390f35b61045b610d79565b6040516104689190612884565b60405180910390f35b61048b60048036038101906104869190612dda565b610e0b565b005b6104a760048036038101906104a29190612ebb565b610f82565b005b6104b1610ffe565b6040516104be9190612a18565b60405180910390f35b6104e160048036038101906104dc9190612f3e565b61100b565b005b6104fd60048036038101906104f89190612f3e565b6111ec565b60405161050a9190612a18565b60405180910390f35b61052d600480360381019061052891906128dc565b61120d565b60405161053a9190612884565b60405180910390f35b61054b61132a565b60405161055891906129e0565b60405180910390f35b61057b60048036038101906105769190612f6b565b611330565b60405161058891906127d0565b60405180910390f35b6105ab60048036038101906105a69190612c44565b6113c4565b005b6105c760048036038101906105c29190612c44565b6114bb565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106a457506106a38261157b565b5b9050919050565b6060600380546106ba90612fda565b80601f01602080910402602001604051908101604052809291908181526020018280546106e690612fda565b80156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b6000610748826115e5565b61077e576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107c482610a75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361082b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661084a611633565b73ffffffffffffffffffffffffffffffffffffffff161415801561087c575061087a81610875611633565b611330565b155b156108b3576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108be83838361163b565b505050565b60006108cd6116ed565b6002546001540303905090565b600b81815481106108ea57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b61091d8383836116f2565b505050565b600d5481565b61094383838360405180602001604052806000815250610f82565b505050565b610950611633565b73ffffffffffffffffffffffffffffffffffffffff1661096e610d50565b73ffffffffffffffffffffffffffffffffffffffff16146109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90613057565b60405180910390fd5b80600990816109d39190613223565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90613341565b60405180910390fd5b610a718183611ba6565b5050565b6000610a8082611bc4565b600001519050919050565b7f00000000000000000000000000000000000000000000000000000000000000c881565b60098054610abc90612fda565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae890612fda565b8015610b355780601f10610b0a57610100808354040283529160200191610b35565b820191906000526020600020905b815481529060010190602001808311610b1857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ba4576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610c14611633565b73ffffffffffffffffffffffffffffffffffffffff16610c32610d50565b73ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f90613057565b60405180910390fd5b610c926000611e53565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cc2611633565b73ffffffffffffffffffffffffffffffffffffffff16610ce0610d50565b73ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90613057565b60405180910390fd5b80600b9080519060200190610d4c929190612612565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d8890612fda565b80601f0160208091040260200160405190810160405280929190818152602001828054610db490612fda565b8015610e015780601f10610dd657610100808354040283529160200191610e01565b820191906000526020600020905b815481529060010190602001808311610de457829003601f168201915b5050505050905090565b610e13611633565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e77576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000610e84611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f31611633565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f7691906127d0565b60405180910390a35050565b610f8d8484846116f2565b610fac8373ffffffffffffffffffffffffffffffffffffffff16611f17565b8015610fc15750610fbf84848484611f2a565b155b15610ff8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000600b80549050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613341565b60405180910390fd5b60006110a561207a565b9050600b8161ffff16815481106110bf576110be613361565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600e60008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550600b6001600b8054905061112c91906133bf565b8154811061113d5761113c613361565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600b8261ffff168154811061117957611178613361565b5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600b8054806111ba576111b96133f3565b5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff021916905590555050565b600e6020528060005260406000206000915054906101000a900461ffff1681565b6060611218826115e5565b611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e9061346e565b60405180910390fd5b6000829050600d54600c5461126c91906133bf565b83106112f757600b80549050600c5461128591906133bf565b83106112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd906134da565b60405180910390fd5b600e60008461ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1690505b6009611302826120c9565b6040516020016113139291906135b9565b604051602081830303815290604052915050919050565b600c5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113cc611633565b73ffffffffffffffffffffffffffffffffffffffff166113ea610d50565b73ffffffffffffffffffffffffffffffffffffffff1614611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790613057565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a69061364f565b60405180910390fd5b6114b881611e53565b50565b6114c3611633565b73ffffffffffffffffffffffffffffffffffffffff166114e1610d50565b73ffffffffffffffffffffffffffffffffffffffff1614611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90613057565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816115f06116ed565b111580156115ff575060015482105b801561162c575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006116fd82611bc4565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611768576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611789611633565b73ffffffffffffffffffffffffffffffffffffffff1614806117b857506117b7856117b2611633565b611330565b5b806117fd57506117c6611633565b73ffffffffffffffffffffffffffffffffffffffff166117e58461073d565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611836576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361189c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118a98585856001612229565b6118b56000848761163b565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b34576001548214611b3357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b9f858585600161222f565b5050505050565b611bc0828260405180602001604052806000815250612235565b5050565b611bcc6126bc565b600082905080611bda6116ed565b11158015611be9575060015481105b15611e1c576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611e1a57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611cfe578092505050611e4e565b5b600115611e1957818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611e14578092505050611e4e565b611cff565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f50611633565b8786866040518563ffffffff1660e01b8152600401611f7294939291906136c4565b6020604051808303816000875af1925050508015611fae57506040513d601f19601f82011682018060405250810190611fab9190613725565b60015b612027573d8060008114611fde576040519150601f19603f3d011682016040523d82523d6000602084013e611fe3565b606091505b50600081510361201f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600b805490503361208b6108c3565b4340426040516020016120a194939291906137e6565b6040516020818303038152906040528051906020012060001c6120c49190613863565b905090565b606060008203612110576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612224565b600082905060005b6000821461214257808061212b90613894565b915050600a8261213b91906138dc565b9150612118565b60008167ffffffffffffffff81111561215e5761215d612a90565b5b6040519080825280601f01601f1916602001820160405280156121905781602001600182028036833780820191505090505b5090505b6000851461221d576001826121a991906133bf565b9150600a856121b89190613863565b60306121c4919061390d565b60f81b8183815181106121da576121d9613361565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561221691906138dc565b9450612194565b8093505050505b919050565b50505050565b50505050565b6122428383836001612247565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122b4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084036122ee576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122fb6000868387612229565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156124c557506124c48773ffffffffffffffffffffffffffffffffffffffff16611f17565b5b1561258a575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461253a6000888480600101955088611f2a565b612570576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036124cb57826001541461258557600080fd5b6125f5565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480820361258b575b81600181905550505061260b600086838761222f565b5050505050565b82805482825590600052602060002090600f016010900481019282156126ab5791602002820160005b8382111561267b57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261263b565b80156126a95782816101000a81549061ffff021916905560020160208160010104928301926001030261267b565b505b5090506126b891906126ff565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612718576000816000905550600101612700565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61276581612730565b811461277057600080fd5b50565b6000813590506127828161275c565b92915050565b60006020828403121561279e5761279d612726565b5b60006127ac84828501612773565b91505092915050565b60008115159050919050565b6127ca816127b5565b82525050565b60006020820190506127e560008301846127c1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561282557808201518184015260208101905061280a565b83811115612834576000848401525b50505050565b6000601f19601f8301169050919050565b6000612856826127eb565b61286081856127f6565b9350612870818560208601612807565b6128798161283a565b840191505092915050565b6000602082019050818103600083015261289e818461284b565b905092915050565b6000819050919050565b6128b9816128a6565b81146128c457600080fd5b50565b6000813590506128d6816128b0565b92915050565b6000602082840312156128f2576128f1612726565b5b6000612900848285016128c7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061293482612909565b9050919050565b61294481612929565b82525050565b600060208201905061295f600083018461293b565b92915050565b61296e81612929565b811461297957600080fd5b50565b60008135905061298b81612965565b92915050565b600080604083850312156129a8576129a7612726565b5b60006129b68582860161297c565b92505060206129c7858286016128c7565b9150509250929050565b6129da816128a6565b82525050565b60006020820190506129f560008301846129d1565b92915050565b600061ffff82169050919050565b612a12816129fb565b82525050565b6000602082019050612a2d6000830184612a09565b92915050565b600080600060608486031215612a4c57612a4b612726565b5b6000612a5a8682870161297c565b9350506020612a6b8682870161297c565b9250506040612a7c868287016128c7565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ac88261283a565b810181811067ffffffffffffffff82111715612ae757612ae6612a90565b5b80604052505050565b6000612afa61271c565b9050612b068282612abf565b919050565b600067ffffffffffffffff821115612b2657612b25612a90565b5b612b2f8261283a565b9050602081019050919050565b82818337600083830152505050565b6000612b5e612b5984612b0b565b612af0565b905082815260208101848484011115612b7a57612b79612a8b565b5b612b85848285612b3c565b509392505050565b600082601f830112612ba257612ba1612a86565b5b8135612bb2848260208601612b4b565b91505092915050565b600060208284031215612bd157612bd0612726565b5b600082013567ffffffffffffffff811115612bef57612bee61272b565b5b612bfb84828501612b8d565b91505092915050565b60008060408385031215612c1b57612c1a612726565b5b6000612c29858286016128c7565b9250506020612c3a8582860161297c565b9150509250929050565b600060208284031215612c5a57612c59612726565b5b6000612c688482850161297c565b91505092915050565b600067ffffffffffffffff821115612c8c57612c8b612a90565b5b602082029050602081019050919050565b600080fd5b612cab816129fb565b8114612cb657600080fd5b50565b600081359050612cc881612ca2565b92915050565b6000612ce1612cdc84612c71565b612af0565b90508083825260208201905060208402830185811115612d0457612d03612c9d565b5b835b81811015612d2d5780612d198882612cb9565b845260208401935050602081019050612d06565b5050509392505050565b600082601f830112612d4c57612d4b612a86565b5b8135612d5c848260208601612cce565b91505092915050565b600060208284031215612d7b57612d7a612726565b5b600082013567ffffffffffffffff811115612d9957612d9861272b565b5b612da584828501612d37565b91505092915050565b612db7816127b5565b8114612dc257600080fd5b50565b600081359050612dd481612dae565b92915050565b60008060408385031215612df157612df0612726565b5b6000612dff8582860161297c565b9250506020612e1085828601612dc5565b9150509250929050565b600067ffffffffffffffff821115612e3557612e34612a90565b5b612e3e8261283a565b9050602081019050919050565b6000612e5e612e5984612e1a565b612af0565b905082815260208101848484011115612e7a57612e79612a8b565b5b612e85848285612b3c565b509392505050565b600082601f830112612ea257612ea1612a86565b5b8135612eb2848260208601612e4b565b91505092915050565b60008060008060808587031215612ed557612ed4612726565b5b6000612ee38782880161297c565b9450506020612ef48782880161297c565b9350506040612f05878288016128c7565b925050606085013567ffffffffffffffff811115612f2657612f2561272b565b5b612f3287828801612e8d565b91505092959194509250565b600060208284031215612f5457612f53612726565b5b6000612f6284828501612cb9565b91505092915050565b60008060408385031215612f8257612f81612726565b5b6000612f908582860161297c565b9250506020612fa18582860161297c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ff257607f821691505b60208210810361300557613004612fab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130416020836127f6565b915061304c8261300b565b602082019050919050565b6000602082019050818103600083015261307081613034565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026130d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261309c565b6130e3868361309c565b95508019841693508086168417925050509392505050565b6000819050919050565b600061312061311b613116846128a6565b6130fb565b6128a6565b9050919050565b6000819050919050565b61313a83613105565b61314e61314682613127565b8484546130a9565b825550505050565b600090565b613163613156565b61316e818484613131565b505050565b5b818110156131925761318760008261315b565b600181019050613174565b5050565b601f8211156131d7576131a881613077565b6131b18461308c565b810160208510156131c0578190505b6131d46131cc8561308c565b830182613173565b50505b505050565b600082821c905092915050565b60006131fa600019846008026131dc565b1980831691505092915050565b600061321383836131e9565b9150826002028217905092915050565b61322c826127eb565b67ffffffffffffffff81111561324557613244612a90565b5b61324f8254612fda565b61325a828285613196565b600060209050601f83116001811461328d576000841561327b578287015190505b6132858582613207565b8655506132ed565b601f19841661329b86613077565b60005b828110156132c35784890151825560018201915060208501945060208101905061329e565b868310156132e057848901516132dc601f8916826131e9565b8355505b6001600288020188555050505b505050505050565b7f6f6e6c792073616c65206d616e61676572000000000000000000000000000000600082015250565b600061332b6011836127f6565b9150613336826132f5565b602082019050919050565b6000602082019050818103600083015261335a8161331e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133ca826128a6565b91506133d5836128a6565b9250828210156133e8576133e7613390565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b60006134586011836127f6565b915061346382613422565b602082019050919050565b600060208201905081810360008301526134878161344b565b9050919050565b7f746f6b656e206e6f742061756374696f6e656400000000000000000000000000600082015250565b60006134c46013836127f6565b91506134cf8261348e565b602082019050919050565b600060208201905081810360008301526134f3816134b7565b9050919050565b600081905092915050565b6000815461351281612fda565b61351c81866134fa565b94506001821660008114613537576001811461354c5761357f565b60ff198316865281151582028601935061357f565b61355585613077565b60005b8381101561357757815481890152600182019150602081019050613558565b838801955050505b50505092915050565b6000613593826127eb565b61359d81856134fa565b93506135ad818560208601612807565b80840191505092915050565b60006135c58285613505565b91506135d18284613588565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136396026836127f6565b9150613644826135dd565b604082019050919050565b600060208201905081810360008301526136688161362c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136968261366f565b6136a0818561367a565b93506136b0818560208601612807565b6136b98161283a565b840191505092915050565b60006080820190506136d9600083018761293b565b6136e6602083018661293b565b6136f360408301856129d1565b8181036060830152613705818461368b565b905095945050505050565b60008151905061371f8161275c565b92915050565b60006020828403121561373b5761373a612726565b5b600061374984828501613710565b91505092915050565b60008160601b9050919050565b600061376a82613752565b9050919050565b600061377c8261375f565b9050919050565b61379461378f82612929565b613771565b82525050565b6000819050919050565b6137b56137b0826128a6565b61379a565b82525050565b6000819050919050565b6000819050919050565b6137e06137db826137bb565b6137c5565b82525050565b60006137f28287613783565b60148201915061380282866137a4565b60208201915061381282856137cf565b60208201915061382282846137a4565b60208201915081905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061386e826128a6565b9150613879836128a6565b92508261388957613888613834565b5b828206905092915050565b600061389f826128a6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138d1576138d0613390565b5b600182019050919050565b60006138e7826128a6565b91506138f2836128a6565b92508261390257613901613834565b5b828204905092915050565b6000613918826128a6565b9150613923836128a6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395857613957613390565b5b82820190509291505056fea2646970667358221220262fce82ffd78195fc561e068094993c7ecce815cd4b3bffd84ffd0d79c31f6364736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000000d42616420496e666c75656e63650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034241440000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Bad Influence
Arg [1] : symbol (string): BAD
Arg [2] : _maxSupplyTeamAllocAndAuction (uint256[3]): 10000,200,4000
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000fa0
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [6] : 42616420496e666c75656e636500000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4241440000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44102:3275:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23339:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26452:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27955:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27518:371;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22588:303;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44238:33;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28820:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44305:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29061:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46283:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46383:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26260:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44340:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44181:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23708:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42709:103;;;:::i;:::-;;44207:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45031:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42058:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26621:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28231:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29317:369;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45219:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45491:476;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44386:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46607:549;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44276:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28589:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42967:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47270:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23339:305;23441:4;23493:25;23478:40;;;:11;:40;;;;:105;;;;23550:33;23535:48;;;:11;:48;;;;23478:105;:158;;;;23600:36;23624:11;23600:23;:36::i;:::-;23478:158;23458:178;;23339:305;;;:::o;26452:100::-;26506:13;26539:5;26532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26452:100;:::o;27955:204::-;28023:7;28048:16;28056:7;28048;:16::i;:::-;28043:64;;28073:34;;;;;;;;;;;;;;28043:64;28127:15;:24;28143:7;28127:24;;;;;;;;;;;;;;;;;;;;;28120:31;;27955:204;;;:::o;27518:371::-;27591:13;27607:24;27623:7;27607:15;:24::i;:::-;27591:40;;27652:5;27646:11;;:2;:11;;;27642:48;;27666:24;;;;;;;;;;;;;;27642:48;27723:5;27707:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;27733:37;27750:5;27757:12;:10;:12::i;:::-;27733:16;:37::i;:::-;27732:38;27707:63;27703:138;;;27794:35;;;;;;;;;;;;;;27703:138;27853:28;27862:2;27866:7;27875:5;27853:8;:28::i;:::-;27580:309;27518:371;;:::o;22588:303::-;22632:7;22857:15;:13;:15::i;:::-;22842:12;;22826:13;;:28;:46;22819:53;;22588:303;:::o;44238:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28820:170::-;28954:28;28964:4;28970:2;28974:7;28954:9;:28::i;:::-;28820:170;;;:::o;44305:30::-;;;;:::o;29061:185::-;29199:39;29216:4;29222:2;29226:7;29199:39;;;;;;;;;;;;:16;:39::i;:::-;29061:185;;;:::o;46283:94::-;42289:12;:10;:12::i;:::-;42278:23;;:7;:5;:7::i;:::-;:23;;;42270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46363:8:::1;46353:7;:18;;;;;;:::i;:::-;;46283:94:::0;:::o;46383:120::-;44819:11;;;;;;;;;;;44805:25;;:10;:25;;;44797:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46472:25:::1;46482:9;46493:3;46472:9;:25::i;:::-;46383:120:::0;;:::o;26260:125::-;26324:7;26351:21;26364:7;26351:12;:21::i;:::-;:26;;;26344:33;;26260:125;;;:::o;44340:39::-;;;:::o;44181:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23708:206::-;23772:7;23813:1;23796:19;;:5;:19;;;23792:60;;23824:28;;;;;;;;;;;;;;23792:60;23878:12;:19;23891:5;23878:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;23870:36;;23863:43;;23708:206;;;:::o;42709:103::-;42289:12;:10;:12::i;:::-;42278:23;;:7;:5;:7::i;:::-;:23;;;42270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42774:30:::1;42801:1;42774:18;:30::i;:::-;42709:103::o:0;44207:26::-;;;;;;;;;;;;;:::o;45031:136::-;42289:12;:10;:12::i;:::-;42278:23;;:7;:5;:7::i;:::-;:23;;;42270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45143:18:::1;45123:17;:38;;;;;;;;;;;;:::i;:::-;;45031:136:::0;:::o;42058:87::-;42104:7;42131:6;;;;;;;;;;;42124:13;;42058:87;:::o;26621:104::-;26677:13;26710:7;26703:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26621:104;:::o;28231:287::-;28342:12;:10;:12::i;:::-;28330:24;;:8;:24;;;28326:54;;28363:17;;;;;;;;;;;;;;28326:54;28438:8;28393:18;:32;28412:12;:10;:12::i;:::-;28393:32;;;;;;;;;;;;;;;:42;28426:8;28393:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28491:8;28462:48;;28477:12;:10;:12::i;:::-;28462:48;;;28501:8;28462:48;;;;;;:::i;:::-;;;;;;;;28231:287;;:::o;29317:369::-;29484:28;29494:4;29500:2;29504:7;29484:9;:28::i;:::-;29527:15;:2;:13;;;:15::i;:::-;:76;;;;;29547:56;29578:4;29584:2;29588:7;29597:5;29547:30;:56::i;:::-;29546:57;29527:76;29523:156;;;29627:40;;;;;;;;;;;;;;29523:156;29317:369;;;;:::o;45219:117::-;45276:6;45305:17;:24;;;;45291:39;;45219:117;:::o;45491:476::-;44819:11;;;;;;;;;;;44805:25;;:10;:25;;;44797:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45562:15:::1;45587:18;:16;:18::i;:::-;45562:44;;45742:17;45760:8;45742:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45714:16;:25;45731:7;45714:25;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;45870:17;45923:1;45896:17;:24;;;;:28;;;;:::i;:::-;45870:61;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45840:17;45858:8;45840:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;45938:17;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45555:412;45491:476:::0;:::o;44386:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;46607:549::-;46672:13;46702:16;46710:7;46702;:16::i;:::-;46694:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;46749:14;46766:7;46749:24;;46907:15;;46895:9;;:27;;;;:::i;:::-;46884:7;:38;46880:201;;46963:17;:24;;;;46951:9;;:36;;;;:::i;:::-;46941:7;:46;46933:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47039:16;:33;47063:7;47039:33;;;;;;;;;;;;;;;;;;;;;;;;;47031:42;;47022:51;;46880:201;47122:7;47131:17;:6;:15;:17::i;:::-;47105:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47091:59;;;46607:549;;;:::o;44276:24::-;;;;:::o;28589:164::-;28686:4;28710:18;:25;28729:5;28710:25;;;;;;;;;;;;;;;:35;28736:8;28710:35;;;;;;;;;;;;;;;;;;;;;;;;;28703:42;;28589:164;;;;:::o;42967:201::-;42289:12;:10;:12::i;:::-;42278:23;;:7;:5;:7::i;:::-;:23;;;42270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43076:1:::1;43056:22;;:8;:22;;::::0;43048:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43132:28;43151:8;43132:18;:28::i;:::-;42967:201:::0;:::o;47270:104::-;42289:12;:10;:12::i;:::-;42278:23;;:7;:5;:7::i;:::-;:23;;;42270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47356:12:::1;47342:11;;:26;;;;;;;;;;;;;;;;;;47270:104:::0;:::o;18955:157::-;19040:4;19079:25;19064:40;;;:11;:40;;;;19057:47;;18955:157;;;:::o;29941:174::-;29998:4;30041:7;30022:15;:13;:15::i;:::-;:26;;:53;;;;;30062:13;;30052:7;:23;30022:53;:85;;;;;30080:11;:20;30092:7;30080:20;;;;;;;;;;;:27;;;;;;;;;;;;30079:28;30022:85;30015:92;;29941:174;;;:::o;15937:98::-;15990:7;16017:10;16010:17;;15937:98;:::o;38098:196::-;38240:2;38213:15;:24;38229:7;38213:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38278:7;38274:2;38258:28;;38267:5;38258:28;;;;;;;;;;;;38098:196;;;:::o;22362:92::-;22418:7;22362:92;:::o;33041:2130::-;33156:35;33194:21;33207:7;33194:12;:21::i;:::-;33156:59;;33254:4;33232:26;;:13;:18;;;:26;;;33228:67;;33267:28;;;;;;;;;;;;;;33228:67;33308:22;33350:4;33334:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;33371:36;33388:4;33394:12;:10;:12::i;:::-;33371:16;:36::i;:::-;33334:73;:126;;;;33448:12;:10;:12::i;:::-;33424:36;;:20;33436:7;33424:11;:20::i;:::-;:36;;;33334:126;33308:153;;33479:17;33474:66;;33505:35;;;;;;;;;;;;;;33474:66;33569:1;33555:16;;:2;:16;;;33551:52;;33580:23;;;;;;;;;;;;;;33551:52;33616:43;33638:4;33644:2;33648:7;33657:1;33616:21;:43::i;:::-;33724:35;33741:1;33745:7;33754:4;33724:8;:35::i;:::-;34085:1;34055:12;:18;34068:4;34055:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34129:1;34101:12;:16;34114:2;34101:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34147:31;34181:11;:20;34193:7;34181:20;;;;;;;;;;;34147:54;;34232:2;34216:8;:13;;;:18;;;;;;;;;;;;;;;;;;34282:15;34249:8;:23;;;:49;;;;;;;;;;;;;;;;;;34550:19;34582:1;34572:7;:11;34550:33;;34598:31;34632:11;:24;34644:11;34632:24;;;;;;;;;;;34598:58;;34700:1;34675:27;;:8;:13;;;;;;;;;;;;:27;;;34671:384;;34885:13;;34870:11;:28;34866:174;;34939:4;34923:8;:13;;;:20;;;;;;;;;;;;;;;;;;34992:13;:28;;;34966:8;:23;;;:54;;;;;;;;;;;;;;;;;;34866:174;34671:384;34030:1036;;;35102:7;35098:2;35083:27;;35092:4;35083:27;;;;;;;;;;;;35121:42;35142:4;35148:2;35152:7;35161:1;35121:20;:42::i;:::-;33145:2026;;33041:2130;;;:::o;30123:104::-;30192:27;30202:2;30206:8;30192:27;;;;;;;;;;;;:9;:27::i;:::-;30123:104;;:::o;25089:1109::-;25151:21;;:::i;:::-;25185:12;25200:7;25185:22;;25268:4;25249:15;:13;:15::i;:::-;:23;;:47;;;;;25283:13;;25276:4;:20;25249:47;25245:886;;;25317:31;25351:11;:17;25363:4;25351:17;;;;;;;;;;;25317:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25392:9;:16;;;25387:729;;25463:1;25437:28;;:9;:14;;;:28;;;25433:101;;25501:9;25494:16;;;;;;25433:101;25836:261;25843:4;25836:261;;;25876:6;;;;;;;;25921:11;:17;25933:4;25921:17;;;;;;;;;;;25909:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25995:1;25969:28;;:9;:14;;;:28;;;25965:109;;26037:9;26030:16;;;;;;25965:109;25836:261;;;25387:729;25298:833;25245:886;26159:31;;;;;;;;;;;;;;25089:1109;;;;:::o;43328:191::-;43402:16;43421:6;;;;;;;;;;;43402:25;;43447:8;43438:6;;:17;;;;;;;;;;;;;;;;;;43502:8;43471:40;;43492:8;43471:40;;;;;;;;;;;;43391:128;43328:191;:::o;8012:387::-;8072:4;8280:12;8347:7;8335:20;8327:28;;8390:1;8383:4;:8;8376:15;;;8012:387;;;:::o;38786:667::-;38949:4;38986:2;38970:36;;;39007:12;:10;:12::i;:::-;39021:4;39027:7;39036:5;38970:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38966:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39221:1;39204:6;:13;:18;39200:235;;39250:40;;;;;;;;;;;;;;39200:235;39393:6;39387:13;39378:6;39374:2;39370:15;39363:38;38966:480;39099:45;;;39089:55;;;:6;:55;;;;39082:62;;;38786:667;;;;;;:::o;46041:236::-;46091:7;46247:17;:24;;;;46166:10;46178:13;:11;:13::i;:::-;46203:12;46193:23;46218:15;46149:85;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46139:96;;;;;;46121:123;;:150;;;;:::i;:::-;46107:164;;46041:236;:::o;16431:723::-;16487:13;16717:1;16708:5;:10;16704:53;;16735:10;;;;;;;;;;;;;;;;;;;;;16704:53;16767:12;16782:5;16767:20;;16798:14;16823:78;16838:1;16830:4;:9;16823:78;;16856:8;;;;;:::i;:::-;;;;16887:2;16879:10;;;;;:::i;:::-;;;16823:78;;;16911:19;16943:6;16933:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16911:39;;16961:154;16977:1;16968:5;:10;16961:154;;17005:1;16995:11;;;;;:::i;:::-;;;17072:2;17064:5;:10;;;;:::i;:::-;17051:2;:24;;;;:::i;:::-;17038:39;;17021:6;17028;17021:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17101:2;17092:11;;;;;:::i;:::-;;;16961:154;;;17139:6;17125:21;;;;;16431:723;;;;:::o;40101:159::-;;;;;:::o;40919:158::-;;;;;:::o;30590:163::-;30713:32;30719:2;30723:8;30733:5;30740:4;30713:5;:32::i;:::-;30590:163;;;:::o;31012:1775::-;31151:20;31174:13;;31151:36;;31216:1;31202:16;;:2;:16;;;31198:48;;31227:19;;;;;;;;;;;;;;31198:48;31273:1;31261:8;:13;31257:44;;31283:18;;;;;;;;;;;;;;31257:44;31314:61;31344:1;31348:2;31352:12;31366:8;31314:21;:61::i;:::-;31687:8;31652:12;:16;31665:2;31652:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31751:8;31711:12;:16;31724:2;31711:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31810:2;31777:11;:25;31789:12;31777:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;31877:15;31827:11;:25;31839:12;31827:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;31910:20;31933:12;31910:35;;31960:11;31989:8;31974:12;:23;31960:37;;32018:4;:23;;;;;32026:15;:2;:13;;;:15::i;:::-;32018:23;32014:641;;;32062:314;32118:12;32114:2;32093:38;;32110:1;32093:38;;;;;;;;;;;;32159:69;32198:1;32202:2;32206:14;;;;;;32222:5;32159:30;:69::i;:::-;32154:174;;32264:40;;;;;;;;;;;;;;32154:174;32371:3;32355:12;:19;32062:314;;32457:12;32440:13;;:29;32436:43;;32471:8;;;32436:43;32014:641;;;32520:120;32576:14;;;;;;32572:2;32551:40;;32568:1;32551:40;;;;;;;;;;;;32635:3;32619:12;:19;32520:120;;32014:641;32685:12;32669:13;:28;;;;31627:1082;;32719:60;32748:1;32752:2;32756:12;32770:8;32719:20;:60::i;:::-;31140:1647;31012:1775;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:89::-;5326:7;5366:6;5359:5;5355:18;5344:29;;5290:89;;;:::o;5385:115::-;5470:23;5487:5;5470:23;:::i;:::-;5465:3;5458:36;5385:115;;:::o;5506:218::-;5597:4;5635:2;5624:9;5620:18;5612:26;;5648:69;5714:1;5703:9;5699:17;5690:6;5648:69;:::i;:::-;5506:218;;;;:::o;5730:619::-;5807:6;5815;5823;5872:2;5860:9;5851:7;5847:23;5843:32;5840:119;;;5878:79;;:::i;:::-;5840:119;5998:1;6023:53;6068:7;6059:6;6048:9;6044:22;6023:53;:::i;:::-;6013:63;;5969:117;6125:2;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6096:118;6253:2;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6224:118;5730:619;;;;;:::o;6355:117::-;6464:1;6461;6454:12;6478:117;6587:1;6584;6577:12;6601:180;6649:77;6646:1;6639:88;6746:4;6743:1;6736:15;6770:4;6767:1;6760:15;6787:281;6870:27;6892:4;6870:27;:::i;:::-;6862:6;6858:40;7000:6;6988:10;6985:22;6964:18;6952:10;6949:34;6946:62;6943:88;;;7011:18;;:::i;:::-;6943:88;7051:10;7047:2;7040:22;6830:238;6787:281;;:::o;7074:129::-;7108:6;7135:20;;:::i;:::-;7125:30;;7164:33;7192:4;7184:6;7164:33;:::i;:::-;7074:129;;;:::o;7209:308::-;7271:4;7361:18;7353:6;7350:30;7347:56;;;7383:18;;:::i;:::-;7347:56;7421:29;7443:6;7421:29;:::i;:::-;7413:37;;7505:4;7499;7495:15;7487:23;;7209:308;;;:::o;7523:154::-;7607:6;7602:3;7597;7584:30;7669:1;7660:6;7655:3;7651:16;7644:27;7523:154;;;:::o;7683:412::-;7761:5;7786:66;7802:49;7844:6;7802:49;:::i;:::-;7786:66;:::i;:::-;7777:75;;7875:6;7868:5;7861:21;7913:4;7906:5;7902:16;7951:3;7942:6;7937:3;7933:16;7930:25;7927:112;;;7958:79;;:::i;:::-;7927:112;8048:41;8082:6;8077:3;8072;8048:41;:::i;:::-;7767:328;7683:412;;;;;:::o;8115:340::-;8171:5;8220:3;8213:4;8205:6;8201:17;8197:27;8187:122;;8228:79;;:::i;:::-;8187:122;8345:6;8332:20;8370:79;8445:3;8437:6;8430:4;8422:6;8418:17;8370:79;:::i;:::-;8361:88;;8177:278;8115:340;;;;:::o;8461:509::-;8530:6;8579:2;8567:9;8558:7;8554:23;8550:32;8547:119;;;8585:79;;:::i;:::-;8547:119;8733:1;8722:9;8718:17;8705:31;8763:18;8755:6;8752:30;8749:117;;;8785:79;;:::i;:::-;8749:117;8890:63;8945:7;8936:6;8925:9;8921:22;8890:63;:::i;:::-;8880:73;;8676:287;8461:509;;;;:::o;8976:474::-;9044:6;9052;9101:2;9089:9;9080:7;9076:23;9072:32;9069:119;;;9107:79;;:::i;:::-;9069:119;9227:1;9252:53;9297:7;9288:6;9277:9;9273:22;9252:53;:::i;:::-;9242:63;;9198:117;9354:2;9380:53;9425:7;9416:6;9405:9;9401:22;9380:53;:::i;:::-;9370:63;;9325:118;8976:474;;;;;:::o;9456:329::-;9515:6;9564:2;9552:9;9543:7;9539:23;9535:32;9532:119;;;9570:79;;:::i;:::-;9532:119;9690:1;9715:53;9760:7;9751:6;9740:9;9736:22;9715:53;:::i;:::-;9705:63;;9661:117;9456:329;;;;:::o;9791:310::-;9867:4;9957:18;9949:6;9946:30;9943:56;;;9979:18;;:::i;:::-;9943:56;10029:4;10021:6;10017:17;10009:25;;10089:4;10083;10079:15;10071:23;;9791:310;;;:::o;10107:117::-;10216:1;10213;10206:12;10230:120;10302:23;10319:5;10302:23;:::i;:::-;10295:5;10292:34;10282:62;;10340:1;10337;10330:12;10282:62;10230:120;:::o;10356:137::-;10401:5;10439:6;10426:20;10417:29;;10455:32;10481:5;10455:32;:::i;:::-;10356:137;;;;:::o;10515:707::-;10610:5;10635:80;10651:63;10707:6;10651:63;:::i;:::-;10635:80;:::i;:::-;10626:89;;10735:5;10764:6;10757:5;10750:21;10798:4;10791:5;10787:16;10780:23;;10851:4;10843:6;10839:17;10831:6;10827:30;10880:3;10872:6;10869:15;10866:122;;;10899:79;;:::i;:::-;10866:122;11014:6;10997:219;11031:6;11026:3;11023:15;10997:219;;;11106:3;11135:36;11167:3;11155:10;11135:36;:::i;:::-;11130:3;11123:49;11201:4;11196:3;11192:14;11185:21;;11073:143;11057:4;11052:3;11048:14;11041:21;;10997:219;;;11001:21;10616:606;;10515:707;;;;;:::o;11244:368::-;11314:5;11363:3;11356:4;11348:6;11344:17;11340:27;11330:122;;11371:79;;:::i;:::-;11330:122;11488:6;11475:20;11513:93;11602:3;11594:6;11587:4;11579:6;11575:17;11513:93;:::i;:::-;11504:102;;11320:292;11244:368;;;;:::o;11618:537::-;11701:6;11750:2;11738:9;11729:7;11725:23;11721:32;11718:119;;;11756:79;;:::i;:::-;11718:119;11904:1;11893:9;11889:17;11876:31;11934:18;11926:6;11923:30;11920:117;;;11956:79;;:::i;:::-;11920:117;12061:77;12130:7;12121:6;12110:9;12106:22;12061:77;:::i;:::-;12051:87;;11847:301;11618:537;;;;:::o;12161:116::-;12231:21;12246:5;12231:21;:::i;:::-;12224:5;12221:32;12211:60;;12267:1;12264;12257:12;12211:60;12161:116;:::o;12283:133::-;12326:5;12364:6;12351:20;12342:29;;12380:30;12404:5;12380:30;:::i;:::-;12283:133;;;;:::o;12422:468::-;12487:6;12495;12544:2;12532:9;12523:7;12519:23;12515:32;12512:119;;;12550:79;;:::i;:::-;12512:119;12670:1;12695:53;12740:7;12731:6;12720:9;12716:22;12695:53;:::i;:::-;12685:63;;12641:117;12797:2;12823:50;12865:7;12856:6;12845:9;12841:22;12823:50;:::i;:::-;12813:60;;12768:115;12422:468;;;;;:::o;12896:307::-;12957:4;13047:18;13039:6;13036:30;13033:56;;;13069:18;;:::i;:::-;13033:56;13107:29;13129:6;13107:29;:::i;:::-;13099:37;;13191:4;13185;13181:15;13173:23;;12896:307;;;:::o;13209:410::-;13286:5;13311:65;13327:48;13368:6;13327:48;:::i;:::-;13311:65;:::i;:::-;13302:74;;13399:6;13392:5;13385:21;13437:4;13430:5;13426:16;13475:3;13466:6;13461:3;13457:16;13454:25;13451:112;;;13482:79;;:::i;:::-;13451:112;13572:41;13606:6;13601:3;13596;13572:41;:::i;:::-;13292:327;13209:410;;;;;:::o;13638:338::-;13693:5;13742:3;13735:4;13727:6;13723:17;13719:27;13709:122;;13750:79;;:::i;:::-;13709:122;13867:6;13854:20;13892:78;13966:3;13958:6;13951:4;13943:6;13939:17;13892:78;:::i;:::-;13883:87;;13699:277;13638:338;;;;:::o;13982:943::-;14077:6;14085;14093;14101;14150:3;14138:9;14129:7;14125:23;14121:33;14118:120;;;14157:79;;:::i;:::-;14118:120;14277:1;14302:53;14347:7;14338:6;14327:9;14323:22;14302:53;:::i;:::-;14292:63;;14248:117;14404:2;14430:53;14475:7;14466:6;14455:9;14451:22;14430:53;:::i;:::-;14420:63;;14375:118;14532:2;14558:53;14603:7;14594:6;14583:9;14579:22;14558:53;:::i;:::-;14548:63;;14503:118;14688:2;14677:9;14673:18;14660:32;14719:18;14711:6;14708:30;14705:117;;;14741:79;;:::i;:::-;14705:117;14846:62;14900:7;14891:6;14880:9;14876:22;14846:62;:::i;:::-;14836:72;;14631:287;13982:943;;;;;;;:::o;14931:327::-;14989:6;15038:2;15026:9;15017:7;15013:23;15009:32;15006:119;;;15044:79;;:::i;:::-;15006:119;15164:1;15189:52;15233:7;15224:6;15213:9;15209:22;15189:52;:::i;:::-;15179:62;;15135:116;14931:327;;;;:::o;15264:474::-;15332:6;15340;15389:2;15377:9;15368:7;15364:23;15360:32;15357:119;;;15395:79;;:::i;:::-;15357:119;15515:1;15540:53;15585:7;15576:6;15565:9;15561:22;15540:53;:::i;:::-;15530:63;;15486:117;15642:2;15668:53;15713:7;15704:6;15693:9;15689:22;15668:53;:::i;:::-;15658:63;;15613:118;15264:474;;;;;:::o;15744:180::-;15792:77;15789:1;15782:88;15889:4;15886:1;15879:15;15913:4;15910:1;15903:15;15930:320;15974:6;16011:1;16005:4;16001:12;15991:22;;16058:1;16052:4;16048:12;16079:18;16069:81;;16135:4;16127:6;16123:17;16113:27;;16069:81;16197:2;16189:6;16186:14;16166:18;16163:38;16160:84;;16216:18;;:::i;:::-;16160:84;15981:269;15930:320;;;:::o;16256:182::-;16396:34;16392:1;16384:6;16380:14;16373:58;16256:182;:::o;16444:366::-;16586:3;16607:67;16671:2;16666:3;16607:67;:::i;:::-;16600:74;;16683:93;16772:3;16683:93;:::i;:::-;16801:2;16796:3;16792:12;16785:19;;16444:366;;;:::o;16816:419::-;16982:4;17020:2;17009:9;17005:18;16997:26;;17069:9;17063:4;17059:20;17055:1;17044:9;17040:17;17033:47;17097:131;17223:4;17097:131;:::i;:::-;17089:139;;16816:419;;;:::o;17241:141::-;17290:4;17313:3;17305:11;;17336:3;17333:1;17326:14;17370:4;17367:1;17357:18;17349:26;;17241:141;;;:::o;17388:93::-;17425:6;17472:2;17467;17460:5;17456:14;17452:23;17442:33;;17388:93;;;:::o;17487:107::-;17531:8;17581:5;17575:4;17571:16;17550:37;;17487:107;;;;:::o;17600:393::-;17669:6;17719:1;17707:10;17703:18;17742:97;17772:66;17761:9;17742:97;:::i;:::-;17860:39;17890:8;17879:9;17860:39;:::i;:::-;17848:51;;17932:4;17928:9;17921:5;17917:21;17908:30;;17981:4;17971:8;17967:19;17960:5;17957:30;17947:40;;17676:317;;17600:393;;;;;:::o;17999:60::-;18027:3;18048:5;18041:12;;17999:60;;;:::o;18065:142::-;18115:9;18148:53;18166:34;18175:24;18193:5;18175:24;:::i;:::-;18166:34;:::i;:::-;18148:53;:::i;:::-;18135:66;;18065:142;;;:::o;18213:75::-;18256:3;18277:5;18270:12;;18213:75;;;:::o;18294:269::-;18404:39;18435:7;18404:39;:::i;:::-;18465:91;18514:41;18538:16;18514:41;:::i;:::-;18506:6;18499:4;18493:11;18465:91;:::i;:::-;18459:4;18452:105;18370:193;18294:269;;;:::o;18569:73::-;18614:3;18569:73;:::o;18648:189::-;18725:32;;:::i;:::-;18766:65;18824:6;18816;18810:4;18766:65;:::i;:::-;18701:136;18648:189;;:::o;18843:186::-;18903:120;18920:3;18913:5;18910:14;18903:120;;;18974:39;19011:1;19004:5;18974:39;:::i;:::-;18947:1;18940:5;18936:13;18927:22;;18903:120;;;18843:186;;:::o;19035:543::-;19136:2;19131:3;19128:11;19125:446;;;19170:38;19202:5;19170:38;:::i;:::-;19254:29;19272:10;19254:29;:::i;:::-;19244:8;19240:44;19437:2;19425:10;19422:18;19419:49;;;19458:8;19443:23;;19419:49;19481:80;19537:22;19555:3;19537:22;:::i;:::-;19527:8;19523:37;19510:11;19481:80;:::i;:::-;19140:431;;19125:446;19035:543;;;:::o;19584:117::-;19638:8;19688:5;19682:4;19678:16;19657:37;;19584:117;;;;:::o;19707:169::-;19751:6;19784:51;19832:1;19828:6;19820:5;19817:1;19813:13;19784:51;:::i;:::-;19780:56;19865:4;19859;19855:15;19845:25;;19758:118;19707:169;;;;:::o;19881:295::-;19957:4;20103:29;20128:3;20122:4;20103:29;:::i;:::-;20095:37;;20165:3;20162:1;20158:11;20152:4;20149:21;20141:29;;19881:295;;;;:::o;20181:1395::-;20298:37;20331:3;20298:37;:::i;:::-;20400:18;20392:6;20389:30;20386:56;;;20422:18;;:::i;:::-;20386:56;20466:38;20498:4;20492:11;20466:38;:::i;:::-;20551:67;20611:6;20603;20597:4;20551:67;:::i;:::-;20645:1;20669:4;20656:17;;20701:2;20693:6;20690:14;20718:1;20713:618;;;;21375:1;21392:6;21389:77;;;21441:9;21436:3;21432:19;21426:26;21417:35;;21389:77;21492:67;21552:6;21545:5;21492:67;:::i;:::-;21486:4;21479:81;21348:222;20683:887;;20713:618;20765:4;20761:9;20753:6;20749:22;20799:37;20831:4;20799:37;:::i;:::-;20858:1;20872:208;20886:7;20883:1;20880:14;20872:208;;;20965:9;20960:3;20956:19;20950:26;20942:6;20935:42;21016:1;21008:6;21004:14;20994:24;;21063:2;21052:9;21048:18;21035:31;;20909:4;20906:1;20902:12;20897:17;;20872:208;;;21108:6;21099:7;21096:19;21093:179;;;21166:9;21161:3;21157:19;21151:26;21209:48;21251:4;21243:6;21239:17;21228:9;21209:48;:::i;:::-;21201:6;21194:64;21116:156;21093:179;21318:1;21314;21306:6;21302:14;21298:22;21292:4;21285:36;20720:611;;;20683:887;;20273:1303;;;20181:1395;;:::o;21582:167::-;21722:19;21718:1;21710:6;21706:14;21699:43;21582:167;:::o;21755:366::-;21897:3;21918:67;21982:2;21977:3;21918:67;:::i;:::-;21911:74;;21994:93;22083:3;21994:93;:::i;:::-;22112:2;22107:3;22103:12;22096:19;;21755:366;;;:::o;22127:419::-;22293:4;22331:2;22320:9;22316:18;22308:26;;22380:9;22374:4;22370:20;22366:1;22355:9;22351:17;22344:47;22408:131;22534:4;22408:131;:::i;:::-;22400:139;;22127:419;;;:::o;22552:180::-;22600:77;22597:1;22590:88;22697:4;22694:1;22687:15;22721:4;22718:1;22711:15;22738:180;22786:77;22783:1;22776:88;22883:4;22880:1;22873:15;22907:4;22904:1;22897:15;22924:191;22964:4;22984:20;23002:1;22984:20;:::i;:::-;22979:25;;23018:20;23036:1;23018:20;:::i;:::-;23013:25;;23057:1;23054;23051:8;23048:34;;;23062:18;;:::i;:::-;23048:34;23107:1;23104;23100:9;23092:17;;22924:191;;;;:::o;23121:180::-;23169:77;23166:1;23159:88;23266:4;23263:1;23256:15;23290:4;23287:1;23280:15;23307:167;23447:19;23443:1;23435:6;23431:14;23424:43;23307:167;:::o;23480:366::-;23622:3;23643:67;23707:2;23702:3;23643:67;:::i;:::-;23636:74;;23719:93;23808:3;23719:93;:::i;:::-;23837:2;23832:3;23828:12;23821:19;;23480:366;;;:::o;23852:419::-;24018:4;24056:2;24045:9;24041:18;24033:26;;24105:9;24099:4;24095:20;24091:1;24080:9;24076:17;24069:47;24133:131;24259:4;24133:131;:::i;:::-;24125:139;;23852:419;;;:::o;24277:169::-;24417:21;24413:1;24405:6;24401:14;24394:45;24277:169;:::o;24452:366::-;24594:3;24615:67;24679:2;24674:3;24615:67;:::i;:::-;24608:74;;24691:93;24780:3;24691:93;:::i;:::-;24809:2;24804:3;24800:12;24793:19;;24452:366;;;:::o;24824:419::-;24990:4;25028:2;25017:9;25013:18;25005:26;;25077:9;25071:4;25067:20;25063:1;25052:9;25048:17;25041:47;25105:131;25231:4;25105:131;:::i;:::-;25097:139;;24824:419;;;:::o;25249:148::-;25351:11;25388:3;25373:18;;25249:148;;;;:::o;25427:874::-;25530:3;25567:5;25561:12;25596:36;25622:9;25596:36;:::i;:::-;25648:89;25730:6;25725:3;25648:89;:::i;:::-;25641:96;;25768:1;25757:9;25753:17;25784:1;25779:166;;;;25959:1;25954:341;;;;25746:549;;25779:166;25863:4;25859:9;25848;25844:25;25839:3;25832:38;25925:6;25918:14;25911:22;25903:6;25899:35;25894:3;25890:45;25883:52;;25779:166;;25954:341;26021:38;26053:5;26021:38;:::i;:::-;26081:1;26095:154;26109:6;26106:1;26103:13;26095:154;;;26183:7;26177:14;26173:1;26168:3;26164:11;26157:35;26233:1;26224:7;26220:15;26209:26;;26131:4;26128:1;26124:12;26119:17;;26095:154;;;26278:6;26273:3;26269:16;26262:23;;25961:334;;25746:549;;25534:767;;25427:874;;;;:::o;26307:377::-;26413:3;26441:39;26474:5;26441:39;:::i;:::-;26496:89;26578:6;26573:3;26496:89;:::i;:::-;26489:96;;26594:52;26639:6;26634:3;26627:4;26620:5;26616:16;26594:52;:::i;:::-;26671:6;26666:3;26662:16;26655:23;;26417:267;26307:377;;;;:::o;26690:429::-;26867:3;26889:92;26977:3;26968:6;26889:92;:::i;:::-;26882:99;;26998:95;27089:3;27080:6;26998:95;:::i;:::-;26991:102;;27110:3;27103:10;;26690:429;;;;;:::o;27125:225::-;27265:34;27261:1;27253:6;27249:14;27242:58;27334:8;27329:2;27321:6;27317:15;27310:33;27125:225;:::o;27356:366::-;27498:3;27519:67;27583:2;27578:3;27519:67;:::i;:::-;27512:74;;27595:93;27684:3;27595:93;:::i;:::-;27713:2;27708:3;27704:12;27697:19;;27356:366;;;:::o;27728:419::-;27894:4;27932:2;27921:9;27917:18;27909:26;;27981:9;27975:4;27971:20;27967:1;27956:9;27952:17;27945:47;28009:131;28135:4;28009:131;:::i;:::-;28001:139;;27728:419;;;:::o;28153:98::-;28204:6;28238:5;28232:12;28222:22;;28153:98;;;:::o;28257:168::-;28340:11;28374:6;28369:3;28362:19;28414:4;28409:3;28405:14;28390:29;;28257:168;;;;:::o;28431:360::-;28517:3;28545:38;28577:5;28545:38;:::i;:::-;28599:70;28662:6;28657:3;28599:70;:::i;:::-;28592:77;;28678:52;28723:6;28718:3;28711:4;28704:5;28700:16;28678:52;:::i;:::-;28755:29;28777:6;28755:29;:::i;:::-;28750:3;28746:39;28739:46;;28521:270;28431:360;;;;:::o;28797:640::-;28992:4;29030:3;29019:9;29015:19;29007:27;;29044:71;29112:1;29101:9;29097:17;29088:6;29044:71;:::i;:::-;29125:72;29193:2;29182:9;29178:18;29169:6;29125:72;:::i;:::-;29207;29275:2;29264:9;29260:18;29251:6;29207:72;:::i;:::-;29326:9;29320:4;29316:20;29311:2;29300:9;29296:18;29289:48;29354:76;29425:4;29416:6;29354:76;:::i;:::-;29346:84;;28797:640;;;;;;;:::o;29443:141::-;29499:5;29530:6;29524:13;29515:22;;29546:32;29572:5;29546:32;:::i;:::-;29443:141;;;;:::o;29590:349::-;29659:6;29708:2;29696:9;29687:7;29683:23;29679:32;29676:119;;;29714:79;;:::i;:::-;29676:119;29834:1;29859:63;29914:7;29905:6;29894:9;29890:22;29859:63;:::i;:::-;29849:73;;29805:127;29590:349;;;;:::o;29945:94::-;29978:8;30026:5;30022:2;30018:14;29997:35;;29945:94;;;:::o;30045:::-;30084:7;30113:20;30127:5;30113:20;:::i;:::-;30102:31;;30045:94;;;:::o;30145:100::-;30184:7;30213:26;30233:5;30213:26;:::i;:::-;30202:37;;30145:100;;;:::o;30251:157::-;30356:45;30376:24;30394:5;30376:24;:::i;:::-;30356:45;:::i;:::-;30351:3;30344:58;30251:157;;:::o;30414:79::-;30453:7;30482:5;30471:16;;30414:79;;;:::o;30499:157::-;30604:45;30624:24;30642:5;30624:24;:::i;:::-;30604:45;:::i;:::-;30599:3;30592:58;30499:157;;:::o;30662:77::-;30699:7;30728:5;30717:16;;30662:77;;;:::o;30745:79::-;30784:7;30813:5;30802:16;;30745:79;;;:::o;30830:157::-;30935:45;30955:24;30973:5;30955:24;:::i;:::-;30935:45;:::i;:::-;30930:3;30923:58;30830:157;;:::o;30993:679::-;31189:3;31204:75;31275:3;31266:6;31204:75;:::i;:::-;31304:2;31299:3;31295:12;31288:19;;31317:75;31388:3;31379:6;31317:75;:::i;:::-;31417:2;31412:3;31408:12;31401:19;;31430:75;31501:3;31492:6;31430:75;:::i;:::-;31530:2;31525:3;31521:12;31514:19;;31543:75;31614:3;31605:6;31543:75;:::i;:::-;31643:2;31638:3;31634:12;31627:19;;31663:3;31656:10;;30993:679;;;;;;;:::o;31678:180::-;31726:77;31723:1;31716:88;31823:4;31820:1;31813:15;31847:4;31844:1;31837:15;31864:176;31896:1;31913:20;31931:1;31913:20;:::i;:::-;31908:25;;31947:20;31965:1;31947:20;:::i;:::-;31942:25;;31986:1;31976:35;;31991:18;;:::i;:::-;31976:35;32032:1;32029;32025:9;32020:14;;31864:176;;;;:::o;32046:233::-;32085:3;32108:24;32126:5;32108:24;:::i;:::-;32099:33;;32154:66;32147:5;32144:77;32141:103;;32224:18;;:::i;:::-;32141:103;32271:1;32264:5;32260:13;32253:20;;32046:233;;;:::o;32285:185::-;32325:1;32342:20;32360:1;32342:20;:::i;:::-;32337:25;;32376:20;32394:1;32376:20;:::i;:::-;32371:25;;32415:1;32405:35;;32420:18;;:::i;:::-;32405:35;32462:1;32459;32455:9;32450:14;;32285:185;;;;:::o;32476:305::-;32516:3;32535:20;32553:1;32535:20;:::i;:::-;32530:25;;32569:20;32587:1;32569:20;:::i;:::-;32564:25;;32723:1;32655:66;32651:74;32648:1;32645:81;32642:107;;;32729:18;;:::i;:::-;32642:107;32773:1;32770;32766:9;32759:16;;32476:305;;;;:::o
Swarm Source
ipfs://262fce82ffd78195fc561e068094993c7ecce815cd4b3bffd84ffd0d79c31f63
Loading...
Loading
Loading...
Loading
[ 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.