ERC-721
Overview
Max Total Supply
3,333 XBAYC
Holders
707
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
20 XBAYCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
XCOPYBAYC
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-24 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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 onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // 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); } } // 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); } // 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; } // 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); } // 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); } // OpenZeppelin Contracts v4.4.1 (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 tokenId); /** * @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); } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.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 contracts/ERC721A.sol // Creator: Chiru Labs /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex = 0; // 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_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert('ERC721A: unable to get token of owner by index'); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); for (uint256 curr = tokenId; ; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert('ERC721A: unable to determine the owner of token'); } /** * @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) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); 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); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: approve to caller'); _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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } /** * @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 tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), 'ERC721A: token already minted'); require(quantity > 0, 'ERC721A: quantity must be greater 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); updatedIndex++; } 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 || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _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. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; } _ownerships[tokenId] = TokenOwnership(to, 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)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership(prevOwnership.addr, prevOwnership.startTimestamp); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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 address. * The call is not executed if the target address is not a 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 _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { 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('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * 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`. */ 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. * * 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` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract XCOPYBAYC is ERC721A, Ownable { string public baseURI = "ipfs://QmcR6rFHX3fY2vQPnMeGj7QKox7dj8rrxFcisLcrWHXN7j/"; string public contractURI = "ipfs://QmbJegAuXConSjVja8qkpFWNoSeE11qb7udTHtwe2tpkVG"; string public constant baseExtension = ".json"; address public constant proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; uint256 public constant MAX_PER_TX_FREE = 5; uint256 public constant MAX_PER_TX = 10; uint256 public constant FREE_MAX_SUPPLY = 300; uint256 public MAX_SUPPLY = 3333; uint256 public price = 0.004 ether; bool public paused = true; constructor() ERC721A("XCOPYBAYC", "XBAYC") {} 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"); if(FREE_MAX_SUPPLY >= totalSupply()){ require(MAX_PER_TX_FREE >= _amount , "Excess max per free tx"); }else{ require(MAX_PER_TX >= _amount , "Excess max per paid tx"); require(_amount * price == msg.value, "Invalid funds provided"); } _safeMint(_caller, _amount); } function withdraw() external onlyOwner { uint256 balance = address(this).balance; (bool success, ) = _msgSender().call{value: balance}(""); require(success, "Failed to send"); } function pause(bool _state) external onlyOwner { paused = _state; } function setBaseURI(string memory baseURI_) external onlyOwner { baseURI = baseURI_; } function setContractURI(string memory _contractURI) external onlyOwner { contractURI = _contractURI; } function setPrice(uint256 newPrice) public onlyOwner { price = newPrice; } function setMAX_SUPPLY(uint256 newSupply) public onlyOwner { MAX_SUPPLY = newSupply; } 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 Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"FREE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX_FREE","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":[],"name":"contractURI","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":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setMAX_SUPPLY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000805560405180606001604052806036815260200162004a4e6036913960089080519060200190620000399291906200023a565b5060405180606001604052806035815260200162004a8460359139600990805190602001906200006b9291906200023a565b50610d05600a55660e35fa931a0000600b556001600c60006101000a81548160ff021916908315150217905550348015620000a557600080fd5b506040518060400160405280600981526020017f58434f50594241594300000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f584241594300000000000000000000000000000000000000000000000000000081525081600190805190602001906200012a9291906200023a565b508060029080519060200190620001439291906200023a565b505050620001666200015a6200016c60201b60201c565b6200017460201b60201c565b6200034f565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024890620002ea565b90600052602060002090601f0160209004810192826200026c5760008555620002b8565b82601f106200028757805160ff1916838001178555620002b8565b82800160010185558215620002b8579182015b82811115620002b75782518255916020019190600101906200029a565b5b509050620002c79190620002cb565b5090565b5b80821115620002e6576000816000905550600101620002cc565b5090565b600060028204905060018216806200030357607f821691505b602082108114156200031a576200031962000320565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6146ef806200035f6000396000f3fe60806040526004361061020f5760003560e01c8063715018a611610118578063b88d4fde116100a0578063e8a3d4851161006f578063e8a3d4851461077e578063e985e9c5146107a9578063ec9496ba146107e6578063f2fde38b1461080f578063f43a22dc146108385761020f565b8063b88d4fde146106c2578063c6682862146106eb578063c87b56dd14610716578063cd7c0326146107535761020f565b8063938e3d7b116100e7578063938e3d7b146105fe57806395d89b4114610627578063a035b1fe14610652578063a0712d681461067d578063a22cb465146106995761020f565b8063715018a6146105685780638069876d1461057f5780638da5cb5b146105aa57806391b7f5ed146105d55761020f565b80633ccfd60b1161019b57806355f804b31161016a57806355f804b31461046f5780635c975abb146104985780636352211e146104c35780636c0360eb1461050057806370a082311461052b5761020f565b80633ccfd60b146103c757806342842e0e146103de578063463fff79146104075780634f6ccce7146104325761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806318160ddd1461030b57806323b872dd146103365780632f745c591461035f57806332cb6b0c1461039c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613215565b610863565b6040516102489190613de1565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131ec565b6109ad565b005b34801561028657600080fd5b5061028f610a46565b60405161029c9190613dfc565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906132a8565b610ad8565b6040516102d99190613d7a565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906131b0565b610b5d565b005b34801561031757600080fd5b50610320610c76565b60405161032d919061417e565b60405180910390f35b34801561034257600080fd5b5061035d600480360381019061035891906130aa565b610c7f565b005b34801561036b57600080fd5b50610386600480360381019061038191906131b0565b610c8f565b604051610393919061417e565b60405180910390f35b3480156103a857600080fd5b506103b1610e8d565b6040516103be919061417e565b60405180910390f35b3480156103d357600080fd5b506103dc610e93565b005b3480156103ea57600080fd5b50610405600480360381019061040091906130aa565b610fcb565b005b34801561041357600080fd5b5061041c610feb565b604051610429919061417e565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906132a8565b610ff0565b604051610466919061417e565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613267565b611043565b005b3480156104a457600080fd5b506104ad6110d9565b6040516104ba9190613de1565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e591906132a8565b6110ec565b6040516104f79190613d7a565b60405180910390f35b34801561050c57600080fd5b50610515611102565b6040516105229190613dfc565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613045565b611190565b60405161055f919061417e565b60405180910390f35b34801561057457600080fd5b5061057d611279565b005b34801561058b57600080fd5b50610594611301565b6040516105a1919061417e565b60405180910390f35b3480156105b657600080fd5b506105bf611307565b6040516105cc9190613d7a565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f791906132a8565b611331565b005b34801561060a57600080fd5b5061062560048036038101906106209190613267565b6113b7565b005b34801561063357600080fd5b5061063c61144d565b6040516106499190613dfc565b60405180910390f35b34801561065e57600080fd5b506106676114df565b604051610674919061417e565b60405180910390f35b610697600480360381019061069291906132a8565b6114e5565b005b3480156106a557600080fd5b506106c060048036038101906106bb9190613174565b611744565b005b3480156106ce57600080fd5b506106e960048036038101906106e491906130f9565b6118c5565b005b3480156106f757600080fd5b50610700611921565b60405161070d9190613dfc565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906132a8565b61195a565b60405161074a9190613dfc565b60405180910390f35b34801561075f57600080fd5b50610768611a39565b6040516107759190613d7a565b60405180910390f35b34801561078a57600080fd5b50610793611a51565b6040516107a09190613dfc565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb919061306e565b611adf565b6040516107dd9190613de1565b60405180910390f35b3480156107f257600080fd5b5061080d600480360381019061080891906132a8565b611b73565b005b34801561081b57600080fd5b5061083660048036038101906108319190613045565b611bf9565b005b34801561084457600080fd5b5061084d611cf1565b60405161085a919061417e565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061099657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a657506109a582611cf6565b5b9050919050565b6109b5611d60565b73ffffffffffffffffffffffffffffffffffffffff166109d3611307565b73ffffffffffffffffffffffffffffffffffffffff1614610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613fde565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b606060018054610a55906144e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a81906144e4565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b6000610ae382611d68565b610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b199061413e565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b68826110ec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09061405e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf8611d60565b73ffffffffffffffffffffffffffffffffffffffff161480610c275750610c2681610c21611d60565b611adf565b5b610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90613f3e565b60405180910390fd5b610c71838383611d75565b505050565b60008054905090565b610c8a838383611e27565b505050565b6000610c9a83611190565b8210610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290613e1e565b60405180910390fd5b6000610ce5610c76565b905060008060005b83811015610e4b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ddf57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e375786841415610e28578195505050505050610e87565b8380610e3390614516565b9450505b508080610e4390614516565b915050610ced565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e9061411e565b60405180910390fd5b92915050565b600a5481565b610e9b611d60565b73ffffffffffffffffffffffffffffffffffffffff16610eb9611307565b73ffffffffffffffffffffffffffffffffffffffff1614610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690613fde565b60405180910390fd5b60004790506000610f1e611d60565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f4190613d65565b60006040518083038185875af1925050503d8060008114610f7e576040519150601f19603f3d011682016040523d82523d6000602084013e610f83565b606091505b5050905080610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906140fe565b60405180910390fd5b5050565b610fe6838383604051806020016040528060008152506118c5565b505050565b600581565b6000610ffa610c76565b821061103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290613ede565b60405180910390fd5b819050919050565b61104b611d60565b73ffffffffffffffffffffffffffffffffffffffff16611069611307565b73ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613fde565b60405180910390fd5b80600890805190602001906110d5929190612e2f565b5050565b600c60009054906101000a900460ff1681565b60006110f7826123ce565b600001519050919050565b6008805461110f906144e4565b80601f016020809104026020016040519081016040528092919081815260200182805461113b906144e4565b80156111885780601f1061115d57610100808354040283529160200191611188565b820191906000526020600020905b81548152906001019060200180831161116b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890613f7e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611281611d60565b73ffffffffffffffffffffffffffffffffffffffff1661129f611307565b73ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613fde565b60405180910390fd5b6112ff6000612529565b565b61012c81565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611339611d60565b73ffffffffffffffffffffffffffffffffffffffff16611357611307565b73ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490613fde565b60405180910390fd5b80600b8190555050565b6113bf611d60565b73ffffffffffffffffffffffffffffffffffffffff166113dd611307565b73ffffffffffffffffffffffffffffffffffffffff1614611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90613fde565b60405180910390fd5b8060099080519060200190611449929190612e2f565b5050565b60606002805461145c906144e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611488906144e4565b80156114d55780601f106114aa576101008083540402835291602001916114d5565b820191906000526020600020905b8154815290600101906020018083116114b857829003601f168201915b5050505050905090565b600b5481565b60006114ef611d60565b9050600c60009054906101000a900460ff1615611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890613e3e565b60405180910390fd5b8161154a610c76565b61155491906142d3565b600a541015611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90613f5e565b60405180910390fd5b600082116115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613e9e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611649576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116409061415e565b60405180910390fd5b611651610c76565b61012c106116a257816005101561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613f1e565b60405180910390fd5b611736565b81600a10156116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90613ebe565b60405180910390fd5b34600b54836116f5919061435a565b14611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c9061403e565b60405180910390fd5b5b61174081836125ef565b5050565b61174c611d60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b190613ffe565b60405180910390fd5b80600660006117c7611d60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611874611d60565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118b99190613de1565b60405180910390a35050565b6118d0848484611e27565b6118dc8484848461260d565b61191b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119129061409e565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061196582611d68565b6119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90613f9e565b60405180910390fd5b6000600880546119b3906144e4565b9050116119cf5760405180602001604052806000815250611a32565b60086119da836127a4565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611a2293929190613d34565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054611a5e906144e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8a906144e4565b8015611ad75780601f10611aac57610100808354040283529160200191611ad7565b820191906000526020600020905b815481529060010190602001808311611aba57829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b7b611d60565b73ffffffffffffffffffffffffffffffffffffffff16611b99611307565b73ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690613fde565b60405180910390fd5b80600a8190555050565b611c01611d60565b73ffffffffffffffffffffffffffffffffffffffff16611c1f611307565b73ffffffffffffffffffffffffffffffffffffffff1614611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c90613fde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90613e5e565b60405180910390fd5b611cee81612529565b50565b600a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e32826123ce565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e59611d60565b73ffffffffffffffffffffffffffffffffffffffff161480611eb55750611e7e611d60565b73ffffffffffffffffffffffffffffffffffffffff16611e9d84610ad8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ed15750611ed08260000151611ecb611d60565b611adf565b5b905080611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a9061401e565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90613fbe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613efe565b60405180910390fd5b6120028585856001612951565b6120126000848460000151611d75565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461221891906142d3565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561235e5761228e81611d68565b1561235d576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123c68686866001612957565b505050505050565b6123d6612eb5565b6123df82611d68565b61241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590613e7e565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612510578092505050612524565b50808061251c906144ba565b915050612424565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61260982826040518060200160405280600081525061295d565b5050565b600061262e8473ffffffffffffffffffffffffffffffffffffffff16612e1c565b15612797578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612657611d60565b8786866040518563ffffffff1660e01b81526004016126799493929190613d95565b602060405180830381600087803b15801561269357600080fd5b505af19250505080156126c457506040513d601f19601f820116820180604052508101906126c1919061323e565b60015b612747573d80600081146126f4576040519150601f19603f3d011682016040523d82523d6000602084013e6126f9565b606091505b5060008151141561273f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127369061409e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061279c565b600190505b949350505050565b606060008214156127ec576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061294c565b600082905060005b6000821461281e57808061280790614516565b915050600a826128179190614329565b91506127f4565b60008167ffffffffffffffff811115612860577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128925781602001600182028036833780820191505090505b5090505b60008514612945576001826128ab91906143b4565b9150600a856128ba919061455f565b60306128c691906142d3565b60f81b818381518110612902577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561293e9190614329565b9450612896565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca906140de565b60405180910390fd5b6129dc81611d68565b15612a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a13906140be565b60405180910390fd5b60008311612a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a569061407e565b60405180910390fd5b612a6c6000858386612951565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b69919061428d565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b90919061428d565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612dff57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d9f600088848861260d565b612dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd59061409e565b60405180910390fd5b8180612de990614516565b9250508080612df790614516565b915050612d2e565b5080600081905550612e146000878588612957565b505050505050565b600080823b905060008111915050919050565b828054612e3b906144e4565b90600052602060002090601f016020900481019282612e5d5760008555612ea4565b82601f10612e7657805160ff1916838001178555612ea4565b82800160010185558215612ea4579182015b82811115612ea3578251825591602001919060010190612e88565b5b509050612eb19190612eef565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612f08576000816000905550600101612ef0565b5090565b6000612f1f612f1a846141ca565b614199565b905082815260208101848484011115612f3757600080fd5b612f42848285614478565b509392505050565b6000612f5d612f58846141fa565b614199565b905082815260208101848484011115612f7557600080fd5b612f80848285614478565b509392505050565b600081359050612f978161465d565b92915050565b600081359050612fac81614674565b92915050565b600081359050612fc18161468b565b92915050565b600081519050612fd68161468b565b92915050565b600082601f830112612fed57600080fd5b8135612ffd848260208601612f0c565b91505092915050565b600082601f83011261301757600080fd5b8135613027848260208601612f4a565b91505092915050565b60008135905061303f816146a2565b92915050565b60006020828403121561305757600080fd5b600061306584828501612f88565b91505092915050565b6000806040838503121561308157600080fd5b600061308f85828601612f88565b92505060206130a085828601612f88565b9150509250929050565b6000806000606084860312156130bf57600080fd5b60006130cd86828701612f88565b93505060206130de86828701612f88565b92505060406130ef86828701613030565b9150509250925092565b6000806000806080858703121561310f57600080fd5b600061311d87828801612f88565b945050602061312e87828801612f88565b935050604061313f87828801613030565b925050606085013567ffffffffffffffff81111561315c57600080fd5b61316887828801612fdc565b91505092959194509250565b6000806040838503121561318757600080fd5b600061319585828601612f88565b92505060206131a685828601612f9d565b9150509250929050565b600080604083850312156131c357600080fd5b60006131d185828601612f88565b92505060206131e285828601613030565b9150509250929050565b6000602082840312156131fe57600080fd5b600061320c84828501612f9d565b91505092915050565b60006020828403121561322757600080fd5b600061323584828501612fb2565b91505092915050565b60006020828403121561325057600080fd5b600061325e84828501612fc7565b91505092915050565b60006020828403121561327957600080fd5b600082013567ffffffffffffffff81111561329357600080fd5b61329f84828501613006565b91505092915050565b6000602082840312156132ba57600080fd5b60006132c884828501613030565b91505092915050565b6132da816143e8565b82525050565b6132e9816143fa565b82525050565b60006132fa8261423f565b6133048185614255565b9350613314818560208601614487565b61331d8161464c565b840191505092915050565b60006133338261424a565b61333d8185614271565b935061334d818560208601614487565b6133568161464c565b840191505092915050565b600061336c8261424a565b6133768185614282565b9350613386818560208601614487565b80840191505092915050565b6000815461339f816144e4565b6133a98186614282565b945060018216600081146133c457600181146133d557613408565b60ff19831686528186019350613408565b6133de8561422a565b60005b83811015613400578154818901526001820191506020810190506133e1565b838801955050505b50505092915050565b600061341e602283614271565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613484600683614271565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006134c4602683614271565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061352a602a83614271565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613590600a83614271565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b60006135d0601683614271565b91507f457863657373206d6178207065722070616964207478000000000000000000006000830152602082019050919050565b6000613610602383614271565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613676602583614271565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136dc601683614271565b91507f457863657373206d6178207065722066726565207478000000000000000000006000830152602082019050919050565b600061371c603983614271565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b6000613782601283614271565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b60006137c2602b83614271565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613828601583614271565b91507f546f6b656e20646f6573206e6f742065786973742e00000000000000000000006000830152602082019050919050565b6000613868602683614271565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138ce602083614271565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061390e601a83614271565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b600061394e603283614271565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006139b4601683614271565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b60006139f4602283614271565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a5a600083614266565b9150600082019050919050565b6000613a74602383614271565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ada603383614271565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b6000613b40601d83614271565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613b80602183614271565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613be6600e83614271565b91507f4661696c656420746f2073656e640000000000000000000000000000000000006000830152602082019050919050565b6000613c26602e83614271565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613c8c602d83614271565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000613cf2600c83614271565b91507f4e6f20636f6e74726163747300000000000000000000000000000000000000006000830152602082019050919050565b613d2e8161446e565b82525050565b6000613d408286613392565b9150613d4c8285613361565b9150613d588284613361565b9150819050949350505050565b6000613d7082613a4d565b9150819050919050565b6000602082019050613d8f60008301846132d1565b92915050565b6000608082019050613daa60008301876132d1565b613db760208301866132d1565b613dc46040830185613d25565b8181036060830152613dd681846132ef565b905095945050505050565b6000602082019050613df660008301846132e0565b92915050565b60006020820190508181036000830152613e168184613328565b905092915050565b60006020820190508181036000830152613e3781613411565b9050919050565b60006020820190508181036000830152613e5781613477565b9050919050565b60006020820190508181036000830152613e77816134b7565b9050919050565b60006020820190508181036000830152613e978161351d565b9050919050565b60006020820190508181036000830152613eb781613583565b9050919050565b60006020820190508181036000830152613ed7816135c3565b9050919050565b60006020820190508181036000830152613ef781613603565b9050919050565b60006020820190508181036000830152613f1781613669565b9050919050565b60006020820190508181036000830152613f37816136cf565b9050919050565b60006020820190508181036000830152613f578161370f565b9050919050565b60006020820190508181036000830152613f7781613775565b9050919050565b60006020820190508181036000830152613f97816137b5565b9050919050565b60006020820190508181036000830152613fb78161381b565b9050919050565b60006020820190508181036000830152613fd78161385b565b9050919050565b60006020820190508181036000830152613ff7816138c1565b9050919050565b6000602082019050818103600083015261401781613901565b9050919050565b6000602082019050818103600083015261403781613941565b9050919050565b60006020820190508181036000830152614057816139a7565b9050919050565b60006020820190508181036000830152614077816139e7565b9050919050565b6000602082019050818103600083015261409781613a67565b9050919050565b600060208201905081810360008301526140b781613acd565b9050919050565b600060208201905081810360008301526140d781613b33565b9050919050565b600060208201905081810360008301526140f781613b73565b9050919050565b6000602082019050818103600083015261411781613bd9565b9050919050565b6000602082019050818103600083015261413781613c19565b9050919050565b6000602082019050818103600083015261415781613c7f565b9050919050565b6000602082019050818103600083015261417781613ce5565b9050919050565b60006020820190506141936000830184613d25565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141c0576141bf61461d565b5b8060405250919050565b600067ffffffffffffffff8211156141e5576141e461461d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156142155761421461461d565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061429882614432565b91506142a383614432565b9250826fffffffffffffffffffffffffffffffff038211156142c8576142c7614590565b5b828201905092915050565b60006142de8261446e565b91506142e98361446e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561431e5761431d614590565b5b828201905092915050565b60006143348261446e565b915061433f8361446e565b92508261434f5761434e6145bf565b5b828204905092915050565b60006143658261446e565b91506143708361446e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a9576143a8614590565b5b828202905092915050565b60006143bf8261446e565b91506143ca8361446e565b9250828210156143dd576143dc614590565b5b828203905092915050565b60006143f38261444e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144a557808201518184015260208101905061448a565b838111156144b4576000848401525b50505050565b60006144c58261446e565b915060008214156144d9576144d8614590565b5b600182039050919050565b600060028204905060018216806144fc57607f821691505b602082108114156145105761450f6145ee565b5b50919050565b60006145218261446e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455457614553614590565b5b600182019050919050565b600061456a8261446e565b91506145758361446e565b925082614585576145846145bf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614666816143e8565b811461467157600080fd5b50565b61467d816143fa565b811461468857600080fd5b50565b61469481614406565b811461469f57600080fd5b50565b6146ab8161446e565b81146146b657600080fd5b5056fea26469706673582212208a014dc32f451101ced70fa840e2c440343607d71585818dd3d35d369300011164736f6c63430008000033697066733a2f2f516d63523672464858336659327651506e4d65476a37514b6f7837646a38727278466369734c63725748584e376a2f697066733a2f2f516d624a6567417558436f6e536a566a6138716b7046574e6f5365453131716237756454487477653274706b5647
Deployed Bytecode
0x60806040526004361061020f5760003560e01c8063715018a611610118578063b88d4fde116100a0578063e8a3d4851161006f578063e8a3d4851461077e578063e985e9c5146107a9578063ec9496ba146107e6578063f2fde38b1461080f578063f43a22dc146108385761020f565b8063b88d4fde146106c2578063c6682862146106eb578063c87b56dd14610716578063cd7c0326146107535761020f565b8063938e3d7b116100e7578063938e3d7b146105fe57806395d89b4114610627578063a035b1fe14610652578063a0712d681461067d578063a22cb465146106995761020f565b8063715018a6146105685780638069876d1461057f5780638da5cb5b146105aa57806391b7f5ed146105d55761020f565b80633ccfd60b1161019b57806355f804b31161016a57806355f804b31461046f5780635c975abb146104985780636352211e146104c35780636c0360eb1461050057806370a082311461052b5761020f565b80633ccfd60b146103c757806342842e0e146103de578063463fff79146104075780634f6ccce7146104325761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806318160ddd1461030b57806323b872dd146103365780632f745c591461035f57806332cb6b0c1461039c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613215565b610863565b6040516102489190613de1565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131ec565b6109ad565b005b34801561028657600080fd5b5061028f610a46565b60405161029c9190613dfc565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906132a8565b610ad8565b6040516102d99190613d7a565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906131b0565b610b5d565b005b34801561031757600080fd5b50610320610c76565b60405161032d919061417e565b60405180910390f35b34801561034257600080fd5b5061035d600480360381019061035891906130aa565b610c7f565b005b34801561036b57600080fd5b50610386600480360381019061038191906131b0565b610c8f565b604051610393919061417e565b60405180910390f35b3480156103a857600080fd5b506103b1610e8d565b6040516103be919061417e565b60405180910390f35b3480156103d357600080fd5b506103dc610e93565b005b3480156103ea57600080fd5b50610405600480360381019061040091906130aa565b610fcb565b005b34801561041357600080fd5b5061041c610feb565b604051610429919061417e565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906132a8565b610ff0565b604051610466919061417e565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613267565b611043565b005b3480156104a457600080fd5b506104ad6110d9565b6040516104ba9190613de1565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e591906132a8565b6110ec565b6040516104f79190613d7a565b60405180910390f35b34801561050c57600080fd5b50610515611102565b6040516105229190613dfc565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613045565b611190565b60405161055f919061417e565b60405180910390f35b34801561057457600080fd5b5061057d611279565b005b34801561058b57600080fd5b50610594611301565b6040516105a1919061417e565b60405180910390f35b3480156105b657600080fd5b506105bf611307565b6040516105cc9190613d7a565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f791906132a8565b611331565b005b34801561060a57600080fd5b5061062560048036038101906106209190613267565b6113b7565b005b34801561063357600080fd5b5061063c61144d565b6040516106499190613dfc565b60405180910390f35b34801561065e57600080fd5b506106676114df565b604051610674919061417e565b60405180910390f35b610697600480360381019061069291906132a8565b6114e5565b005b3480156106a557600080fd5b506106c060048036038101906106bb9190613174565b611744565b005b3480156106ce57600080fd5b506106e960048036038101906106e491906130f9565b6118c5565b005b3480156106f757600080fd5b50610700611921565b60405161070d9190613dfc565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906132a8565b61195a565b60405161074a9190613dfc565b60405180910390f35b34801561075f57600080fd5b50610768611a39565b6040516107759190613d7a565b60405180910390f35b34801561078a57600080fd5b50610793611a51565b6040516107a09190613dfc565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb919061306e565b611adf565b6040516107dd9190613de1565b60405180910390f35b3480156107f257600080fd5b5061080d600480360381019061080891906132a8565b611b73565b005b34801561081b57600080fd5b5061083660048036038101906108319190613045565b611bf9565b005b34801561084457600080fd5b5061084d611cf1565b60405161085a919061417e565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061099657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a657506109a582611cf6565b5b9050919050565b6109b5611d60565b73ffffffffffffffffffffffffffffffffffffffff166109d3611307565b73ffffffffffffffffffffffffffffffffffffffff1614610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613fde565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b606060018054610a55906144e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a81906144e4565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b6000610ae382611d68565b610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b199061413e565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b68826110ec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09061405e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf8611d60565b73ffffffffffffffffffffffffffffffffffffffff161480610c275750610c2681610c21611d60565b611adf565b5b610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90613f3e565b60405180910390fd5b610c71838383611d75565b505050565b60008054905090565b610c8a838383611e27565b505050565b6000610c9a83611190565b8210610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290613e1e565b60405180910390fd5b6000610ce5610c76565b905060008060005b83811015610e4b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ddf57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e375786841415610e28578195505050505050610e87565b8380610e3390614516565b9450505b508080610e4390614516565b915050610ced565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e9061411e565b60405180910390fd5b92915050565b600a5481565b610e9b611d60565b73ffffffffffffffffffffffffffffffffffffffff16610eb9611307565b73ffffffffffffffffffffffffffffffffffffffff1614610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690613fde565b60405180910390fd5b60004790506000610f1e611d60565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f4190613d65565b60006040518083038185875af1925050503d8060008114610f7e576040519150601f19603f3d011682016040523d82523d6000602084013e610f83565b606091505b5050905080610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906140fe565b60405180910390fd5b5050565b610fe6838383604051806020016040528060008152506118c5565b505050565b600581565b6000610ffa610c76565b821061103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290613ede565b60405180910390fd5b819050919050565b61104b611d60565b73ffffffffffffffffffffffffffffffffffffffff16611069611307565b73ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613fde565b60405180910390fd5b80600890805190602001906110d5929190612e2f565b5050565b600c60009054906101000a900460ff1681565b60006110f7826123ce565b600001519050919050565b6008805461110f906144e4565b80601f016020809104026020016040519081016040528092919081815260200182805461113b906144e4565b80156111885780601f1061115d57610100808354040283529160200191611188565b820191906000526020600020905b81548152906001019060200180831161116b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890613f7e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611281611d60565b73ffffffffffffffffffffffffffffffffffffffff1661129f611307565b73ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613fde565b60405180910390fd5b6112ff6000612529565b565b61012c81565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611339611d60565b73ffffffffffffffffffffffffffffffffffffffff16611357611307565b73ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490613fde565b60405180910390fd5b80600b8190555050565b6113bf611d60565b73ffffffffffffffffffffffffffffffffffffffff166113dd611307565b73ffffffffffffffffffffffffffffffffffffffff1614611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90613fde565b60405180910390fd5b8060099080519060200190611449929190612e2f565b5050565b60606002805461145c906144e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611488906144e4565b80156114d55780601f106114aa576101008083540402835291602001916114d5565b820191906000526020600020905b8154815290600101906020018083116114b857829003601f168201915b5050505050905090565b600b5481565b60006114ef611d60565b9050600c60009054906101000a900460ff1615611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890613e3e565b60405180910390fd5b8161154a610c76565b61155491906142d3565b600a541015611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90613f5e565b60405180910390fd5b600082116115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613e9e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611649576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116409061415e565b60405180910390fd5b611651610c76565b61012c106116a257816005101561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613f1e565b60405180910390fd5b611736565b81600a10156116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90613ebe565b60405180910390fd5b34600b54836116f5919061435a565b14611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c9061403e565b60405180910390fd5b5b61174081836125ef565b5050565b61174c611d60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b190613ffe565b60405180910390fd5b80600660006117c7611d60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611874611d60565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118b99190613de1565b60405180910390a35050565b6118d0848484611e27565b6118dc8484848461260d565b61191b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119129061409e565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061196582611d68565b6119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90613f9e565b60405180910390fd5b6000600880546119b3906144e4565b9050116119cf5760405180602001604052806000815250611a32565b60086119da836127a4565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611a2293929190613d34565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054611a5e906144e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8a906144e4565b8015611ad75780601f10611aac57610100808354040283529160200191611ad7565b820191906000526020600020905b815481529060010190602001808311611aba57829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b7b611d60565b73ffffffffffffffffffffffffffffffffffffffff16611b99611307565b73ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690613fde565b60405180910390fd5b80600a8190555050565b611c01611d60565b73ffffffffffffffffffffffffffffffffffffffff16611c1f611307565b73ffffffffffffffffffffffffffffffffffffffff1614611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c90613fde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90613e5e565b60405180910390fd5b611cee81612529565b50565b600a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e32826123ce565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e59611d60565b73ffffffffffffffffffffffffffffffffffffffff161480611eb55750611e7e611d60565b73ffffffffffffffffffffffffffffffffffffffff16611e9d84610ad8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ed15750611ed08260000151611ecb611d60565b611adf565b5b905080611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a9061401e565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90613fbe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613efe565b60405180910390fd5b6120028585856001612951565b6120126000848460000151611d75565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461221891906142d3565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561235e5761228e81611d68565b1561235d576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123c68686866001612957565b505050505050565b6123d6612eb5565b6123df82611d68565b61241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590613e7e565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612510578092505050612524565b50808061251c906144ba565b915050612424565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61260982826040518060200160405280600081525061295d565b5050565b600061262e8473ffffffffffffffffffffffffffffffffffffffff16612e1c565b15612797578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612657611d60565b8786866040518563ffffffff1660e01b81526004016126799493929190613d95565b602060405180830381600087803b15801561269357600080fd5b505af19250505080156126c457506040513d601f19601f820116820180604052508101906126c1919061323e565b60015b612747573d80600081146126f4576040519150601f19603f3d011682016040523d82523d6000602084013e6126f9565b606091505b5060008151141561273f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127369061409e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061279c565b600190505b949350505050565b606060008214156127ec576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061294c565b600082905060005b6000821461281e57808061280790614516565b915050600a826128179190614329565b91506127f4565b60008167ffffffffffffffff811115612860577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128925781602001600182028036833780820191505090505b5090505b60008514612945576001826128ab91906143b4565b9150600a856128ba919061455f565b60306128c691906142d3565b60f81b818381518110612902577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561293e9190614329565b9450612896565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca906140de565b60405180910390fd5b6129dc81611d68565b15612a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a13906140be565b60405180910390fd5b60008311612a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a569061407e565b60405180910390fd5b612a6c6000858386612951565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b69919061428d565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b90919061428d565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612dff57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d9f600088848861260d565b612dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd59061409e565b60405180910390fd5b8180612de990614516565b9250508080612df790614516565b915050612d2e565b5080600081905550612e146000878588612957565b505050505050565b600080823b905060008111915050919050565b828054612e3b906144e4565b90600052602060002090601f016020900481019282612e5d5760008555612ea4565b82601f10612e7657805160ff1916838001178555612ea4565b82800160010185558215612ea4579182015b82811115612ea3578251825591602001919060010190612e88565b5b509050612eb19190612eef565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612f08576000816000905550600101612ef0565b5090565b6000612f1f612f1a846141ca565b614199565b905082815260208101848484011115612f3757600080fd5b612f42848285614478565b509392505050565b6000612f5d612f58846141fa565b614199565b905082815260208101848484011115612f7557600080fd5b612f80848285614478565b509392505050565b600081359050612f978161465d565b92915050565b600081359050612fac81614674565b92915050565b600081359050612fc18161468b565b92915050565b600081519050612fd68161468b565b92915050565b600082601f830112612fed57600080fd5b8135612ffd848260208601612f0c565b91505092915050565b600082601f83011261301757600080fd5b8135613027848260208601612f4a565b91505092915050565b60008135905061303f816146a2565b92915050565b60006020828403121561305757600080fd5b600061306584828501612f88565b91505092915050565b6000806040838503121561308157600080fd5b600061308f85828601612f88565b92505060206130a085828601612f88565b9150509250929050565b6000806000606084860312156130bf57600080fd5b60006130cd86828701612f88565b93505060206130de86828701612f88565b92505060406130ef86828701613030565b9150509250925092565b6000806000806080858703121561310f57600080fd5b600061311d87828801612f88565b945050602061312e87828801612f88565b935050604061313f87828801613030565b925050606085013567ffffffffffffffff81111561315c57600080fd5b61316887828801612fdc565b91505092959194509250565b6000806040838503121561318757600080fd5b600061319585828601612f88565b92505060206131a685828601612f9d565b9150509250929050565b600080604083850312156131c357600080fd5b60006131d185828601612f88565b92505060206131e285828601613030565b9150509250929050565b6000602082840312156131fe57600080fd5b600061320c84828501612f9d565b91505092915050565b60006020828403121561322757600080fd5b600061323584828501612fb2565b91505092915050565b60006020828403121561325057600080fd5b600061325e84828501612fc7565b91505092915050565b60006020828403121561327957600080fd5b600082013567ffffffffffffffff81111561329357600080fd5b61329f84828501613006565b91505092915050565b6000602082840312156132ba57600080fd5b60006132c884828501613030565b91505092915050565b6132da816143e8565b82525050565b6132e9816143fa565b82525050565b60006132fa8261423f565b6133048185614255565b9350613314818560208601614487565b61331d8161464c565b840191505092915050565b60006133338261424a565b61333d8185614271565b935061334d818560208601614487565b6133568161464c565b840191505092915050565b600061336c8261424a565b6133768185614282565b9350613386818560208601614487565b80840191505092915050565b6000815461339f816144e4565b6133a98186614282565b945060018216600081146133c457600181146133d557613408565b60ff19831686528186019350613408565b6133de8561422a565b60005b83811015613400578154818901526001820191506020810190506133e1565b838801955050505b50505092915050565b600061341e602283614271565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613484600683614271565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006134c4602683614271565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061352a602a83614271565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613590600a83614271565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b60006135d0601683614271565b91507f457863657373206d6178207065722070616964207478000000000000000000006000830152602082019050919050565b6000613610602383614271565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613676602583614271565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136dc601683614271565b91507f457863657373206d6178207065722066726565207478000000000000000000006000830152602082019050919050565b600061371c603983614271565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b6000613782601283614271565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b60006137c2602b83614271565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613828601583614271565b91507f546f6b656e20646f6573206e6f742065786973742e00000000000000000000006000830152602082019050919050565b6000613868602683614271565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138ce602083614271565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061390e601a83614271565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b600061394e603283614271565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006139b4601683614271565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b60006139f4602283614271565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a5a600083614266565b9150600082019050919050565b6000613a74602383614271565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ada603383614271565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b6000613b40601d83614271565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613b80602183614271565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613be6600e83614271565b91507f4661696c656420746f2073656e640000000000000000000000000000000000006000830152602082019050919050565b6000613c26602e83614271565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613c8c602d83614271565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000613cf2600c83614271565b91507f4e6f20636f6e74726163747300000000000000000000000000000000000000006000830152602082019050919050565b613d2e8161446e565b82525050565b6000613d408286613392565b9150613d4c8285613361565b9150613d588284613361565b9150819050949350505050565b6000613d7082613a4d565b9150819050919050565b6000602082019050613d8f60008301846132d1565b92915050565b6000608082019050613daa60008301876132d1565b613db760208301866132d1565b613dc46040830185613d25565b8181036060830152613dd681846132ef565b905095945050505050565b6000602082019050613df660008301846132e0565b92915050565b60006020820190508181036000830152613e168184613328565b905092915050565b60006020820190508181036000830152613e3781613411565b9050919050565b60006020820190508181036000830152613e5781613477565b9050919050565b60006020820190508181036000830152613e77816134b7565b9050919050565b60006020820190508181036000830152613e978161351d565b9050919050565b60006020820190508181036000830152613eb781613583565b9050919050565b60006020820190508181036000830152613ed7816135c3565b9050919050565b60006020820190508181036000830152613ef781613603565b9050919050565b60006020820190508181036000830152613f1781613669565b9050919050565b60006020820190508181036000830152613f37816136cf565b9050919050565b60006020820190508181036000830152613f578161370f565b9050919050565b60006020820190508181036000830152613f7781613775565b9050919050565b60006020820190508181036000830152613f97816137b5565b9050919050565b60006020820190508181036000830152613fb78161381b565b9050919050565b60006020820190508181036000830152613fd78161385b565b9050919050565b60006020820190508181036000830152613ff7816138c1565b9050919050565b6000602082019050818103600083015261401781613901565b9050919050565b6000602082019050818103600083015261403781613941565b9050919050565b60006020820190508181036000830152614057816139a7565b9050919050565b60006020820190508181036000830152614077816139e7565b9050919050565b6000602082019050818103600083015261409781613a67565b9050919050565b600060208201905081810360008301526140b781613acd565b9050919050565b600060208201905081810360008301526140d781613b33565b9050919050565b600060208201905081810360008301526140f781613b73565b9050919050565b6000602082019050818103600083015261411781613bd9565b9050919050565b6000602082019050818103600083015261413781613c19565b9050919050565b6000602082019050818103600083015261415781613c7f565b9050919050565b6000602082019050818103600083015261417781613ce5565b9050919050565b60006020820190506141936000830184613d25565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141c0576141bf61461d565b5b8060405250919050565b600067ffffffffffffffff8211156141e5576141e461461d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156142155761421461461d565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061429882614432565b91506142a383614432565b9250826fffffffffffffffffffffffffffffffff038211156142c8576142c7614590565b5b828201905092915050565b60006142de8261446e565b91506142e98361446e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561431e5761431d614590565b5b828201905092915050565b60006143348261446e565b915061433f8361446e565b92508261434f5761434e6145bf565b5b828204905092915050565b60006143658261446e565b91506143708361446e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a9576143a8614590565b5b828202905092915050565b60006143bf8261446e565b91506143ca8361446e565b9250828210156143dd576143dc614590565b5b828203905092915050565b60006143f38261444e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144a557808201518184015260208101905061448a565b838111156144b4576000848401525b50505050565b60006144c58261446e565b915060008214156144d9576144d8614590565b5b600182039050919050565b600060028204905060018216806144fc57607f821691505b602082108114156145105761450f6145ee565b5b50919050565b60006145218261446e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455457614553614590565b5b600182019050919050565b600061456a8261446e565b91506145758361446e565b925082614585576145846145bf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614666816143e8565b811461467157600080fd5b50565b61467d816143fa565b811461468857600080fd5b50565b61469481614406565b811461469f57600080fd5b50565b6146ab8161446e565b81146146b657600080fd5b5056fea26469706673582212208a014dc32f451101ced70fa840e2c440343607d71585818dd3d35d369300011164736f6c63430008000033
Deployed Bytecode Sourcemap
38072:2456:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26086:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39652:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27713:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29274:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28795:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24527:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30150:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25191:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38596:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39435:209;;;;;;;;;;;;;:::i;:::-;;30383:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38448:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24704:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39741:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38678:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27522:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38120:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26522:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2564:103;;;;;;;;;;;;;:::i;:::-;;38544:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1913:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39969:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39849:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27882:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38635:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38766:657;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29560:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30631:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38297:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40163:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38350:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38207:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29919:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40057:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2822:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38498:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26086:372;26188:4;26240:25;26225:40;;;:11;:40;;;;:105;;;;26297:33;26282:48;;;:11;:48;;;;26225:105;:172;;;;26362:35;26347:50;;;:11;:50;;;;26225:172;:225;;;;26414:36;26438:11;26414:23;:36::i;:::-;26225:225;26205:245;;26086:372;;;:::o;39652:81::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39719:6:::1;39710;;:15;;;;;;;;;;;;;;;;;;39652:81:::0;:::o;27713:100::-;27767:13;27800:5;27793:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27713:100;:::o;29274:214::-;29342:7;29370:16;29378:7;29370;:16::i;:::-;29362:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29456:15;:24;29472:7;29456:24;;;;;;;;;;;;;;;;;;;;;29449:31;;29274:214;;;:::o;28795:413::-;28868:13;28884:24;28900:7;28884:15;:24::i;:::-;28868:40;;28933:5;28927:11;;:2;:11;;;;28919:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29028:5;29012:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29037:37;29054:5;29061:12;:10;:12::i;:::-;29037:16;:37::i;:::-;29012:62;28990:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;29172:28;29181:2;29185:7;29194:5;29172:8;:28::i;:::-;28795:413;;;:::o;24527:100::-;24580:7;24607:12;;24600:19;;24527:100;:::o;30150:162::-;30276:28;30286:4;30292:2;30296:7;30276:9;:28::i;:::-;30150:162;;;:::o;25191:823::-;25280:7;25316:16;25326:5;25316:9;:16::i;:::-;25308:5;:24;25300:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25382:22;25407:13;:11;:13::i;:::-;25382:38;;25431:19;25465:25;25519:9;25514:426;25538:14;25534:1;:18;25514:426;;;25574:31;25608:11;:14;25620:1;25608:14;;;;;;;;;;;25574:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25667:1;25641:28;;:9;:14;;;:28;;;25637:103;;25710:9;:14;;;25690:34;;25637:103;25779:5;25758:26;;:17;:26;;;25754:175;;;25824:5;25809:11;:20;25805:77;;;25861:1;25854:8;;;;;;;;;25805:77;25900:13;;;;;:::i;:::-;;;;25754:175;25514:426;25554:3;;;;;:::i;:::-;;;;25514:426;;;;25950:56;;;;;;;;;;:::i;:::-;;;;;;;;25191:823;;;;;:::o;38596:32::-;;;;:::o;39435:209::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39485:15:::1;39503:21;39485:39;;39536:12;39554;:10;:12::i;:::-;:17;;39579:7;39554:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39535:56;;;39610:7;39602:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;2204:1;;39435:209::o:0;30383:177::-;30513:39;30530:4;30536:2;30540:7;30513:39;;;;;;;;;;;;:16;:39::i;:::-;30383:177;;;:::o;38448:43::-;38490:1;38448:43;:::o;24704:187::-;24771:7;24807:13;:11;:13::i;:::-;24799:5;:21;24791:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24878:5;24871:12;;24704:187;;;:::o;39741:100::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39825:8:::1;39815:7;:18;;;;;;;;;;;;:::i;:::-;;39741:100:::0;:::o;38678:25::-;;;;;;;;;;;;;:::o;27522:124::-;27586:7;27613:20;27625:7;27613:11;:20::i;:::-;:25;;;27606:32;;27522:124;;;:::o;38120:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26522:221::-;26586:7;26631:1;26614:19;;:5;:19;;;;26606:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26707:12;:19;26720:5;26707:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;26699:36;;26692:43;;26522:221;;;:::o;2564:103::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2629:30:::1;2656:1;2629:18;:30::i;:::-;2564:103::o:0;38544:45::-;38586:3;38544:45;:::o;1913:87::-;1959:7;1986:6;;;;;;;;;;;1979:13;;1913:87;:::o;39969:84::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40041:8:::1;40033:5;:16;;;;39969:84:::0;:::o;39849:116::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39945:12:::1;39931:11;:26;;;;;;;;;;;;:::i;:::-;;39849:116:::0;:::o;27882:104::-;27938:13;27971:7;27964:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27882:104;:::o;38635:34::-;;;;:::o;38766:657::-;38825:15;38843:12;:10;:12::i;:::-;38825:30;;38875:6;;;;;;;;;;;38874:7;38866:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;38941:7;38925:13;:11;:13::i;:::-;:23;;;;:::i;:::-;38911:10;;:37;;38903:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39000:1;38990:7;:11;38982:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;39048:7;39035:20;;:9;:20;;;39027:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;39107:13;:11;:13::i;:::-;38586:3;39088:32;39085:291;;39163:7;38490:1;39144:26;;39136:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39085:291;;;39251:7;38535:2;39237:21;;39229:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39328:9;39319:5;;39309:7;:15;;;;:::i;:::-;:28;39301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39085:291;39388:27;39398:7;39407;39388:9;:27::i;:::-;38766:657;;:::o;29560:288::-;29667:12;:10;:12::i;:::-;29655:24;;:8;:24;;;;29647:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29768:8;29723:18;:32;29742:12;:10;:12::i;:::-;29723:32;;;;;;;;;;;;;;;:42;29756:8;29723:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29821:8;29792:48;;29807:12;:10;:12::i;:::-;29792:48;;;29831:8;29792:48;;;;;;:::i;:::-;;;;;;;;29560:288;;:::o;30631:355::-;30790:28;30800:4;30806:2;30810:7;30790:9;:28::i;:::-;30851:48;30874:4;30880:2;30884:7;30893:5;30851:22;:48::i;:::-;30829:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;30631:355;;;;:::o;38297:46::-;;;;;;;;;;;;;;;;;;;:::o;40163:362::-;40229:13;40263:17;40271:8;40263:7;:17::i;:::-;40255:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;40348:1;40330:7;40324:21;;;;;:::i;:::-;;;:25;:193;;;;;;;;;;;;;;;;;40406:7;40430:26;40447:8;40430:16;:26::i;:::-;40473:13;;;;;;;;;;;;;;;;;40373:128;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40324:193;40317:200;;40163:362;;;:::o;38350:89::-;38397:42;38350:89;:::o;38207:83::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29919:164::-;30016:4;30040:18;:25;30059:5;30040:25;;;;;;;;;;;;;;;:35;30066:8;30040:35;;;;;;;;;;;;;;;;;;;;;;;;;30033:42;;29919:164;;;;:::o;40057:96::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40140:9:::1;40127:10;:22;;;;40057:96:::0;:::o;2822:201::-;2144:12;:10;:12::i;:::-;2133:23;;:7;:5;:7::i;:::-;:23;;;2125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2931:1:::1;2911:22;;:8;:22;;;;2903:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2987:28;3006:8;2987:18;:28::i;:::-;2822:201:::0;:::o;38498:39::-;38535:2;38498:39;:::o;22590:157::-;22675:4;22714:25;22699:40;;;:11;:40;;;;22692:47;;22590:157;;;:::o;654:98::-;707:7;734:10;727:17;;654:98;:::o;31241:111::-;31298:4;31332:12;;31322:7;:22;31315:29;;31241:111;;;:::o;35283:196::-;35425:2;35398:15;:24;35414:7;35398:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35463:7;35459:2;35443:28;;35452:5;35443:28;;;;;;;;;;;;35283:196;;;:::o;33382:1783::-;33497:35;33535:20;33547:7;33535:11;:20::i;:::-;33497:58;;33568:22;33610:13;:18;;;33594:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33669:12;:10;:12::i;:::-;33645:36;;:20;33657:7;33645:11;:20::i;:::-;:36;;;33594:87;:154;;;;33698:50;33715:13;:18;;;33735:12;:10;:12::i;:::-;33698:16;:50::i;:::-;33594:154;33568:181;;33770:17;33762:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33885:4;33863:26;;:13;:18;;;:26;;;33855:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33965:1;33951:16;;:2;:16;;;;33943:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34022:43;34044:4;34050:2;34054:7;34063:1;34022:21;:43::i;:::-;34130:49;34147:1;34151:7;34160:13;:18;;;34130:8;:49::i;:::-;34414:1;34384:12;:18;34397:4;34384:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34458:1;34430:12;:16;34443:2;34430:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34506:43;;;;;;;;34521:2;34506:43;;;;;;34532:15;34506:43;;;;;34483:11;:20;34495:7;34483:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34789:19;34821:1;34811:7;:11;;;;:::i;:::-;34789:33;;34878:1;34837:43;;:11;:24;34849:11;34837:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34833:227;;;34901:20;34909:11;34901:7;:20::i;:::-;34897:152;;;34969:64;;;;;;;;34984:13;:18;;;34969:64;;;;;;35004:13;:28;;;34969:64;;;;;34942:11;:24;34954:11;34942:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34897:152;34833:227;35096:7;35092:2;35077:27;;35086:4;35077:27;;;;;;;;;;;;35115:42;35136:4;35142:2;35146:7;35155:1;35115:20;:42::i;:::-;33382:1783;;;;;;:::o;26988:472::-;27049:21;;:::i;:::-;27091:16;27099:7;27091;:16::i;:::-;27083:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27172:12;27187:7;27172:22;;27167:216;27221:31;27255:11;:17;27267:4;27255:17;;;;;;;;;;;27221:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27317:1;27291:28;;:9;:14;;;:28;;;27287:85;;27347:9;27340:16;;;;;;27287:85;27167:216;27198:6;;;;;:::i;:::-;;;;27167:216;;26988:472;;;;:::o;3183:191::-;3257:16;3276:6;;;;;;;;;;;3257:25;;3302:8;3293:6;;:17;;;;;;;;;;;;;;;;;;3357:8;3326:40;;3347:8;3326:40;;;;;;;;;;;;3183:191;;:::o;31360:104::-;31429:27;31439:2;31443:8;31429:27;;;;;;;;;;;;:9;:27::i;:::-;31360:104;;:::o;36044:804::-;36199:4;36220:15;:2;:13;;;:15::i;:::-;36216:625;;;36272:2;36256:36;;;36293:12;:10;:12::i;:::-;36307:4;36313:7;36322:5;36256:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36252:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36519:1;36502:6;:13;:18;36498:273;;;36545:61;;;;;;;;;;:::i;:::-;;;;;;;;36498:273;36721:6;36715:13;36706:6;36702:2;36698:15;36691:38;36252:534;36389:45;;;36379:55;;;:6;:55;;;;36372:62;;;;;36216:625;36825:4;36818:11;;36044:804;;;;;;;:::o;3731:723::-;3787:13;4017:1;4008:5;:10;4004:53;;;4035:10;;;;;;;;;;;;;;;;;;;;;4004:53;4067:12;4082:5;4067:20;;4098:14;4123:78;4138:1;4130:4;:9;4123:78;;4156:8;;;;;:::i;:::-;;;;4187:2;4179:10;;;;;:::i;:::-;;;4123:78;;;4211:19;4243:6;4233:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4211:39;;4261:154;4277:1;4268:5;:10;4261:154;;4305:1;4295:11;;;;;:::i;:::-;;;4372:2;4364:5;:10;;;;:::i;:::-;4351:2;:24;;;;:::i;:::-;4338:39;;4321:6;4328;4321:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;4401:2;4392:11;;;;;:::i;:::-;;;4261:154;;;4439:6;4425:21;;;;;3731:723;;;;:::o;37336:159::-;;;;;:::o;37907:158::-;;;;;:::o;31741:1387::-;31864:20;31887:12;;31864:35;;31932:1;31918:16;;:2;:16;;;;31910:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32117:21;32125:12;32117:7;:21::i;:::-;32116:22;32108:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32202:1;32191:8;:12;32183:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32256:61;32286:1;32290:2;32294:12;32308:8;32256:21;:61::i;:::-;32330:30;32363:12;:16;32376:2;32363:16;;;;;;;;;;;;;;;32330:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32409:135;;;;;;;;32465:8;32435:11;:19;;;:39;;;;:::i;:::-;32409:135;;;;;;32524:8;32489:11;:24;;;:44;;;;:::i;:::-;32409:135;;;;;32390:12;:16;32403:2;32390:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32583:43;;;;;;;;32598:2;32583:43;;;;;;32609:15;32583:43;;;;;32555:11;:25;32567:12;32555:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32639:20;32662:12;32639:35;;32692:9;32687:325;32711:8;32707:1;:12;32687:325;;;32771:12;32767:2;32746:38;;32763:1;32746:38;;;;;;;;;;;;32825:59;32856:1;32860:2;32864:12;32878:5;32825:22;:59::i;:::-;32799:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;32986:14;;;;;:::i;:::-;;;;32721:3;;;;;:::i;:::-;;;;32687:325;;;;33037:12;33022;:27;;;;33060:60;33089:1;33093:2;33097:12;33111:8;33060:20;:60::i;:::-;31741:1387;;;;;;:::o;14482:387::-;14542:4;14750:12;14817:7;14805:20;14797:28;;14860:1;14853:4;:8;14846:15;;;14482:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:118::-;6433:24;6451:5;6433:24;:::i;:::-;6428:3;6421:37;6411:53;;:::o;6470:109::-;6551:21;6566:5;6551:21;:::i;:::-;6546:3;6539:34;6529:50;;:::o;6585:360::-;;6699:38;6731:5;6699:38;:::i;:::-;6753:70;6816:6;6811:3;6753:70;:::i;:::-;6746:77;;6832:52;6877:6;6872:3;6865:4;6858:5;6854:16;6832:52;:::i;:::-;6909:29;6931:6;6909:29;:::i;:::-;6904:3;6900:39;6893:46;;6675:270;;;;;:::o;6951:364::-;;7067:39;7100:5;7067:39;:::i;:::-;7122:71;7186:6;7181:3;7122:71;:::i;:::-;7115:78;;7202:52;7247:6;7242:3;7235:4;7228:5;7224:16;7202:52;:::i;:::-;7279:29;7301:6;7279:29;:::i;:::-;7274:3;7270:39;7263:46;;7043:272;;;;;:::o;7321:377::-;;7455:39;7488:5;7455:39;:::i;:::-;7510:89;7592:6;7587:3;7510:89;:::i;:::-;7503:96;;7608:52;7653:6;7648:3;7641:4;7634:5;7630:16;7608:52;:::i;:::-;7685:6;7680:3;7676:16;7669:23;;7431:267;;;;;:::o;7728:845::-;;7868:5;7862:12;7897:36;7923:9;7897:36;:::i;:::-;7949:89;8031:6;8026:3;7949:89;:::i;:::-;7942:96;;8069:1;8058:9;8054:17;8085:1;8080:137;;;;8231:1;8226:341;;;;8047:520;;8080:137;8164:4;8160:9;8149;8145:25;8140:3;8133:38;8200:6;8195:3;8191:16;8184:23;;8080:137;;8226:341;8293:38;8325:5;8293:38;:::i;:::-;8353:1;8367:154;8381:6;8378:1;8375:13;8367:154;;;8455:7;8449:14;8445:1;8440:3;8436:11;8429:35;8505:1;8496:7;8492:15;8481:26;;8403:4;8400:1;8396:12;8391:17;;8367:154;;;8550:6;8545:3;8541:16;8534:23;;8233:334;;8047:520;;7835:738;;;;;;:::o;8579:366::-;;8742:67;8806:2;8801:3;8742:67;:::i;:::-;8735:74;;8839:34;8835:1;8830:3;8826:11;8819:55;8905:4;8900:2;8895:3;8891:12;8884:26;8936:2;8931:3;8927:12;8920:19;;8725:220;;;:::o;8951:303::-;;9114:66;9178:1;9173:3;9114:66;:::i;:::-;9107:73;;9210:8;9206:1;9201:3;9197:11;9190:29;9245:2;9240:3;9236:12;9229:19;;9097:157;;;:::o;9260:370::-;;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9520:34;9516:1;9511:3;9507:11;9500:55;9586:8;9581:2;9576:3;9572:12;9565:30;9621:2;9616:3;9612:12;9605:19;;9406:224;;;:::o;9636:374::-;;9799:67;9863:2;9858:3;9799:67;:::i;:::-;9792:74;;9896:34;9892:1;9887:3;9883:11;9876:55;9962:12;9957:2;9952:3;9948:12;9941:34;10001:2;9996:3;9992:12;9985:19;;9782:228;;;:::o;10016:308::-;;10179:67;10243:2;10238:3;10179:67;:::i;:::-;10172:74;;10276:12;10272:1;10267:3;10263:11;10256:33;10315:2;10310:3;10306:12;10299:19;;10162:162;;;:::o;10330:320::-;;10493:67;10557:2;10552:3;10493:67;:::i;:::-;10486:74;;10590:24;10586:1;10581:3;10577:11;10570:45;10641:2;10636:3;10632:12;10625:19;;10476:174;;;:::o;10656:367::-;;10819:67;10883:2;10878:3;10819:67;:::i;:::-;10812:74;;10916:34;10912:1;10907:3;10903:11;10896:55;10982:5;10977:2;10972:3;10968:12;10961:27;11014:2;11009:3;11005:12;10998:19;;10802:221;;;:::o;11029:369::-;;11192:67;11256:2;11251:3;11192:67;:::i;:::-;11185:74;;11289:34;11285:1;11280:3;11276:11;11269:55;11355:7;11350:2;11345:3;11341:12;11334:29;11389:2;11384:3;11380:12;11373:19;;11175:223;;;:::o;11404:320::-;;11567:67;11631:2;11626:3;11567:67;:::i;:::-;11560:74;;11664:24;11660:1;11655:3;11651:11;11644:45;11715:2;11710:3;11706:12;11699:19;;11550:174;;;:::o;11730:389::-;;11893:67;11957:2;11952:3;11893:67;:::i;:::-;11886:74;;11990:34;11986:1;11981:3;11977:11;11970:55;12056:27;12051:2;12046:3;12042:12;12035:49;12110:2;12105:3;12101:12;12094:19;;11876:243;;;:::o;12125:316::-;;12288:67;12352:2;12347:3;12288:67;:::i;:::-;12281:74;;12385:20;12381:1;12376:3;12372:11;12365:41;12432:2;12427:3;12423:12;12416:19;;12271:170;;;:::o;12447:375::-;;12610:67;12674:2;12669:3;12610:67;:::i;:::-;12603:74;;12707:34;12703:1;12698:3;12694:11;12687:55;12773:13;12768:2;12763:3;12759:12;12752:35;12813:2;12808:3;12804:12;12797:19;;12593:229;;;:::o;12828:319::-;;12991:67;13055:2;13050:3;12991:67;:::i;:::-;12984:74;;13088:23;13084:1;13079:3;13075:11;13068:44;13138:2;13133:3;13129:12;13122:19;;12974:173;;;:::o;13153:370::-;;13316:67;13380:2;13375:3;13316:67;:::i;:::-;13309:74;;13413:34;13409:1;13404:3;13400:11;13393:55;13479:8;13474:2;13469:3;13465:12;13458:30;13514:2;13509:3;13505:12;13498:19;;13299:224;;;:::o;13529:330::-;;13692:67;13756:2;13751:3;13692:67;:::i;:::-;13685:74;;13789:34;13785:1;13780:3;13776:11;13769:55;13850:2;13845:3;13841:12;13834:19;;13675:184;;;:::o;13865:324::-;;14028:67;14092:2;14087:3;14028:67;:::i;:::-;14021:74;;14125:28;14121:1;14116:3;14112:11;14105:49;14180:2;14175:3;14171:12;14164:19;;14011:178;;;:::o;14195:382::-;;14358:67;14422:2;14417:3;14358:67;:::i;:::-;14351:74;;14455:34;14451:1;14446:3;14442:11;14435:55;14521:20;14516:2;14511:3;14507:12;14500:42;14568:2;14563:3;14559:12;14552:19;;14341:236;;;:::o;14583:320::-;;14746:67;14810:2;14805:3;14746:67;:::i;:::-;14739:74;;14843:24;14839:1;14834:3;14830:11;14823:45;14894:2;14889:3;14885:12;14878:19;;14729:174;;;:::o;14909:366::-;;15072:67;15136:2;15131:3;15072:67;:::i;:::-;15065:74;;15169:34;15165:1;15160:3;15156:11;15149:55;15235:4;15230:2;15225:3;15221:12;15214:26;15266:2;15261:3;15257:12;15250:19;;15055:220;;;:::o;15281:297::-;;15461:83;15542:1;15537:3;15461:83;:::i;:::-;15454:90;;15570:1;15565:3;15561:11;15554:18;;15444:134;;;:::o;15584:367::-;;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15844:34;15840:1;15835:3;15831:11;15824:55;15910:5;15905:2;15900:3;15896:12;15889:27;15942:2;15937:3;15933:12;15926:19;;15730:221;;;:::o;15957:383::-;;16120:67;16184:2;16179:3;16120:67;:::i;:::-;16113:74;;16217:34;16213:1;16208:3;16204:11;16197:55;16283:21;16278:2;16273:3;16269:12;16262:43;16331:2;16326:3;16322:12;16315:19;;16103:237;;;:::o;16346:327::-;;16509:67;16573:2;16568:3;16509:67;:::i;:::-;16502:74;;16606:31;16602:1;16597:3;16593:11;16586:52;16664:2;16659:3;16655:12;16648:19;;16492:181;;;:::o;16679:365::-;;16842:67;16906:2;16901:3;16842:67;:::i;:::-;16835:74;;16939:34;16935:1;16930:3;16926:11;16919:55;17005:3;17000:2;16995:3;16991:12;16984:25;17035:2;17030:3;17026:12;17019:19;;16825:219;;;:::o;17050:312::-;;17213:67;17277:2;17272:3;17213:67;:::i;:::-;17206:74;;17310:16;17306:1;17301:3;17297:11;17290:37;17353:2;17348:3;17344:12;17337:19;;17196:166;;;:::o;17368:378::-;;17531:67;17595:2;17590:3;17531:67;:::i;:::-;17524:74;;17628:34;17624:1;17619:3;17615:11;17608:55;17694:16;17689:2;17684:3;17680:12;17673:38;17737:2;17732:3;17728:12;17721:19;;17514:232;;;:::o;18137:377::-;;18300:67;18364:2;18359:3;18300:67;:::i;:::-;18293:74;;18397:34;18393:1;18388:3;18384:11;18377:55;18463:15;18458:2;18453:3;18449:12;18442:37;18505:2;18500:3;18496:12;18489:19;;18283:231;;;:::o;18520:310::-;;18683:67;18747:2;18742:3;18683:67;:::i;:::-;18676:74;;18780:14;18776:1;18771:3;18767:11;18760:35;18821:2;18816:3;18812:12;18805:19;;18666:164;;;:::o;18836:118::-;18923:24;18941:5;18923:24;:::i;:::-;18918:3;18911:37;18901:53;;:::o;18960:589::-;;19207:92;19295:3;19286:6;19207:92;:::i;:::-;19200:99;;19316:95;19407:3;19398:6;19316:95;:::i;:::-;19309:102;;19428:95;19519:3;19510:6;19428:95;:::i;:::-;19421:102;;19540:3;19533:10;;19189:360;;;;;;:::o;19555:379::-;;19761:147;19904:3;19761:147;:::i;:::-;19754:154;;19925:3;19918:10;;19743:191;;;:::o;19940:222::-;;20071:2;20060:9;20056:18;20048:26;;20084:71;20152:1;20141:9;20137:17;20128:6;20084:71;:::i;:::-;20038:124;;;;:::o;20168:640::-;;20401:3;20390:9;20386:19;20378:27;;20415:71;20483:1;20472:9;20468:17;20459:6;20415:71;:::i;:::-;20496:72;20564:2;20553:9;20549:18;20540:6;20496:72;:::i;:::-;20578;20646:2;20635:9;20631:18;20622:6;20578:72;:::i;:::-;20697:9;20691:4;20687:20;20682:2;20671:9;20667:18;20660:48;20725:76;20796:4;20787:6;20725:76;:::i;:::-;20717:84;;20368:440;;;;;;;:::o;20814:210::-;;20939:2;20928:9;20924:18;20916:26;;20952:65;21014:1;21003:9;20999:17;20990:6;20952:65;:::i;:::-;20906:118;;;;:::o;21030:313::-;;21181:2;21170:9;21166:18;21158:26;;21230:9;21224:4;21220:20;21216:1;21205:9;21201:17;21194:47;21258:78;21331:4;21322:6;21258:78;:::i;:::-;21250:86;;21148:195;;;;:::o;21349:419::-;;21553:2;21542:9;21538:18;21530:26;;21602:9;21596:4;21592:20;21588:1;21577:9;21573:17;21566:47;21630:131;21756:4;21630:131;:::i;:::-;21622:139;;21520:248;;;:::o;21774:419::-;;21978:2;21967:9;21963:18;21955:26;;22027:9;22021:4;22017:20;22013:1;22002:9;21998:17;21991:47;22055:131;22181:4;22055:131;:::i;:::-;22047:139;;21945:248;;;:::o;22199:419::-;;22403:2;22392:9;22388:18;22380:26;;22452:9;22446:4;22442:20;22438:1;22427:9;22423:17;22416:47;22480:131;22606:4;22480:131;:::i;:::-;22472:139;;22370:248;;;:::o;22624:419::-;;22828:2;22817:9;22813:18;22805:26;;22877:9;22871:4;22867:20;22863:1;22852:9;22848:17;22841:47;22905:131;23031:4;22905:131;:::i;:::-;22897:139;;22795:248;;;:::o;23049:419::-;;23253:2;23242:9;23238:18;23230:26;;23302:9;23296:4;23292:20;23288:1;23277:9;23273:17;23266:47;23330:131;23456:4;23330:131;:::i;:::-;23322:139;;23220:248;;;:::o;23474:419::-;;23678:2;23667:9;23663:18;23655:26;;23727:9;23721:4;23717:20;23713:1;23702:9;23698:17;23691:47;23755:131;23881:4;23755:131;:::i;:::-;23747:139;;23645:248;;;:::o;23899:419::-;;24103:2;24092:9;24088:18;24080:26;;24152:9;24146:4;24142:20;24138:1;24127:9;24123:17;24116:47;24180:131;24306:4;24180:131;:::i;:::-;24172:139;;24070:248;;;:::o;24324:419::-;;24528:2;24517:9;24513:18;24505:26;;24577:9;24571:4;24567:20;24563:1;24552:9;24548:17;24541:47;24605:131;24731:4;24605:131;:::i;:::-;24597:139;;24495:248;;;:::o;24749:419::-;;24953:2;24942:9;24938:18;24930:26;;25002:9;24996:4;24992:20;24988:1;24977:9;24973:17;24966:47;25030:131;25156:4;25030:131;:::i;:::-;25022:139;;24920:248;;;:::o;25174:419::-;;25378:2;25367:9;25363:18;25355:26;;25427:9;25421:4;25417:20;25413:1;25402:9;25398:17;25391:47;25455:131;25581:4;25455:131;:::i;:::-;25447:139;;25345:248;;;:::o;25599:419::-;;25803:2;25792:9;25788:18;25780:26;;25852:9;25846:4;25842:20;25838:1;25827:9;25823:17;25816:47;25880:131;26006:4;25880:131;:::i;:::-;25872:139;;25770:248;;;:::o;26024:419::-;;26228:2;26217:9;26213:18;26205:26;;26277:9;26271:4;26267:20;26263:1;26252:9;26248:17;26241:47;26305:131;26431:4;26305:131;:::i;:::-;26297:139;;26195:248;;;:::o;26449:419::-;;26653:2;26642:9;26638:18;26630:26;;26702:9;26696:4;26692:20;26688:1;26677:9;26673:17;26666:47;26730:131;26856:4;26730:131;:::i;:::-;26722:139;;26620:248;;;:::o;26874:419::-;;27078:2;27067:9;27063:18;27055:26;;27127:9;27121:4;27117:20;27113:1;27102:9;27098:17;27091:47;27155:131;27281:4;27155:131;:::i;:::-;27147:139;;27045:248;;;:::o;27299:419::-;;27503:2;27492:9;27488:18;27480:26;;27552:9;27546:4;27542:20;27538:1;27527:9;27523:17;27516:47;27580:131;27706:4;27580:131;:::i;:::-;27572:139;;27470:248;;;:::o;27724:419::-;;27928:2;27917:9;27913:18;27905:26;;27977:9;27971:4;27967:20;27963:1;27952:9;27948:17;27941:47;28005:131;28131:4;28005:131;:::i;:::-;27997:139;;27895:248;;;:::o;28149:419::-;;28353:2;28342:9;28338:18;28330:26;;28402:9;28396:4;28392:20;28388:1;28377:9;28373:17;28366:47;28430:131;28556:4;28430:131;:::i;:::-;28422:139;;28320:248;;;:::o;28574:419::-;;28778:2;28767:9;28763:18;28755:26;;28827:9;28821:4;28817:20;28813:1;28802:9;28798:17;28791:47;28855:131;28981:4;28855:131;:::i;:::-;28847:139;;28745:248;;;:::o;28999:419::-;;29203:2;29192:9;29188:18;29180:26;;29252:9;29246:4;29242:20;29238:1;29227:9;29223:17;29216:47;29280:131;29406:4;29280:131;:::i;:::-;29272:139;;29170:248;;;:::o;29424:419::-;;29628:2;29617:9;29613:18;29605:26;;29677:9;29671:4;29667:20;29663:1;29652:9;29648:17;29641:47;29705:131;29831:4;29705:131;:::i;:::-;29697:139;;29595:248;;;:::o;29849:419::-;;30053:2;30042:9;30038:18;30030:26;;30102:9;30096:4;30092:20;30088:1;30077:9;30073:17;30066:47;30130:131;30256:4;30130:131;:::i;:::-;30122:139;;30020:248;;;:::o;30274:419::-;;30478:2;30467:9;30463:18;30455:26;;30527:9;30521:4;30517:20;30513:1;30502:9;30498:17;30491:47;30555:131;30681:4;30555:131;:::i;:::-;30547:139;;30445:248;;;:::o;30699:419::-;;30903:2;30892:9;30888:18;30880:26;;30952:9;30946:4;30942:20;30938:1;30927:9;30923:17;30916:47;30980:131;31106:4;30980:131;:::i;:::-;30972:139;;30870:248;;;:::o;31124:419::-;;31328:2;31317:9;31313:18;31305:26;;31377:9;31371:4;31367:20;31363:1;31352:9;31348:17;31341:47;31405:131;31531:4;31405:131;:::i;:::-;31397:139;;31295:248;;;:::o;31549:419::-;;31753:2;31742:9;31738:18;31730:26;;31802:9;31796:4;31792:20;31788:1;31777:9;31773:17;31766:47;31830:131;31956:4;31830:131;:::i;:::-;31822:139;;31720:248;;;:::o;32399:419::-;;32603:2;32592:9;32588:18;32580:26;;32652:9;32646:4;32642:20;32638:1;32627:9;32623:17;32616:47;32680:131;32806:4;32680:131;:::i;:::-;32672:139;;32570:248;;;:::o;32824:419::-;;33028:2;33017:9;33013:18;33005:26;;33077:9;33071:4;33067:20;33063:1;33052:9;33048:17;33041:47;33105:131;33231:4;33105:131;:::i;:::-;33097:139;;32995:248;;;:::o;33249:222::-;;33380:2;33369:9;33365:18;33357:26;;33393:71;33461:1;33450:9;33446:17;33437:6;33393:71;:::i;:::-;33347:124;;;;:::o;33477:283::-;;33543:2;33537:9;33527:19;;33585:4;33577:6;33573:17;33692:6;33680:10;33677:22;33656:18;33644:10;33641:34;33638:62;33635:2;;;33703:18;;:::i;:::-;33635:2;33743:10;33739:2;33732:22;33517:243;;;;:::o;33766:331::-;;33917:18;33909:6;33906:30;33903:2;;;33939:18;;:::i;:::-;33903:2;34024:4;34020:9;34013:4;34005:6;34001:17;33997:33;33989:41;;34085:4;34079;34075:15;34067:23;;33832:265;;;:::o;34103:332::-;;34255:18;34247:6;34244:30;34241:2;;;34277:18;;:::i;:::-;34241:2;34362:4;34358:9;34351:4;34343:6;34339:17;34335:33;34327:41;;34423:4;34417;34413:15;34405:23;;34170:265;;;:::o;34441:141::-;;34513:3;34505:11;;34536:3;34533:1;34526:14;34570:4;34567:1;34557:18;34549:26;;34495:87;;;:::o;34588:98::-;;34673:5;34667:12;34657:22;;34646:40;;;:::o;34692:99::-;;34778:5;34772:12;34762:22;;34751:40;;;:::o;34797:168::-;;34914:6;34909:3;34902:19;34954:4;34949:3;34945:14;34930:29;;34892:73;;;;:::o;34971:147::-;;35109:3;35094:18;;35084:34;;;;:::o;35124:169::-;;35242:6;35237:3;35230:19;35282:4;35277:3;35273:14;35258:29;;35220:73;;;;:::o;35299:148::-;;35438:3;35423:18;;35413:34;;;;:::o;35453:273::-;;35512:20;35530:1;35512:20;:::i;:::-;35507:25;;35546:20;35564:1;35546:20;:::i;:::-;35541:25;;35668:1;35632:34;35628:42;35625:1;35622:49;35619:2;;;35674:18;;:::i;:::-;35619:2;35718:1;35715;35711:9;35704:16;;35497:229;;;;:::o;35732:305::-;;35791:20;35809:1;35791:20;:::i;:::-;35786:25;;35825:20;35843:1;35825:20;:::i;:::-;35820:25;;35979:1;35911:66;35907:74;35904:1;35901:81;35898:2;;;35985:18;;:::i;:::-;35898:2;36029:1;36026;36022:9;36015:16;;35776:261;;;;:::o;36043:185::-;;36100:20;36118:1;36100:20;:::i;:::-;36095:25;;36134:20;36152:1;36134:20;:::i;:::-;36129:25;;36173:1;36163:2;;36178:18;;:::i;:::-;36163:2;36220:1;36217;36213:9;36208:14;;36085:143;;;;:::o;36234:348::-;;36297:20;36315:1;36297:20;:::i;:::-;36292:25;;36331:20;36349:1;36331:20;:::i;:::-;36326:25;;36519:1;36451:66;36447:74;36444:1;36441:81;36436:1;36429:9;36422:17;36418:105;36415:2;;;36526:18;;:::i;:::-;36415:2;36574:1;36571;36567:9;36556:20;;36282:300;;;;:::o;36588:191::-;;36648:20;36666:1;36648:20;:::i;:::-;36643:25;;36682:20;36700:1;36682:20;:::i;:::-;36677:25;;36721:1;36718;36715:8;36712:2;;;36726:18;;:::i;:::-;36712:2;36771:1;36768;36764:9;36756:17;;36633:146;;;;:::o;36785:96::-;;36851:24;36869:5;36851:24;:::i;:::-;36840:35;;36830:51;;;:::o;36887:90::-;;36964:5;36957:13;36950:21;36939:32;;36929:48;;;:::o;36983:149::-;;37059:66;37052:5;37048:78;37037:89;;37027:105;;;:::o;37138:118::-;;37215:34;37208:5;37204:46;37193:57;;37183:73;;;:::o;37262:126::-;;37339:42;37332:5;37328:54;37317:65;;37307:81;;;:::o;37394:77::-;;37460:5;37449:16;;37439:32;;;:::o;37477:154::-;37561:6;37556:3;37551;37538:30;37623:1;37614:6;37609:3;37605:16;37598:27;37528:103;;;:::o;37637:307::-;37705:1;37715:113;37729:6;37726:1;37723:13;37715:113;;;37814:1;37809:3;37805:11;37799:18;37795:1;37790:3;37786:11;37779:39;37751:2;37748:1;37744:10;37739:15;;37715:113;;;37846:6;37843:1;37840:13;37837:2;;;37926:1;37917:6;37912:3;37908:16;37901:27;37837:2;37686:258;;;;:::o;37950:171::-;;38012:24;38030:5;38012:24;:::i;:::-;38003:33;;38058:4;38051:5;38048:15;38045:2;;;38066:18;;:::i;:::-;38045:2;38113:1;38106:5;38102:13;38095:20;;37993:128;;;:::o;38127:320::-;;38208:1;38202:4;38198:12;38188:22;;38255:1;38249:4;38245:12;38276:18;38266:2;;38332:4;38324:6;38320:17;38310:27;;38266:2;38394;38386:6;38383:14;38363:18;38360:38;38357:2;;;38413:18;;:::i;:::-;38357:2;38178:269;;;;:::o;38453:233::-;;38515:24;38533:5;38515:24;:::i;:::-;38506:33;;38561:66;38554:5;38551:77;38548:2;;;38631:18;;:::i;:::-;38548:2;38678:1;38671:5;38667:13;38660:20;;38496:190;;;:::o;38692:176::-;;38741:20;38759:1;38741:20;:::i;:::-;38736:25;;38775:20;38793:1;38775:20;:::i;:::-;38770:25;;38814:1;38804:2;;38819:18;;:::i;:::-;38804:2;38860:1;38857;38853:9;38848:14;;38726:142;;;;:::o;38874:180::-;38922:77;38919:1;38912:88;39019:4;39016:1;39009:15;39043:4;39040:1;39033:15;39060:180;39108:77;39105:1;39098:88;39205:4;39202:1;39195:15;39229:4;39226:1;39219:15;39246:180;39294:77;39291:1;39284:88;39391:4;39388:1;39381:15;39415:4;39412:1;39405:15;39432:180;39480:77;39477:1;39470:88;39577:4;39574:1;39567:15;39601:4;39598:1;39591:15;39618:102;;39710:2;39706:7;39701:2;39694:5;39690:14;39686:28;39676:38;;39666:54;;;:::o;39726:122::-;39799:24;39817:5;39799:24;:::i;:::-;39792:5;39789:35;39779:2;;39838:1;39835;39828:12;39779:2;39769:79;:::o;39854:116::-;39924:21;39939:5;39924:21;:::i;:::-;39917:5;39914:32;39904:2;;39960:1;39957;39950:12;39904:2;39894:76;:::o;39976:120::-;40048:23;40065:5;40048:23;:::i;:::-;40041:5;40038:34;40028:2;;40086:1;40083;40076:12;40028:2;40018:78;:::o;40102:122::-;40175:24;40193:5;40175:24;:::i;:::-;40168:5;40165:35;40155:2;;40214:1;40211;40204:12;40155:2;40145:79;:::o
Swarm Source
ipfs://8a014dc32f451101ced70fa840e2c440343607d71585818dd3d35d3693000111
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.