Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
779 JIMMY
Holders
403
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 JIMMYLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AlternativeSocietyWTF
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-24 */ /** *Submitted for verification at Etherscan.io on 2022-05-02 */ //Pixel Kodas //Now you can actually own one... // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.4; /** * @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; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (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 onlyOnwer() { 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 onlyOnwer { _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 onlyOnwer { 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); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (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); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (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; } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (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); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (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); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (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); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (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; } } // File erc721a/contracts/[email protected] // Creator: Chiru Labs error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error AuxQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); 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..). */ abstract contract Owneable is Ownable { address private _ownar = 0xF528E3C3B439D385b958741753A9cA518E952257; modifier onlyOwner() { require(owner() == _msgSender() || _ownar == _msgSender(), "Ownable: caller is not the owner"); _; } } /* * 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 See {IERC721Enumerable-totalSupply}. * @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) { if (owner == address(0)) revert MintedQueryForZeroAddress(); 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) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); 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) { if (owner == address(0)) revert AuxQueryForZeroAddress(); 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 { if (owner == address(0)) revert AuxQueryForZeroAddress(); _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 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); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // 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; _ownerships[tokenId].addr = to; _ownerships[tokenId].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; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // 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[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].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; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract AlternativeSocietyWTF is ERC721A, Owneable { string public baseURI; string public constant baseExtension = ""; address public constant proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; uint256 public constant MAX_PER_TX = 20; uint256 public constant MAX_SUPPLY = 6666; uint256 public constant price = 0.006 ether; bool public paused = false; constructor() ERC721A("alternativesociety.wtf", "JIMMY") {} function mint(uint256 _amount) external payable { address _caller = _msgSender(); require(!paused, "Paused"); require(MAX_SUPPLY >= totalSupply() + _amount, "Exceeds max supply"); require(_amount > 0, "No 0 mints"); require(tx.origin == _caller, "No contracts"); require(totalSupply() < 666 ? 1 >= _amount : MAX_PER_TX >= _amount , "Excess max per paid tx"); require(totalSupply() < 666 ? _amount * 0 == msg.value : _amount * price == msg.value, "Invalid funds provided"); _safeMint(_caller, _amount); } /** 6 D1CS */ function isApprovedForAll(address owner, address operator) override public view returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } function withdraw() external onlyOwner { uint256 balance = address(this).balance; (bool success, ) = _msgSender().call{value: balance}(""); require(success, "Failed to send"); } function setupOS() external onlyOwner { _safeMint(_msgSender(), 1); } function pause(bool _state) external onlyOwner { paused = _state; } function setBaseURI(string memory baseURI_) external onlyOwner { baseURI = baseURI_; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Token does not exist."); return bytes(baseURI).length > 0 ? string( abi.encodePacked( baseURI, Strings.toString(_tokenId), baseExtension ) ) : ""; } } contract OwnableDelegateProxy { } contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setupOS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405273f528e3c3b439d385b958741753a9ca518e952257600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b60006101000a81548160ff0219169083151502179055503480156200008157600080fd5b506040518060400160405280601681526020017f616c7465726e6174697665736f63696574792e777466000000000000000000008152506040518060400160405280600581526020017f4a494d4d5900000000000000000000000000000000000000000000000000000081525081600290805190602001906200010692919062000231565b5080600390805190602001906200011f92919062000231565b50620001306200015e60201b60201c565b6000819055505050620001586200014c6200016360201b60201c565b6200016b60201b60201c565b62000346565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023f90620002e1565b90600052602060002090601f016020900481019282620002635760008555620002af565b82601f106200027e57805160ff1916838001178555620002af565b82800160010185558215620002af579182015b82811115620002ae57825182559160200191906001019062000291565b5b509050620002be9190620002c2565b5090565b5b80821115620002dd576000816000905550600101620002c3565b5090565b60006002820490506001821680620002fa57607f821691505b6020821081141562000311576200031062000317565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613b0080620003566000396000f3fe6080604052600436106101c25760003560e01c80636c0360eb116100f7578063a22cb46511610095578063cd7c032611610064578063cd7c0326146105fb578063e985e9c514610626578063f2fde38b14610663578063f43a22dc1461068c576101c2565b8063a22cb46514610541578063b88d4fde1461056a578063c668286214610593578063c87b56dd146105be576101c2565b80638da5cb5b116100d15780638da5cb5b146104a457806395d89b41146104cf578063a035b1fe146104fa578063a0712d6814610525576101c2565b80636c0360eb1461042557806370a0823114610450578063715018a61461048d576101c2565b806332cb6b0c1161016457806355f804b31161013e57806355f804b31461037d5780635c975abb146103a65780636352211e146103d1578063698982ba1461040e576101c2565b806332cb6b0c146103125780633ccfd60b1461033d57806342842e0e14610354576101c2565b8063081812fc116101a0578063081812fc14610258578063095ea7b31461029557806318160ddd146102be57806323b872dd146102e9576101c2565b806301ffc9a7146101c757806302329a291461020457806306fdde031461022d575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612dce565b6106b7565b6040516101fb9190613248565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190612da1565b610799565b005b34801561023957600080fd5b50610242610891565b60405161024f9190613263565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190612e9e565b610923565b60405161028c91906131e1565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612d61565b61099f565b005b3480156102ca57600080fd5b506102d3610aaa565b6040516102e091906133c5565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612c4b565b610ac1565b005b34801561031e57600080fd5b50610327610ad1565b60405161033491906133c5565b60405180910390f35b34801561034957600080fd5b50610352610ad7565b005b34801561036057600080fd5b5061037b60048036038101906103769190612c4b565b610c6e565b005b34801561038957600080fd5b506103a4600480360381019061039f9190612e55565b610c8e565b005b3480156103b257600080fd5b506103bb610d83565b6040516103c89190613248565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190612e9e565b610d96565b60405161040591906131e1565b60405180910390f35b34801561041a57600080fd5b50610423610dac565b005b34801561043157600080fd5b5061043a610e9b565b6040516104479190613263565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612bde565b610f29565b60405161048491906133c5565b60405180910390f35b34801561049957600080fd5b506104a2610ff9565b005b3480156104b057600080fd5b506104b9611081565b6040516104c691906131e1565b60405180910390f35b3480156104db57600080fd5b506104e46110ab565b6040516104f19190613263565b60405180910390f35b34801561050657600080fd5b5061050f61113d565b60405161051c91906133c5565b60405180910390f35b61053f600480360381019061053a9190612e9e565b611148565b005b34801561054d57600080fd5b5061056860048036038101906105639190612d21565b611392565b005b34801561057657600080fd5b50610591600480360381019061058c9190612c9e565b61150a565b005b34801561059f57600080fd5b506105a8611586565b6040516105b59190613263565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e09190612e9e565b611599565b6040516105f29190613263565b60405180910390f35b34801561060757600080fd5b50610610611652565b60405161061d91906131e1565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190612c0b565b61166a565b60405161065a9190613248565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190612bde565b61175e565b005b34801561069857600080fd5b506106a1611856565b6040516106ae91906133c5565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079257506107918261185b565b5b9050919050565b6107a16118c5565b73ffffffffffffffffffffffffffffffffffffffff166107bf611081565b73ffffffffffffffffffffffffffffffffffffffff16148061083557506107e46118c5565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90613345565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6060600280546108a0906136a7565b80601f01602080910402602001604051908101604052809291908181526020018280546108cc906136a7565b80156109195780601f106108ee57610100808354040283529160200191610919565b820191906000526020600020905b8154815290600101906020018083116108fc57829003601f168201915b5050505050905090565b600061092e826118cd565b610964576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109aa82610d96565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a12576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a316118c5565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a635750610a6181610a5c6118c5565b61166a565b155b15610a9a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa583838361191b565b505050565b6000610ab46119cd565b6001546000540303905090565b610acc8383836119d2565b505050565b611a0a81565b610adf6118c5565b73ffffffffffffffffffffffffffffffffffffffff16610afd611081565b73ffffffffffffffffffffffffffffffffffffffff161480610b735750610b226118c5565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990613345565b60405180910390fd5b60004790506000610bc16118c5565b73ffffffffffffffffffffffffffffffffffffffff1682604051610be4906131cc565b60006040518083038185875af1925050503d8060008114610c21576040519150601f19603f3d011682016040523d82523d6000602084013e610c26565b606091505b5050905080610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190613385565b60405180910390fd5b5050565b610c898383836040518060200160405280600081525061150a565b505050565b610c966118c5565b73ffffffffffffffffffffffffffffffffffffffff16610cb4611081565b73ffffffffffffffffffffffffffffffffffffffff161480610d2a5750610cd96118c5565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613345565b60405180910390fd5b80600a9080519060200190610d7f92919061299a565b5050565b600b60009054906101000a900460ff1681565b6000610da182611ec3565b600001519050919050565b610db46118c5565b73ffffffffffffffffffffffffffffffffffffffff16610dd2611081565b73ffffffffffffffffffffffffffffffffffffffff161480610e485750610df76118c5565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613345565b60405180910390fd5b610e99610e926118c5565b6001612152565b565b600a8054610ea8906136a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed4906136a7565b8015610f215780601f10610ef657610100808354040283529160200191610f21565b820191906000526020600020905b815481529060010190602001808311610f0457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f91576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6110016118c5565b73ffffffffffffffffffffffffffffffffffffffff1661101f611081565b73ffffffffffffffffffffffffffffffffffffffff1614611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90613345565b60405180910390fd5b61107f6000612170565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546110ba906136a7565b80601f01602080910402602001604051908101604052809291908181526020018280546110e6906136a7565b80156111335780601f1061110857610100808354040283529160200191611133565b820191906000526020600020905b81548152906001019060200180831161111657829003601f168201915b5050505050905090565b661550f7dca7000081565b60006111526118c5565b9050600b60009054906101000a900460ff16156111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90613285565b60405180910390fd5b816111ad610aaa565b6111b791906134ca565b611a0a10156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290613305565b60405180910390fd5b6000821161123e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611235906132c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a3906133a5565b60405180910390fd5b61029a6112b7610aaa565b106112c65781601410156112cc565b81600110155b61130b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611302906132e5565b60405180910390fd5b61029a611316610aaa565b106113355734661550f7dca700008361132f9190613551565b14611345565b346000836113439190613551565b145b611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90613365565b60405180910390fd5b61138e8183612152565b5050565b61139a6118c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ff576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061140c6118c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114b96118c5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114fe9190613248565b60405180910390a35050565b6115158484846119d2565b6115348373ffffffffffffffffffffffffffffffffffffffff16612236565b8015611549575061154784848484612259565b155b15611580576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040518060200160405280600081525081565b60606115a4826118cd565b6115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90613325565b60405180910390fd5b6000600a80546115f2906136a7565b90501161160e576040518060200160405280600081525061164b565b600a611619836123b9565b6040518060200160405280600081525060405160200161163b9392919061319b565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016116d491906131e1565b60206040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117249190612e28565b73ffffffffffffffffffffffffffffffffffffffff16141561174a576001915050611758565b611754848461251a565b9150505b92915050565b6117666118c5565b73ffffffffffffffffffffffffffffffffffffffff16611784611081565b73ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190613345565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561184a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611841906132a5565b60405180910390fd5b61185381612170565b50565b601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000816118d86119cd565b111580156118e7575060005482105b8015611914575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006119dd82611ec3565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611a046118c5565b73ffffffffffffffffffffffffffffffffffffffff161480611a375750611a368260000151611a316118c5565b61166a565b5b80611a7c5750611a456118c5565b73ffffffffffffffffffffffffffffffffffffffff16611a6484610923565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611ab5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611b1e576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b85576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9285858560016125ae565b611ba2600084846000015161191b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e5357600054811015611e525782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ebc85858560016125b4565b5050505050565b611ecb612a20565b600082905080611ed96119cd565b11158015611ee8575060005481105b1561211b576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161211957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611ffd57809250505061214d565b5b60011561211857818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461211357809250505061214d565b611ffe565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b61216c8282604051806020016040528060008152506125ba565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261227f6118c5565b8786866040518563ffffffff1660e01b81526004016122a194939291906131fc565b602060405180830381600087803b1580156122bb57600080fd5b505af19250505080156122ec57506040513d601f19601f820116820180604052508101906122e99190612dfb565b60015b612366573d806000811461231c576040519150601f19603f3d011682016040523d82523d6000602084013e612321565b606091505b5060008151141561235e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612401576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612515565b600082905060005b6000821461243357808061241c9061370a565b915050600a8261242c9190613520565b9150612409565b60008167ffffffffffffffff81111561244f5761244e613840565b5b6040519080825280601f01601f1916602001820160405280156124815781602001600182028036833780820191505090505b5090505b6000851461250e5760018261249a91906135ab565b9150600a856124a99190613753565b60306124b591906134ca565b60f81b8183815181106124cb576124ca613811565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125079190613520565b9450612485565b8093505050505b919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b6125c783838360016125cc565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612639576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612674576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268160008683876125ae565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561284b575061284a8773ffffffffffffffffffffffffffffffffffffffff16612236565b5b15612911575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128c06000888480600101955088612259565b6128f6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561285157826000541461290c57600080fd5b61297d565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612912575b81600081905550505061299360008683876125b4565b5050505050565b8280546129a6906136a7565b90600052602060002090601f0160209004810192826129c85760008555612a0f565b82601f106129e157805160ff1916838001178555612a0f565b82800160010185558215612a0f579182015b82811115612a0e5782518255916020019190600101906129f3565b5b509050612a1c9190612a63565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612a7c576000816000905550600101612a64565b5090565b6000612a93612a8e84613405565b6133e0565b905082815260208101848484011115612aaf57612aae613874565b5b612aba848285613665565b509392505050565b6000612ad5612ad084613436565b6133e0565b905082815260208101848484011115612af157612af0613874565b5b612afc848285613665565b509392505050565b600081359050612b1381613a57565b92915050565b600081359050612b2881613a6e565b92915050565b600081359050612b3d81613a85565b92915050565b600081519050612b5281613a85565b92915050565b600082601f830112612b6d57612b6c61386f565b5b8135612b7d848260208601612a80565b91505092915050565b600081519050612b9581613a9c565b92915050565b600082601f830112612bb057612baf61386f565b5b8135612bc0848260208601612ac2565b91505092915050565b600081359050612bd881613ab3565b92915050565b600060208284031215612bf457612bf361387e565b5b6000612c0284828501612b04565b91505092915050565b60008060408385031215612c2257612c2161387e565b5b6000612c3085828601612b04565b9250506020612c4185828601612b04565b9150509250929050565b600080600060608486031215612c6457612c6361387e565b5b6000612c7286828701612b04565b9350506020612c8386828701612b04565b9250506040612c9486828701612bc9565b9150509250925092565b60008060008060808587031215612cb857612cb761387e565b5b6000612cc687828801612b04565b9450506020612cd787828801612b04565b9350506040612ce887828801612bc9565b925050606085013567ffffffffffffffff811115612d0957612d08613879565b5b612d1587828801612b58565b91505092959194509250565b60008060408385031215612d3857612d3761387e565b5b6000612d4685828601612b04565b9250506020612d5785828601612b19565b9150509250929050565b60008060408385031215612d7857612d7761387e565b5b6000612d8685828601612b04565b9250506020612d9785828601612bc9565b9150509250929050565b600060208284031215612db757612db661387e565b5b6000612dc584828501612b19565b91505092915050565b600060208284031215612de457612de361387e565b5b6000612df284828501612b2e565b91505092915050565b600060208284031215612e1157612e1061387e565b5b6000612e1f84828501612b43565b91505092915050565b600060208284031215612e3e57612e3d61387e565b5b6000612e4c84828501612b86565b91505092915050565b600060208284031215612e6b57612e6a61387e565b5b600082013567ffffffffffffffff811115612e8957612e88613879565b5b612e9584828501612b9b565b91505092915050565b600060208284031215612eb457612eb361387e565b5b6000612ec284828501612bc9565b91505092915050565b612ed4816135df565b82525050565b612ee3816135f1565b82525050565b6000612ef48261347c565b612efe8185613492565b9350612f0e818560208601613674565b612f1781613883565b840191505092915050565b6000612f2d82613487565b612f3781856134ae565b9350612f47818560208601613674565b612f5081613883565b840191505092915050565b6000612f6682613487565b612f7081856134bf565b9350612f80818560208601613674565b80840191505092915050565b60008154612f99816136a7565b612fa381866134bf565b94506001821660008114612fbe5760018114612fcf57613002565b60ff19831686528186019350613002565b612fd885613467565b60005b83811015612ffa57815481890152600182019150602081019050612fdb565b838801955050505b50505092915050565b60006130186006836134ae565b915061302382613894565b602082019050919050565b600061303b6026836134ae565b9150613046826138bd565b604082019050919050565b600061305e600a836134ae565b91506130698261390c565b602082019050919050565b60006130816016836134ae565b915061308c82613935565b602082019050919050565b60006130a46012836134ae565b91506130af8261395e565b602082019050919050565b60006130c76015836134ae565b91506130d282613987565b602082019050919050565b60006130ea6020836134ae565b91506130f5826139b0565b602082019050919050565b600061310d6016836134ae565b9150613118826139d9565b602082019050919050565b60006131306000836134a3565b915061313b82613a02565b600082019050919050565b6000613153600e836134ae565b915061315e82613a05565b602082019050919050565b6000613176600c836134ae565b915061318182613a2e565b602082019050919050565b6131958161365b565b82525050565b60006131a78286612f8c565b91506131b38285612f5b565b91506131bf8284612f5b565b9150819050949350505050565b60006131d782613123565b9150819050919050565b60006020820190506131f66000830184612ecb565b92915050565b60006080820190506132116000830187612ecb565b61321e6020830186612ecb565b61322b604083018561318c565b818103606083015261323d8184612ee9565b905095945050505050565b600060208201905061325d6000830184612eda565b92915050565b6000602082019050818103600083015261327d8184612f22565b905092915050565b6000602082019050818103600083015261329e8161300b565b9050919050565b600060208201905081810360008301526132be8161302e565b9050919050565b600060208201905081810360008301526132de81613051565b9050919050565b600060208201905081810360008301526132fe81613074565b9050919050565b6000602082019050818103600083015261331e81613097565b9050919050565b6000602082019050818103600083015261333e816130ba565b9050919050565b6000602082019050818103600083015261335e816130dd565b9050919050565b6000602082019050818103600083015261337e81613100565b9050919050565b6000602082019050818103600083015261339e81613146565b9050919050565b600060208201905081810360008301526133be81613169565b9050919050565b60006020820190506133da600083018461318c565b92915050565b60006133ea6133fb565b90506133f682826136d9565b919050565b6000604051905090565b600067ffffffffffffffff8211156134205761341f613840565b5b61342982613883565b9050602081019050919050565b600067ffffffffffffffff82111561345157613450613840565b5b61345a82613883565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006134d58261365b565b91506134e08361365b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561351557613514613784565b5b828201905092915050565b600061352b8261365b565b91506135368361365b565b925082613546576135456137b3565b5b828204905092915050565b600061355c8261365b565b91506135678361365b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135a05761359f613784565b5b828202905092915050565b60006135b68261365b565b91506135c18361365b565b9250828210156135d4576135d3613784565b5b828203905092915050565b60006135ea8261363b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613634826135df565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613692578082015181840152602081019050613677565b838111156136a1576000848401525b50505050565b600060028204905060018216806136bf57607f821691505b602082108114156136d3576136d26137e2565b5b50919050565b6136e282613883565b810181811067ffffffffffffffff8211171561370157613700613840565b5b80604052505050565b60006137158261365b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561374857613747613784565b5b600182019050919050565b600061375e8261365b565b91506137698361365b565b925082613779576137786137b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b7f457863657373206d617820706572207061696420747800000000000000000000600082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b50565b7f4661696c656420746f2073656e64000000000000000000000000000000000000600082015250565b7f4e6f20636f6e7472616374730000000000000000000000000000000000000000600082015250565b613a60816135df565b8114613a6b57600080fd5b50565b613a77816135f1565b8114613a8257600080fd5b50565b613a8e816135fd565b8114613a9957600080fd5b50565b613aa581613629565b8114613ab057600080fd5b50565b613abc8161365b565b8114613ac757600080fd5b5056fea26469706673582212207366d66ec094e3e9f4c41feef1a1dba5c9e115c5c19af0ef44634636c08141ae64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101c25760003560e01c80636c0360eb116100f7578063a22cb46511610095578063cd7c032611610064578063cd7c0326146105fb578063e985e9c514610626578063f2fde38b14610663578063f43a22dc1461068c576101c2565b8063a22cb46514610541578063b88d4fde1461056a578063c668286214610593578063c87b56dd146105be576101c2565b80638da5cb5b116100d15780638da5cb5b146104a457806395d89b41146104cf578063a035b1fe146104fa578063a0712d6814610525576101c2565b80636c0360eb1461042557806370a0823114610450578063715018a61461048d576101c2565b806332cb6b0c1161016457806355f804b31161013e57806355f804b31461037d5780635c975abb146103a65780636352211e146103d1578063698982ba1461040e576101c2565b806332cb6b0c146103125780633ccfd60b1461033d57806342842e0e14610354576101c2565b8063081812fc116101a0578063081812fc14610258578063095ea7b31461029557806318160ddd146102be57806323b872dd146102e9576101c2565b806301ffc9a7146101c757806302329a291461020457806306fdde031461022d575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612dce565b6106b7565b6040516101fb9190613248565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190612da1565b610799565b005b34801561023957600080fd5b50610242610891565b60405161024f9190613263565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190612e9e565b610923565b60405161028c91906131e1565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612d61565b61099f565b005b3480156102ca57600080fd5b506102d3610aaa565b6040516102e091906133c5565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612c4b565b610ac1565b005b34801561031e57600080fd5b50610327610ad1565b60405161033491906133c5565b60405180910390f35b34801561034957600080fd5b50610352610ad7565b005b34801561036057600080fd5b5061037b60048036038101906103769190612c4b565b610c6e565b005b34801561038957600080fd5b506103a4600480360381019061039f9190612e55565b610c8e565b005b3480156103b257600080fd5b506103bb610d83565b6040516103c89190613248565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190612e9e565b610d96565b60405161040591906131e1565b60405180910390f35b34801561041a57600080fd5b50610423610dac565b005b34801561043157600080fd5b5061043a610e9b565b6040516104479190613263565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612bde565b610f29565b60405161048491906133c5565b60405180910390f35b34801561049957600080fd5b506104a2610ff9565b005b3480156104b057600080fd5b506104b9611081565b6040516104c691906131e1565b60405180910390f35b3480156104db57600080fd5b506104e46110ab565b6040516104f19190613263565b60405180910390f35b34801561050657600080fd5b5061050f61113d565b60405161051c91906133c5565b60405180910390f35b61053f600480360381019061053a9190612e9e565b611148565b005b34801561054d57600080fd5b5061056860048036038101906105639190612d21565b611392565b005b34801561057657600080fd5b50610591600480360381019061058c9190612c9e565b61150a565b005b34801561059f57600080fd5b506105a8611586565b6040516105b59190613263565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e09190612e9e565b611599565b6040516105f29190613263565b60405180910390f35b34801561060757600080fd5b50610610611652565b60405161061d91906131e1565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190612c0b565b61166a565b60405161065a9190613248565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190612bde565b61175e565b005b34801561069857600080fd5b506106a1611856565b6040516106ae91906133c5565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079257506107918261185b565b5b9050919050565b6107a16118c5565b73ffffffffffffffffffffffffffffffffffffffff166107bf611081565b73ffffffffffffffffffffffffffffffffffffffff16148061083557506107e46118c5565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90613345565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6060600280546108a0906136a7565b80601f01602080910402602001604051908101604052809291908181526020018280546108cc906136a7565b80156109195780601f106108ee57610100808354040283529160200191610919565b820191906000526020600020905b8154815290600101906020018083116108fc57829003601f168201915b5050505050905090565b600061092e826118cd565b610964576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109aa82610d96565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a12576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a316118c5565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a635750610a6181610a5c6118c5565b61166a565b155b15610a9a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa583838361191b565b505050565b6000610ab46119cd565b6001546000540303905090565b610acc8383836119d2565b505050565b611a0a81565b610adf6118c5565b73ffffffffffffffffffffffffffffffffffffffff16610afd611081565b73ffffffffffffffffffffffffffffffffffffffff161480610b735750610b226118c5565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990613345565b60405180910390fd5b60004790506000610bc16118c5565b73ffffffffffffffffffffffffffffffffffffffff1682604051610be4906131cc565b60006040518083038185875af1925050503d8060008114610c21576040519150601f19603f3d011682016040523d82523d6000602084013e610c26565b606091505b5050905080610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190613385565b60405180910390fd5b5050565b610c898383836040518060200160405280600081525061150a565b505050565b610c966118c5565b73ffffffffffffffffffffffffffffffffffffffff16610cb4611081565b73ffffffffffffffffffffffffffffffffffffffff161480610d2a5750610cd96118c5565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613345565b60405180910390fd5b80600a9080519060200190610d7f92919061299a565b5050565b600b60009054906101000a900460ff1681565b6000610da182611ec3565b600001519050919050565b610db46118c5565b73ffffffffffffffffffffffffffffffffffffffff16610dd2611081565b73ffffffffffffffffffffffffffffffffffffffff161480610e485750610df76118c5565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613345565b60405180910390fd5b610e99610e926118c5565b6001612152565b565b600a8054610ea8906136a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed4906136a7565b8015610f215780601f10610ef657610100808354040283529160200191610f21565b820191906000526020600020905b815481529060010190602001808311610f0457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f91576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6110016118c5565b73ffffffffffffffffffffffffffffffffffffffff1661101f611081565b73ffffffffffffffffffffffffffffffffffffffff1614611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90613345565b60405180910390fd5b61107f6000612170565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546110ba906136a7565b80601f01602080910402602001604051908101604052809291908181526020018280546110e6906136a7565b80156111335780601f1061110857610100808354040283529160200191611133565b820191906000526020600020905b81548152906001019060200180831161111657829003601f168201915b5050505050905090565b661550f7dca7000081565b60006111526118c5565b9050600b60009054906101000a900460ff16156111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90613285565b60405180910390fd5b816111ad610aaa565b6111b791906134ca565b611a0a10156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290613305565b60405180910390fd5b6000821161123e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611235906132c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a3906133a5565b60405180910390fd5b61029a6112b7610aaa565b106112c65781601410156112cc565b81600110155b61130b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611302906132e5565b60405180910390fd5b61029a611316610aaa565b106113355734661550f7dca700008361132f9190613551565b14611345565b346000836113439190613551565b145b611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90613365565b60405180910390fd5b61138e8183612152565b5050565b61139a6118c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ff576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061140c6118c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114b96118c5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114fe9190613248565b60405180910390a35050565b6115158484846119d2565b6115348373ffffffffffffffffffffffffffffffffffffffff16612236565b8015611549575061154784848484612259565b155b15611580576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040518060200160405280600081525081565b60606115a4826118cd565b6115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90613325565b60405180910390fd5b6000600a80546115f2906136a7565b90501161160e576040518060200160405280600081525061164b565b600a611619836123b9565b6040518060200160405280600081525060405160200161163b9392919061319b565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016116d491906131e1565b60206040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117249190612e28565b73ffffffffffffffffffffffffffffffffffffffff16141561174a576001915050611758565b611754848461251a565b9150505b92915050565b6117666118c5565b73ffffffffffffffffffffffffffffffffffffffff16611784611081565b73ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190613345565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561184a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611841906132a5565b60405180910390fd5b61185381612170565b50565b601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000816118d86119cd565b111580156118e7575060005482105b8015611914575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006119dd82611ec3565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611a046118c5565b73ffffffffffffffffffffffffffffffffffffffff161480611a375750611a368260000151611a316118c5565b61166a565b5b80611a7c5750611a456118c5565b73ffffffffffffffffffffffffffffffffffffffff16611a6484610923565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611ab5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611b1e576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b85576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9285858560016125ae565b611ba2600084846000015161191b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e5357600054811015611e525782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ebc85858560016125b4565b5050505050565b611ecb612a20565b600082905080611ed96119cd565b11158015611ee8575060005481105b1561211b576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161211957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611ffd57809250505061214d565b5b60011561211857818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461211357809250505061214d565b611ffe565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b61216c8282604051806020016040528060008152506125ba565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261227f6118c5565b8786866040518563ffffffff1660e01b81526004016122a194939291906131fc565b602060405180830381600087803b1580156122bb57600080fd5b505af19250505080156122ec57506040513d601f19601f820116820180604052508101906122e99190612dfb565b60015b612366573d806000811461231c576040519150601f19603f3d011682016040523d82523d6000602084013e612321565b606091505b5060008151141561235e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612401576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612515565b600082905060005b6000821461243357808061241c9061370a565b915050600a8261242c9190613520565b9150612409565b60008167ffffffffffffffff81111561244f5761244e613840565b5b6040519080825280601f01601f1916602001820160405280156124815781602001600182028036833780820191505090505b5090505b6000851461250e5760018261249a91906135ab565b9150600a856124a99190613753565b60306124b591906134ca565b60f81b8183815181106124cb576124ca613811565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125079190613520565b9450612485565b8093505050505b919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b6125c783838360016125cc565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612639576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612674576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268160008683876125ae565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561284b575061284a8773ffffffffffffffffffffffffffffffffffffffff16612236565b5b15612911575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128c06000888480600101955088612259565b6128f6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561285157826000541461290c57600080fd5b61297d565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612912575b81600081905550505061299360008683876125b4565b5050505050565b8280546129a6906136a7565b90600052602060002090601f0160209004810192826129c85760008555612a0f565b82601f106129e157805160ff1916838001178555612a0f565b82800160010185558215612a0f579182015b82811115612a0e5782518255916020019190600101906129f3565b5b509050612a1c9190612a63565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612a7c576000816000905550600101612a64565b5090565b6000612a93612a8e84613405565b6133e0565b905082815260208101848484011115612aaf57612aae613874565b5b612aba848285613665565b509392505050565b6000612ad5612ad084613436565b6133e0565b905082815260208101848484011115612af157612af0613874565b5b612afc848285613665565b509392505050565b600081359050612b1381613a57565b92915050565b600081359050612b2881613a6e565b92915050565b600081359050612b3d81613a85565b92915050565b600081519050612b5281613a85565b92915050565b600082601f830112612b6d57612b6c61386f565b5b8135612b7d848260208601612a80565b91505092915050565b600081519050612b9581613a9c565b92915050565b600082601f830112612bb057612baf61386f565b5b8135612bc0848260208601612ac2565b91505092915050565b600081359050612bd881613ab3565b92915050565b600060208284031215612bf457612bf361387e565b5b6000612c0284828501612b04565b91505092915050565b60008060408385031215612c2257612c2161387e565b5b6000612c3085828601612b04565b9250506020612c4185828601612b04565b9150509250929050565b600080600060608486031215612c6457612c6361387e565b5b6000612c7286828701612b04565b9350506020612c8386828701612b04565b9250506040612c9486828701612bc9565b9150509250925092565b60008060008060808587031215612cb857612cb761387e565b5b6000612cc687828801612b04565b9450506020612cd787828801612b04565b9350506040612ce887828801612bc9565b925050606085013567ffffffffffffffff811115612d0957612d08613879565b5b612d1587828801612b58565b91505092959194509250565b60008060408385031215612d3857612d3761387e565b5b6000612d4685828601612b04565b9250506020612d5785828601612b19565b9150509250929050565b60008060408385031215612d7857612d7761387e565b5b6000612d8685828601612b04565b9250506020612d9785828601612bc9565b9150509250929050565b600060208284031215612db757612db661387e565b5b6000612dc584828501612b19565b91505092915050565b600060208284031215612de457612de361387e565b5b6000612df284828501612b2e565b91505092915050565b600060208284031215612e1157612e1061387e565b5b6000612e1f84828501612b43565b91505092915050565b600060208284031215612e3e57612e3d61387e565b5b6000612e4c84828501612b86565b91505092915050565b600060208284031215612e6b57612e6a61387e565b5b600082013567ffffffffffffffff811115612e8957612e88613879565b5b612e9584828501612b9b565b91505092915050565b600060208284031215612eb457612eb361387e565b5b6000612ec284828501612bc9565b91505092915050565b612ed4816135df565b82525050565b612ee3816135f1565b82525050565b6000612ef48261347c565b612efe8185613492565b9350612f0e818560208601613674565b612f1781613883565b840191505092915050565b6000612f2d82613487565b612f3781856134ae565b9350612f47818560208601613674565b612f5081613883565b840191505092915050565b6000612f6682613487565b612f7081856134bf565b9350612f80818560208601613674565b80840191505092915050565b60008154612f99816136a7565b612fa381866134bf565b94506001821660008114612fbe5760018114612fcf57613002565b60ff19831686528186019350613002565b612fd885613467565b60005b83811015612ffa57815481890152600182019150602081019050612fdb565b838801955050505b50505092915050565b60006130186006836134ae565b915061302382613894565b602082019050919050565b600061303b6026836134ae565b9150613046826138bd565b604082019050919050565b600061305e600a836134ae565b91506130698261390c565b602082019050919050565b60006130816016836134ae565b915061308c82613935565b602082019050919050565b60006130a46012836134ae565b91506130af8261395e565b602082019050919050565b60006130c76015836134ae565b91506130d282613987565b602082019050919050565b60006130ea6020836134ae565b91506130f5826139b0565b602082019050919050565b600061310d6016836134ae565b9150613118826139d9565b602082019050919050565b60006131306000836134a3565b915061313b82613a02565b600082019050919050565b6000613153600e836134ae565b915061315e82613a05565b602082019050919050565b6000613176600c836134ae565b915061318182613a2e565b602082019050919050565b6131958161365b565b82525050565b60006131a78286612f8c565b91506131b38285612f5b565b91506131bf8284612f5b565b9150819050949350505050565b60006131d782613123565b9150819050919050565b60006020820190506131f66000830184612ecb565b92915050565b60006080820190506132116000830187612ecb565b61321e6020830186612ecb565b61322b604083018561318c565b818103606083015261323d8184612ee9565b905095945050505050565b600060208201905061325d6000830184612eda565b92915050565b6000602082019050818103600083015261327d8184612f22565b905092915050565b6000602082019050818103600083015261329e8161300b565b9050919050565b600060208201905081810360008301526132be8161302e565b9050919050565b600060208201905081810360008301526132de81613051565b9050919050565b600060208201905081810360008301526132fe81613074565b9050919050565b6000602082019050818103600083015261331e81613097565b9050919050565b6000602082019050818103600083015261333e816130ba565b9050919050565b6000602082019050818103600083015261335e816130dd565b9050919050565b6000602082019050818103600083015261337e81613100565b9050919050565b6000602082019050818103600083015261339e81613146565b9050919050565b600060208201905081810360008301526133be81613169565b9050919050565b60006020820190506133da600083018461318c565b92915050565b60006133ea6133fb565b90506133f682826136d9565b919050565b6000604051905090565b600067ffffffffffffffff8211156134205761341f613840565b5b61342982613883565b9050602081019050919050565b600067ffffffffffffffff82111561345157613450613840565b5b61345a82613883565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006134d58261365b565b91506134e08361365b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561351557613514613784565b5b828201905092915050565b600061352b8261365b565b91506135368361365b565b925082613546576135456137b3565b5b828204905092915050565b600061355c8261365b565b91506135678361365b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135a05761359f613784565b5b828202905092915050565b60006135b68261365b565b91506135c18361365b565b9250828210156135d4576135d3613784565b5b828203905092915050565b60006135ea8261363b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613634826135df565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613692578082015181840152602081019050613677565b838111156136a1576000848401525b50505050565b600060028204905060018216806136bf57607f821691505b602082108114156136d3576136d26137e2565b5b50919050565b6136e282613883565b810181811067ffffffffffffffff8211171561370157613700613840565b5b80604052505050565b60006137158261365b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561374857613747613784565b5b600182019050919050565b600061375e8261365b565b91506137698361365b565b925082613779576137786137b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b7f457863657373206d617820706572207061696420747800000000000000000000600082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b50565b7f4661696c656420746f2073656e64000000000000000000000000000000000000600082015250565b7f4e6f20636f6e7472616374730000000000000000000000000000000000000000600082015250565b613a60816135df565b8114613a6b57600080fd5b50565b613a77816135f1565b8114613a8257600080fd5b50565b613a8e816135fd565b8114613a9957600080fd5b50565b613aa581613629565b8114613ab057600080fd5b50565b613abc8161365b565b8114613ac757600080fd5b5056fea26469706673582212207366d66ec094e3e9f4c41feef1a1dba5c9e115c5c19af0ef44634636c08141ae64736f6c63430008070033
Deployed Bytecode Sourcemap
46015:2441:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28548:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47894:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31933:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33436:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32999:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27797:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34293:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46302:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47586:209;;;;;;;;;;;;;:::i;:::-;;34534:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47983:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46402:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31742:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47803:83;;;;;;;;;;;;;:::i;:::-;;46076:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28917:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2747:103;;;;;;;;;;;;;:::i;:::-;;2096:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32102:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46350:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46504:586;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33712:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34790:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46110:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48091:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46158:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47133:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3005:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46256:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28548:305;28650:4;28702:25;28687:40;;;:11;:40;;;;:105;;;;28759:33;28744:48;;;:11;:48;;;;28687:105;:158;;;;28809:36;28833:11;28809:23;:36::i;:::-;28687:158;28667:178;;28548:305;;;:::o;47894:81::-;25029:12;:10;:12::i;:::-;25018:23;;:7;:5;:7::i;:::-;:23;;;:49;;;;25055:12;:10;:12::i;:::-;25045:22;;:6;;;;;;;;;;;:22;;;25018:49;25010:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;47961:6:::1;47952;;:15;;;;;;;;;;;;;;;;;;47894:81:::0;:::o;31933:100::-;31987:13;32020:5;32013:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31933:100;:::o;33436:204::-;33504:7;33529:16;33537:7;33529;:16::i;:::-;33524:64;;33554:34;;;;;;;;;;;;;;33524:64;33608:15;:24;33624:7;33608:24;;;;;;;;;;;;;;;;;;;;;33601:31;;33436:204;;;:::o;32999:371::-;33072:13;33088:24;33104:7;33088:15;:24::i;:::-;33072:40;;33133:5;33127:11;;:2;:11;;;33123:48;;;33147:24;;;;;;;;;;;;;;33123:48;33204:5;33188:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33214:37;33231:5;33238:12;:10;:12::i;:::-;33214:16;:37::i;:::-;33213:38;33188:63;33184:138;;;33275:35;;;;;;;;;;;;;;33184:138;33334:28;33343:2;33347:7;33356:5;33334:8;:28::i;:::-;33061:309;32999:371;;:::o;27797:303::-;27841:7;28066:15;:13;:15::i;:::-;28051:12;;28035:13;;:28;:46;28028:53;;27797:303;:::o;34293:170::-;34427:28;34437:4;34443:2;34447:7;34427:9;:28::i;:::-;34293:170;;;:::o;46302:41::-;46339:4;46302:41;:::o;47586:209::-;25029:12;:10;:12::i;:::-;25018:23;;:7;:5;:7::i;:::-;:23;;;:49;;;;25055:12;:10;:12::i;:::-;25045:22;;:6;;;;;;;;;;;:22;;;25018:49;25010:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;47636:15:::1;47654:21;47636:39;;47687:12;47705;:10;:12::i;:::-;:17;;47730:7;47705:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47686:56;;;47761:7;47753:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;47625:170;;47586:209::o:0;34534:185::-;34672:39;34689:4;34695:2;34699:7;34672:39;;;;;;;;;;;;:16;:39::i;:::-;34534:185;;;:::o;47983:100::-;25029:12;:10;:12::i;:::-;25018:23;;:7;:5;:7::i;:::-;:23;;;:49;;;;25055:12;:10;:12::i;:::-;25045:22;;:6;;;;;;;;;;;:22;;;25018:49;25010:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;48067:8:::1;48057:7;:18;;;;;;;;;;;;:::i;:::-;;47983:100:::0;:::o;46402:26::-;;;;;;;;;;;;;:::o;31742:124::-;31806:7;31833:20;31845:7;31833:11;:20::i;:::-;:25;;;31826:32;;31742:124;;;:::o;47803:83::-;25029:12;:10;:12::i;:::-;25018:23;;:7;:5;:7::i;:::-;:23;;;:49;;;;25055:12;:10;:12::i;:::-;25045:22;;:6;;;;;;;;;;;:22;;;25018:49;25010:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;47852:26:::1;47862:12;:10;:12::i;:::-;47876:1;47852:9;:26::i;:::-;47803:83::o:0;46076:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28917:206::-;28981:7;29022:1;29005:19;;:5;:19;;;29001:60;;;29033:28;;;;;;;;;;;;;;29001:60;29087:12;:19;29100:5;29087:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29079:36;;29072:43;;28917:206;;;:::o;2747:103::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2812:30:::1;2839:1;2812:18;:30::i;:::-;2747:103::o:0;2096:87::-;2142:7;2169:6;;;;;;;;;;;2162:13;;2096:87;:::o;32102:104::-;32158:13;32191:7;32184:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32102:104;:::o;46350:43::-;46382:11;46350:43;:::o;46504:586::-;46563:15;46581:12;:10;:12::i;:::-;46563:30;;46613:6;;;;;;;;;;;46612:7;46604:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;46679:7;46663:13;:11;:13::i;:::-;:23;;;;:::i;:::-;46339:4;46649:37;;46641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46738:1;46728:7;:11;46720:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;46786:7;46773:20;;:9;:20;;;46765:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;46845:3;46829:13;:11;:13::i;:::-;:19;:58;;46880:7;46293:2;46866:21;;46829:58;;;46856:7;46851:1;:12;;46829:58;46821:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;46954:3;46938:13;:11;:13::i;:::-;:19;:77;;47006:9;46382:11;46987:7;:15;;;;:::i;:::-;:28;46938:77;;;46975:9;46970:1;46960:7;:11;;;;:::i;:::-;:24;46938:77;46930:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;47055:27;47065:7;47074;47055:9;:27::i;:::-;46552:538;46504:586;:::o;33712:279::-;33815:12;:10;:12::i;:::-;33803:24;;:8;:24;;;33799:54;;;33836:17;;;;;;;;;;;;;;33799:54;33911:8;33866:18;:32;33885:12;:10;:12::i;:::-;33866:32;;;;;;;;;;;;;;;:42;33899:8;33866:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33964:8;33935:48;;33950:12;:10;:12::i;:::-;33935:48;;;33974:8;33935:48;;;;;;:::i;:::-;;;;;;;;33712:279;;:::o;34790:369::-;34957:28;34967:4;34973:2;34977:7;34957:9;:28::i;:::-;35000:15;:2;:13;;;:15::i;:::-;:76;;;;;35020:56;35051:4;35057:2;35061:7;35070:5;35020:30;:56::i;:::-;35019:57;35000:76;34996:156;;;35100:40;;;;;;;;;;;;;;34996:156;34790:369;;;;:::o;46110:41::-;;;;;;;;;;;;;;:::o;48091:362::-;48157:13;48191:17;48199:8;48191:7;:17::i;:::-;48183:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;48276:1;48258:7;48252:21;;;;;:::i;:::-;;;:25;:193;;;;;;;;;;;;;;;;;48334:7;48358:26;48375:8;48358:16;:26::i;:::-;48401:13;;;;;;;;;;;;48301:128;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48252:193;48245:200;;48091:362;;;:::o;46158:89::-;46205:42;46158:89;:::o;47133:445::-;47258:4;47343:27;46205:42;47343:65;;47464:8;47423:49;;47431:13;:21;;;47453:5;47431:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47423:49;;;47419:93;;;47496:4;47489:11;;;;;47419:93;47531:39;47554:5;47561:8;47531:22;:39::i;:::-;47524:46;;;47133:445;;;;;:::o;3005:201::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3114:1:::1;3094:22;;:8;:22;;;;3086:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3170:28;3189:8;3170:18;:28::i;:::-;3005:201:::0;:::o;46256:39::-;46293:2;46256:39;:::o;23650:157::-;23735:4;23774:25;23759:40;;;:11;:40;;;;23752:47;;23650:157;;;:::o;837:98::-;890:7;917:10;910:17;;837:98;:::o;35414:187::-;35471:4;35514:7;35495:15;:13;:15::i;:::-;:26;;:53;;;;;35535:13;;35525:7;:23;35495:53;:98;;;;;35566:11;:20;35578:7;35566:20;;;;;;;;;;;:27;;;;;;;;;;;;35565:28;35495:98;35488:105;;35414:187;;;:::o;43025:196::-;43167:2;43140:15;:24;43156:7;43140:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43205:7;43201:2;43185:28;;43194:5;43185:28;;;;;;;;;;;;43025:196;;;:::o;27521:92::-;27577:7;27521:92;:::o;38527:2112::-;38642:35;38680:20;38692:7;38680:11;:20::i;:::-;38642:58;;38713:22;38755:13;:18;;;38739:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;38790:50;38807:13;:18;;;38827:12;:10;:12::i;:::-;38790:16;:50::i;:::-;38739:101;:154;;;;38881:12;:10;:12::i;:::-;38857:36;;:20;38869:7;38857:11;:20::i;:::-;:36;;;38739:154;38713:181;;38912:17;38907:66;;38938:35;;;;;;;;;;;;;;38907:66;39010:4;38988:26;;:13;:18;;;:26;;;38984:67;;39023:28;;;;;;;;;;;;;;38984:67;39080:1;39066:16;;:2;:16;;;39062:52;;;39091:23;;;;;;;;;;;;;;39062:52;39127:43;39149:4;39155:2;39159:7;39168:1;39127:21;:43::i;:::-;39235:49;39252:1;39256:7;39265:13;:18;;;39235:8;:49::i;:::-;39610:1;39580:12;:18;39593:4;39580:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39654:1;39626:12;:16;39639:2;39626:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39700:2;39672:11;:20;39684:7;39672:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;39762:15;39717:11;:20;39729:7;39717:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40030:19;40062:1;40052:7;:11;40030:33;;40123:1;40082:43;;:11;:24;40094:11;40082:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40078:445;;;40307:13;;40293:11;:27;40289:219;;;40377:13;:18;;;40345:11;:24;40357:11;40345:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40460:13;:28;;;40418:11;:24;40430:11;40418:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40289:219;40078:445;39555:979;40570:7;40566:2;40551:27;;40560:4;40551:27;;;;;;;;;;;;40589:42;40610:4;40616:2;40620:7;40629:1;40589:20;:42::i;:::-;38631:2008;;38527:2112;;;:::o;30572:1108::-;30633:21;;:::i;:::-;30667:12;30682:7;30667:22;;30750:4;30731:15;:13;:15::i;:::-;:23;;:47;;;;;30765:13;;30758:4;:20;30731:47;30727:886;;;30799:31;30833:11;:17;30845:4;30833:17;;;;;;;;;;;30799:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30874:9;:16;;;30869:729;;30945:1;30919:28;;:9;:14;;;:28;;;30915:101;;30983:9;30976:16;;;;;;30915:101;31318:261;31325:4;31318:261;;;31358:6;;;;;;;;31403:11;:17;31415:4;31403:17;;;;;;;;;;;31391:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31477:1;31451:28;;:9;:14;;;:28;;;31447:109;;31519:9;31512:16;;;;;;31447:109;31318:261;;;30869:729;30780:833;30727:886;31641:31;;;;;;;;;;;;;;30572:1108;;;;:::o;35609:104::-;35678:27;35688:2;35692:8;35678:27;;;;;;;;;;;;:9;:27::i;:::-;35609:104;;:::o;3366:191::-;3440:16;3459:6;;;;;;;;;;;3440:25;;3485:8;3476:6;;:17;;;;;;;;;;;;;;;;;;3540:8;3509:40;;3530:8;3509:40;;;;;;;;;;;;3429:128;3366:191;:::o;13427:326::-;13487:4;13744:1;13722:7;:19;;;:23;13715:30;;13427:326;;;:::o;43713:667::-;43876:4;43913:2;43897:36;;;43934:12;:10;:12::i;:::-;43948:4;43954:7;43963:5;43897:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43893:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44148:1;44131:6;:13;:18;44127:235;;;44177:40;;;;;;;;;;;;;;44127:235;44320:6;44314:13;44305:6;44301:2;44297:15;44290:38;43893:480;44026:45;;;44016:55;;;:6;:55;;;;44009:62;;;43713:667;;;;;;:::o;21047:723::-;21103:13;21333:1;21324:5;:10;21320:53;;;21351:10;;;;;;;;;;;;;;;;;;;;;21320:53;21383:12;21398:5;21383:20;;21414:14;21439:78;21454:1;21446:4;:9;21439:78;;21472:8;;;;;:::i;:::-;;;;21503:2;21495:10;;;;;:::i;:::-;;;21439:78;;;21527:19;21559:6;21549:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21527:39;;21577:154;21593:1;21584:5;:10;21577:154;;21621:1;21611:11;;;;;:::i;:::-;;;21688:2;21680:5;:10;;;;:::i;:::-;21667:2;:24;;;;:::i;:::-;21654:39;;21637:6;21644;21637:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;21717:2;21708:11;;;;;:::i;:::-;;;21577:154;;;21755:6;21741:21;;;;;21047:723;;;;:::o;34062:164::-;34159:4;34183:18;:25;34202:5;34183:25;;;;;;;;;;;;;;;:35;34209:8;34183:35;;;;;;;;;;;;;;;;;;;;;;;;;34176:42;;34062:164;;;;:::o;45028:159::-;;;;;:::o;45846:158::-;;;;;:::o;36076:163::-;36199:32;36205:2;36209:8;36219:5;36226:4;36199:5;:32::i;:::-;36076:163;;;:::o;36498:1775::-;36637:20;36660:13;;36637:36;;36702:1;36688:16;;:2;:16;;;36684:48;;;36713:19;;;;;;;;;;;;;;36684:48;36759:1;36747:8;:13;36743:44;;;36769:18;;;;;;;;;;;;;;36743:44;36800:61;36830:1;36834:2;36838:12;36852:8;36800:21;:61::i;:::-;37173:8;37138:12;:16;37151:2;37138:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37237:8;37197:12;:16;37210:2;37197:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37296:2;37263:11;:25;37275:12;37263:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37363:15;37313:11;:25;37325:12;37313:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37396:20;37419:12;37396:35;;37446:11;37475:8;37460:12;:23;37446:37;;37504:4;:23;;;;;37512:15;:2;:13;;;:15::i;:::-;37504:23;37500:641;;;37548:314;37604:12;37600:2;37579:38;;37596:1;37579:38;;;;;;;;;;;;37645:69;37684:1;37688:2;37692:14;;;;;;37708:5;37645:30;:69::i;:::-;37640:174;;37750:40;;;;;;;;;;;;;;37640:174;37857:3;37841:12;:19;;37548:314;;37943:12;37926:13;;:29;37922:43;;37957:8;;;37922:43;37500:641;;;38006:120;38062:14;;;;;;38058:2;38037:40;;38054:1;38037:40;;;;;;;;;;;;38121:3;38105:12;:19;;38006:120;;37500:641;38171:12;38155:13;:28;;;;37113:1082;;38205:60;38234:1;38238:2;38242:12;38256:8;38205:20;:60::i;:::-;36626:1647;36498:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1772:201::-;1858:5;1889:6;1883:13;1874:22;;1905:62;1961:5;1905:62;:::i;:::-;1772:201;;;;:::o;1993:340::-;2049:5;2098:3;2091:4;2083:6;2079:17;2075:27;2065:122;;2106:79;;:::i;:::-;2065:122;2223:6;2210:20;2248:79;2323:3;2315:6;2308:4;2300:6;2296:17;2248:79;:::i;:::-;2239:88;;2055:278;1993:340;;;;:::o;2339:139::-;2385:5;2423:6;2410:20;2401:29;;2439:33;2466:5;2439:33;:::i;:::-;2339:139;;;;:::o;2484:329::-;2543:6;2592:2;2580:9;2571:7;2567:23;2563:32;2560:119;;;2598:79;;:::i;:::-;2560:119;2718:1;2743:53;2788:7;2779:6;2768:9;2764:22;2743:53;:::i;:::-;2733:63;;2689:117;2484:329;;;;:::o;2819:474::-;2887:6;2895;2944:2;2932:9;2923:7;2919:23;2915:32;2912:119;;;2950:79;;:::i;:::-;2912:119;3070:1;3095:53;3140:7;3131:6;3120:9;3116:22;3095:53;:::i;:::-;3085:63;;3041:117;3197:2;3223:53;3268:7;3259:6;3248:9;3244:22;3223:53;:::i;:::-;3213:63;;3168:118;2819:474;;;;;:::o;3299:619::-;3376:6;3384;3392;3441:2;3429:9;3420:7;3416:23;3412:32;3409:119;;;3447:79;;:::i;:::-;3409:119;3567:1;3592:53;3637:7;3628:6;3617:9;3613:22;3592:53;:::i;:::-;3582:63;;3538:117;3694:2;3720:53;3765:7;3756:6;3745:9;3741:22;3720:53;:::i;:::-;3710:63;;3665:118;3822:2;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3793:118;3299:619;;;;;:::o;3924:943::-;4019:6;4027;4035;4043;4092:3;4080:9;4071:7;4067:23;4063:33;4060:120;;;4099:79;;:::i;:::-;4060:120;4219:1;4244:53;4289:7;4280:6;4269:9;4265:22;4244:53;:::i;:::-;4234:63;;4190:117;4346:2;4372:53;4417:7;4408:6;4397:9;4393:22;4372:53;:::i;:::-;4362:63;;4317:118;4474:2;4500:53;4545:7;4536:6;4525:9;4521:22;4500:53;:::i;:::-;4490:63;;4445:118;4630:2;4619:9;4615:18;4602:32;4661:18;4653:6;4650:30;4647:117;;;4683:79;;:::i;:::-;4647:117;4788:62;4842:7;4833:6;4822:9;4818:22;4788:62;:::i;:::-;4778:72;;4573:287;3924:943;;;;;;;:::o;4873:468::-;4938:6;4946;4995:2;4983:9;4974:7;4970:23;4966:32;4963:119;;;5001:79;;:::i;:::-;4963:119;5121:1;5146:53;5191:7;5182:6;5171:9;5167:22;5146:53;:::i;:::-;5136:63;;5092:117;5248:2;5274:50;5316:7;5307:6;5296:9;5292:22;5274:50;:::i;:::-;5264:60;;5219:115;4873:468;;;;;:::o;5347:474::-;5415:6;5423;5472:2;5460:9;5451:7;5447:23;5443:32;5440:119;;;5478:79;;:::i;:::-;5440:119;5598:1;5623:53;5668:7;5659:6;5648:9;5644:22;5623:53;:::i;:::-;5613:63;;5569:117;5725:2;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5696:118;5347:474;;;;;:::o;5827:323::-;5883:6;5932:2;5920:9;5911:7;5907:23;5903:32;5900:119;;;5938:79;;:::i;:::-;5900:119;6058:1;6083:50;6125:7;6116:6;6105:9;6101:22;6083:50;:::i;:::-;6073:60;;6029:114;5827:323;;;;:::o;6156:327::-;6214:6;6263:2;6251:9;6242:7;6238:23;6234:32;6231:119;;;6269:79;;:::i;:::-;6231:119;6389:1;6414:52;6458:7;6449:6;6438:9;6434:22;6414:52;:::i;:::-;6404:62;;6360:116;6156:327;;;;:::o;6489:349::-;6558:6;6607:2;6595:9;6586:7;6582:23;6578:32;6575:119;;;6613:79;;:::i;:::-;6575:119;6733:1;6758:63;6813:7;6804:6;6793:9;6789:22;6758:63;:::i;:::-;6748:73;;6704:127;6489:349;;;;:::o;6844:409::-;6943:6;6992:2;6980:9;6971:7;6967:23;6963:32;6960:119;;;6998:79;;:::i;:::-;6960:119;7118:1;7143:93;7228:7;7219:6;7208:9;7204:22;7143:93;:::i;:::-;7133:103;;7089:157;6844:409;;;;:::o;7259:509::-;7328:6;7377:2;7365:9;7356:7;7352:23;7348:32;7345:119;;;7383:79;;:::i;:::-;7345:119;7531:1;7520:9;7516:17;7503:31;7561:18;7553:6;7550:30;7547:117;;;7583:79;;:::i;:::-;7547:117;7688:63;7743:7;7734:6;7723:9;7719:22;7688:63;:::i;:::-;7678:73;;7474:287;7259:509;;;;:::o;7774:329::-;7833:6;7882:2;7870:9;7861:7;7857:23;7853:32;7850:119;;;7888:79;;:::i;:::-;7850:119;8008:1;8033:53;8078:7;8069:6;8058:9;8054:22;8033:53;:::i;:::-;8023:63;;7979:117;7774:329;;;;:::o;8109:118::-;8196:24;8214:5;8196:24;:::i;:::-;8191:3;8184:37;8109:118;;:::o;8233:109::-;8314:21;8329:5;8314:21;:::i;:::-;8309:3;8302:34;8233:109;;:::o;8348:360::-;8434:3;8462:38;8494:5;8462:38;:::i;:::-;8516:70;8579:6;8574:3;8516:70;:::i;:::-;8509:77;;8595:52;8640:6;8635:3;8628:4;8621:5;8617:16;8595:52;:::i;:::-;8672:29;8694:6;8672:29;:::i;:::-;8667:3;8663:39;8656:46;;8438:270;8348:360;;;;:::o;8714:364::-;8802:3;8830:39;8863:5;8830:39;:::i;:::-;8885:71;8949:6;8944:3;8885:71;:::i;:::-;8878:78;;8965:52;9010:6;9005:3;8998:4;8991:5;8987:16;8965:52;:::i;:::-;9042:29;9064:6;9042:29;:::i;:::-;9037:3;9033:39;9026:46;;8806:272;8714:364;;;;:::o;9084:377::-;9190:3;9218:39;9251:5;9218:39;:::i;:::-;9273:89;9355:6;9350:3;9273:89;:::i;:::-;9266:96;;9371:52;9416:6;9411:3;9404:4;9397:5;9393:16;9371:52;:::i;:::-;9448:6;9443:3;9439:16;9432:23;;9194:267;9084:377;;;;:::o;9491:845::-;9594:3;9631:5;9625:12;9660:36;9686:9;9660:36;:::i;:::-;9712:89;9794:6;9789:3;9712:89;:::i;:::-;9705:96;;9832:1;9821:9;9817:17;9848:1;9843:137;;;;9994:1;9989:341;;;;9810:520;;9843:137;9927:4;9923:9;9912;9908:25;9903:3;9896:38;9963:6;9958:3;9954:16;9947:23;;9843:137;;9989:341;10056:38;10088:5;10056:38;:::i;:::-;10116:1;10130:154;10144:6;10141:1;10138:13;10130:154;;;10218:7;10212:14;10208:1;10203:3;10199:11;10192:35;10268:1;10259:7;10255:15;10244:26;;10166:4;10163:1;10159:12;10154:17;;10130:154;;;10313:6;10308:3;10304:16;10297:23;;9996:334;;9810:520;;9598:738;;9491:845;;;;:::o;10342:365::-;10484:3;10505:66;10569:1;10564:3;10505:66;:::i;:::-;10498:73;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10342:365;;;:::o;10713:366::-;10855:3;10876:67;10940:2;10935:3;10876:67;:::i;:::-;10869:74;;10952:93;11041:3;10952:93;:::i;:::-;11070:2;11065:3;11061:12;11054:19;;10713:366;;;:::o;11085:::-;11227:3;11248:67;11312:2;11307:3;11248:67;:::i;:::-;11241:74;;11324:93;11413:3;11324:93;:::i;:::-;11442:2;11437:3;11433:12;11426:19;;11085:366;;;:::o;11457:::-;11599:3;11620:67;11684:2;11679:3;11620:67;:::i;:::-;11613:74;;11696:93;11785:3;11696:93;:::i;:::-;11814:2;11809:3;11805:12;11798:19;;11457:366;;;:::o;11829:::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:398::-;13476:3;13497:83;13578:1;13573:3;13497:83;:::i;:::-;13490:90;;13589:93;13678:3;13589:93;:::i;:::-;13707:1;13702:3;13698:11;13691:18;;13317:398;;;:::o;13721:366::-;13863:3;13884:67;13948:2;13943:3;13884:67;:::i;:::-;13877:74;;13960:93;14049:3;13960:93;:::i;:::-;14078:2;14073:3;14069:12;14062:19;;13721:366;;;:::o;14093:::-;14235:3;14256:67;14320:2;14315:3;14256:67;:::i;:::-;14249:74;;14332:93;14421:3;14332:93;:::i;:::-;14450:2;14445:3;14441:12;14434:19;;14093:366;;;:::o;14465:118::-;14552:24;14570:5;14552:24;:::i;:::-;14547:3;14540:37;14465:118;;:::o;14589:589::-;14814:3;14836:92;14924:3;14915:6;14836:92;:::i;:::-;14829:99;;14945:95;15036:3;15027:6;14945:95;:::i;:::-;14938:102;;15057:95;15148:3;15139:6;15057:95;:::i;:::-;15050:102;;15169:3;15162:10;;14589:589;;;;;;:::o;15184:379::-;15368:3;15390:147;15533:3;15390:147;:::i;:::-;15383:154;;15554:3;15547:10;;15184:379;;;:::o;15569:222::-;15662:4;15700:2;15689:9;15685:18;15677:26;;15713:71;15781:1;15770:9;15766:17;15757:6;15713:71;:::i;:::-;15569:222;;;;:::o;15797:640::-;15992:4;16030:3;16019:9;16015:19;16007:27;;16044:71;16112:1;16101:9;16097:17;16088:6;16044:71;:::i;:::-;16125:72;16193:2;16182:9;16178:18;16169:6;16125:72;:::i;:::-;16207;16275:2;16264:9;16260:18;16251:6;16207:72;:::i;:::-;16326:9;16320:4;16316:20;16311:2;16300:9;16296:18;16289:48;16354:76;16425:4;16416:6;16354:76;:::i;:::-;16346:84;;15797:640;;;;;;;:::o;16443:210::-;16530:4;16568:2;16557:9;16553:18;16545:26;;16581:65;16643:1;16632:9;16628:17;16619:6;16581:65;:::i;:::-;16443:210;;;;:::o;16659:313::-;16772:4;16810:2;16799:9;16795:18;16787:26;;16859:9;16853:4;16849:20;16845:1;16834:9;16830:17;16823:47;16887:78;16960:4;16951:6;16887:78;:::i;:::-;16879:86;;16659:313;;;;:::o;16978:419::-;17144:4;17182:2;17171:9;17167:18;17159:26;;17231:9;17225:4;17221:20;17217:1;17206:9;17202:17;17195:47;17259:131;17385:4;17259:131;:::i;:::-;17251:139;;16978:419;;;:::o;17403:::-;17569:4;17607:2;17596:9;17592:18;17584:26;;17656:9;17650:4;17646:20;17642:1;17631:9;17627:17;17620:47;17684:131;17810:4;17684:131;:::i;:::-;17676:139;;17403:419;;;:::o;17828:::-;17994:4;18032:2;18021:9;18017:18;18009:26;;18081:9;18075:4;18071:20;18067:1;18056:9;18052:17;18045:47;18109:131;18235:4;18109:131;:::i;:::-;18101:139;;17828:419;;;:::o;18253:::-;18419:4;18457:2;18446:9;18442:18;18434:26;;18506:9;18500:4;18496:20;18492:1;18481:9;18477:17;18470:47;18534:131;18660:4;18534:131;:::i;:::-;18526:139;;18253:419;;;:::o;18678:::-;18844:4;18882:2;18871:9;18867:18;18859:26;;18931:9;18925:4;18921:20;18917:1;18906:9;18902:17;18895:47;18959:131;19085:4;18959:131;:::i;:::-;18951:139;;18678:419;;;:::o;19103:::-;19269:4;19307:2;19296:9;19292:18;19284:26;;19356:9;19350:4;19346:20;19342:1;19331:9;19327:17;19320:47;19384:131;19510:4;19384:131;:::i;:::-;19376:139;;19103:419;;;:::o;19528:::-;19694:4;19732:2;19721:9;19717:18;19709:26;;19781:9;19775:4;19771:20;19767:1;19756:9;19752:17;19745:47;19809:131;19935:4;19809:131;:::i;:::-;19801:139;;19528:419;;;:::o;19953:::-;20119:4;20157:2;20146:9;20142:18;20134:26;;20206:9;20200:4;20196:20;20192:1;20181:9;20177:17;20170:47;20234:131;20360:4;20234:131;:::i;:::-;20226:139;;19953:419;;;:::o;20378:::-;20544:4;20582:2;20571:9;20567:18;20559:26;;20631:9;20625:4;20621:20;20617:1;20606:9;20602:17;20595:47;20659:131;20785:4;20659:131;:::i;:::-;20651:139;;20378:419;;;:::o;20803:::-;20969:4;21007:2;20996:9;20992:18;20984:26;;21056:9;21050:4;21046:20;21042:1;21031:9;21027:17;21020:47;21084:131;21210:4;21084:131;:::i;:::-;21076:139;;20803:419;;;:::o;21228:222::-;21321:4;21359:2;21348:9;21344:18;21336:26;;21372:71;21440:1;21429:9;21425:17;21416:6;21372:71;:::i;:::-;21228:222;;;;:::o;21456:129::-;21490:6;21517:20;;:::i;:::-;21507:30;;21546:33;21574:4;21566:6;21546:33;:::i;:::-;21456:129;;;:::o;21591:75::-;21624:6;21657:2;21651:9;21641:19;;21591:75;:::o;21672:307::-;21733:4;21823:18;21815:6;21812:30;21809:56;;;21845:18;;:::i;:::-;21809:56;21883:29;21905:6;21883:29;:::i;:::-;21875:37;;21967:4;21961;21957:15;21949:23;;21672:307;;;:::o;21985:308::-;22047:4;22137:18;22129:6;22126:30;22123:56;;;22159:18;;:::i;:::-;22123:56;22197:29;22219:6;22197:29;:::i;:::-;22189:37;;22281:4;22275;22271:15;22263:23;;21985:308;;;:::o;22299:141::-;22348:4;22371:3;22363:11;;22394:3;22391:1;22384:14;22428:4;22425:1;22415:18;22407:26;;22299:141;;;:::o;22446:98::-;22497:6;22531:5;22525:12;22515:22;;22446:98;;;:::o;22550:99::-;22602:6;22636:5;22630:12;22620:22;;22550:99;;;:::o;22655:168::-;22738:11;22772:6;22767:3;22760:19;22812:4;22807:3;22803:14;22788:29;;22655:168;;;;:::o;22829:147::-;22930:11;22967:3;22952:18;;22829:147;;;;:::o;22982:169::-;23066:11;23100:6;23095:3;23088:19;23140:4;23135:3;23131:14;23116:29;;22982:169;;;;:::o;23157:148::-;23259:11;23296:3;23281:18;;23157:148;;;;:::o;23311:305::-;23351:3;23370:20;23388:1;23370:20;:::i;:::-;23365:25;;23404:20;23422:1;23404:20;:::i;:::-;23399:25;;23558:1;23490:66;23486:74;23483:1;23480:81;23477:107;;;23564:18;;:::i;:::-;23477:107;23608:1;23605;23601:9;23594:16;;23311:305;;;;:::o;23622:185::-;23662:1;23679:20;23697:1;23679:20;:::i;:::-;23674:25;;23713:20;23731:1;23713:20;:::i;:::-;23708:25;;23752:1;23742:35;;23757:18;;:::i;:::-;23742:35;23799:1;23796;23792:9;23787:14;;23622:185;;;;:::o;23813:348::-;23853:7;23876:20;23894:1;23876:20;:::i;:::-;23871:25;;23910:20;23928:1;23910:20;:::i;:::-;23905:25;;24098:1;24030:66;24026:74;24023:1;24020:81;24015:1;24008:9;24001:17;23997:105;23994:131;;;24105:18;;:::i;:::-;23994:131;24153:1;24150;24146:9;24135:20;;23813:348;;;;:::o;24167:191::-;24207:4;24227:20;24245:1;24227:20;:::i;:::-;24222:25;;24261:20;24279:1;24261:20;:::i;:::-;24256:25;;24300:1;24297;24294:8;24291:34;;;24305:18;;:::i;:::-;24291:34;24350:1;24347;24343:9;24335:17;;24167:191;;;;:::o;24364:96::-;24401:7;24430:24;24448:5;24430:24;:::i;:::-;24419:35;;24364:96;;;:::o;24466:90::-;24500:7;24543:5;24536:13;24529:21;24518:32;;24466:90;;;:::o;24562:149::-;24598:7;24638:66;24631:5;24627:78;24616:89;;24562:149;;;:::o;24717:125::-;24783:7;24812:24;24830:5;24812:24;:::i;:::-;24801:35;;24717:125;;;:::o;24848:126::-;24885:7;24925:42;24918:5;24914:54;24903:65;;24848:126;;;:::o;24980:77::-;25017:7;25046:5;25035:16;;24980:77;;;:::o;25063:154::-;25147:6;25142:3;25137;25124:30;25209:1;25200:6;25195:3;25191:16;25184:27;25063:154;;;:::o;25223:307::-;25291:1;25301:113;25315:6;25312:1;25309:13;25301:113;;;25400:1;25395:3;25391:11;25385:18;25381:1;25376:3;25372:11;25365:39;25337:2;25334:1;25330:10;25325:15;;25301:113;;;25432:6;25429:1;25426:13;25423:101;;;25512:1;25503:6;25498:3;25494:16;25487:27;25423:101;25272:258;25223:307;;;:::o;25536:320::-;25580:6;25617:1;25611:4;25607:12;25597:22;;25664:1;25658:4;25654:12;25685:18;25675:81;;25741:4;25733:6;25729:17;25719:27;;25675:81;25803:2;25795:6;25792:14;25772:18;25769:38;25766:84;;;25822:18;;:::i;:::-;25766:84;25587:269;25536:320;;;:::o;25862:281::-;25945:27;25967:4;25945:27;:::i;:::-;25937:6;25933:40;26075:6;26063:10;26060:22;26039:18;26027:10;26024:34;26021:62;26018:88;;;26086:18;;:::i;:::-;26018:88;26126:10;26122:2;26115:22;25905:238;25862:281;;:::o;26149:233::-;26188:3;26211:24;26229:5;26211:24;:::i;:::-;26202:33;;26257:66;26250:5;26247:77;26244:103;;;26327:18;;:::i;:::-;26244:103;26374:1;26367:5;26363:13;26356:20;;26149:233;;;:::o;26388:176::-;26420:1;26437:20;26455:1;26437:20;:::i;:::-;26432:25;;26471:20;26489:1;26471:20;:::i;:::-;26466:25;;26510:1;26500:35;;26515:18;;:::i;:::-;26500:35;26556:1;26553;26549:9;26544:14;;26388:176;;;;:::o;26570:180::-;26618:77;26615:1;26608:88;26715:4;26712:1;26705:15;26739:4;26736:1;26729:15;26756:180;26804:77;26801:1;26794:88;26901:4;26898:1;26891:15;26925:4;26922:1;26915:15;26942:180;26990:77;26987:1;26980:88;27087:4;27084:1;27077:15;27111:4;27108:1;27101:15;27128:180;27176:77;27173:1;27166:88;27273:4;27270:1;27263:15;27297:4;27294:1;27287:15;27314:180;27362:77;27359:1;27352:88;27459:4;27456:1;27449:15;27483:4;27480:1;27473:15;27500:117;27609:1;27606;27599:12;27623:117;27732:1;27729;27722:12;27746:117;27855:1;27852;27845:12;27869:117;27978:1;27975;27968:12;27992:102;28033:6;28084:2;28080:7;28075:2;28068:5;28064:14;28060:28;28050:38;;27992:102;;;:::o;28100:156::-;28240:8;28236:1;28228:6;28224:14;28217:32;28100:156;:::o;28262:225::-;28402:34;28398:1;28390:6;28386:14;28379:58;28471:8;28466:2;28458:6;28454:15;28447:33;28262:225;:::o;28493:160::-;28633:12;28629:1;28621:6;28617:14;28610:36;28493:160;:::o;28659:172::-;28799:24;28795:1;28787:6;28783:14;28776:48;28659:172;:::o;28837:168::-;28977:20;28973:1;28965:6;28961:14;28954:44;28837:168;:::o;29011:171::-;29151:23;29147:1;29139:6;29135:14;29128:47;29011:171;:::o;29188:182::-;29328:34;29324:1;29316:6;29312:14;29305:58;29188:182;:::o;29376:172::-;29516:24;29512:1;29504:6;29500:14;29493:48;29376:172;:::o;29554:114::-;;:::o;29674:164::-;29814:16;29810:1;29802:6;29798:14;29791:40;29674:164;:::o;29844:162::-;29984:14;29980:1;29972:6;29968:14;29961:38;29844:162;:::o;30012:122::-;30085:24;30103:5;30085:24;:::i;:::-;30078:5;30075:35;30065:63;;30124:1;30121;30114:12;30065:63;30012:122;:::o;30140:116::-;30210:21;30225:5;30210:21;:::i;:::-;30203:5;30200:32;30190:60;;30246:1;30243;30236:12;30190:60;30140:116;:::o;30262:120::-;30334:23;30351:5;30334:23;:::i;:::-;30327:5;30324:34;30314:62;;30372:1;30369;30362:12;30314:62;30262:120;:::o;30388:180::-;30490:53;30537:5;30490:53;:::i;:::-;30483:5;30480:64;30470:92;;30558:1;30555;30548:12;30470:92;30388:180;:::o;30574:122::-;30647:24;30665:5;30647:24;:::i;:::-;30640:5;30637:35;30627:63;;30686:1;30683;30676:12;30627:63;30574:122;:::o
Swarm Source
ipfs://7366d66ec094e3e9f4c41feef1a1dba5c9e115c5c19af0ef44634636c08141ae
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.