Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
216 AE
Holders
87
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
12 AELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AggroEagles
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-08 */ /** *Submitted for verification at Etherscan.io on 2021-07-13 */ /** *Submitted for verification at Etherscan.io on 2021-06-29 */ pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @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 @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // 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; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @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}. 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 virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: 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 virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: 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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), 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("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @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); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts/AggroEagles.sol /* ---------:::::::::.........................:. .:--------:.............:::::::::--------- ------:::::::::............:---===::::::::::::.:===========-.:::::.........:::::::::------ ----::::::::.......... .:-========-:::::::::::============-------::..........::::::::---- --::::::::......... -===========-:::::::::::===========-----------. .........::::::::-- -:::::::........ ....::============-:::::::::::===========-----------:::..........:::::::- ::::::........ .:--------===========::::::::::-===========----------------. ........:::::: ::::........ :---------===========::::::::::-============---------------: ........:::: :::....... :---------===========-::::::::::============---------------:. .......::: :....... .:-----------==========-::::::::::-=============---------------:. .......: ....... .-------------===========:::::::::::=============----------------: ....... ...... .-------------===========::::::::::-=============----------------. ...... .... .:--------------==========-::::::::::==============---------------:. .... ... .----------------==========-::::::::::-============-----------------: ... ... .----------------=++**+====-::::--:--:-=========+++-----------------. .. .. :--------------#%%%%%%%%*=-:::::=%%+::-=====*%%%%%%#=---------------. .. . .--------------+%%%%#=%%%%*:::::=#%%%+:-===*%%%%=%%%%%---------------: . :--------------*%%%%-#=%%%%#*+*%%%%%%%*=+*%%%%%+*=%%%%=-------------: .--------------=%%%%:@*@@%%%%%%#**++**#%%%%%%@%*%:%%%*-------------- ---------------*%%%-#@@@+%@%%+=+*==+==*%%@#+@@@++%%#---------------: :--------------==*%%%****#%%%+++#===+*+++%%%*+*+*%%*=---------------. .--------------====*#%%%%%%#++#%+====+%#++%%%%%%#*===--------------. .-------------===+#%*+++++=+**=======+**+++++++**==---------------. :-------------===++%#+++****============****+++#%*=--------------: .::----------====--=*%%#*++*============*+*##%%+#+--------------: .------------------*%%%%%%*+========+#%%%%%%#*--=-------------- :-----------------+*#%%%%%%*=====+#%%%%%%#**===--------------. .------------------=#%%%%%%#===+%%%%%%%#*+====-------------. -------------------=%##%%%%*==#%%#%*#%*=---=*=-----------: .---------------=*::=**+*%%##%%%=#=**=-+..*=-----------: . -#*==+++%+--------=*:.=+*#%%%%%%*-=+=--=..*=-----------*#- . .. *@#**+--#+-+*-----=*=#: ==++*%%+++=*==-= :*----*=--+=.=**#%*. .. .. +@+ :#=+#*%--=-+*++=*- -=-=%%=-++-==- -+-==-=%##+=#- .-* .. ... .#*. %#+-. %=-=*+++++=*= ---*+-*+=-=- =+--+=++# :*#*%. :+ ... .... =%: . @==#**+++-.:*+ -===+==-=: +=-==*+*=%*: :. -- .... ...... :%+ .====#+====%*#***+**-=-=** :+#++-=: +**=++****%-#+::::. +. ..... ....... =%: -*#+*#############***=+******.:=*==..+*##+**+**##########*=: :=++ ....... :......** :+###+=-:::::-=*######***%+*##%+*..=- .**##**++**###*+++**##**##+=+: .......: :::...#+.=###=:...-====....=%###%#**#=*##%++*:.=:*+#*+*#***##:....:::.:-=*#####-.......::: ::::.*%*###*.....*#--*+....-%##%*=-*+*%**#*+++-+++*****+**###:...=#+--==:..-+####+=:..:::: :::-+%####%-......:::.....+#*=#%#*##***#%+=========+##+++*####+:..:====*#:...:*##****=-::: -+##*#######+-.......:-=*#####%#%#%#+**+#+===++=====*****+*%####*=-............%##**++**+= #+**+=########%##*###########%#%%#%**#+**+====++===+**#%####%%-+*+*#*+==--::-=*%#####**+*# *+**#####################-=#%%%%%%#+#*+#*+========+*===+%#####%**++#######*####**########* ###########################%%#**#%**#++#%*#+++++**=%#:::=%#####%###########*############## ###########################%#%##%#+#***#%#%%****#%#+%+:::+%#####%%############**##***##### */ pragma solidity ^0.8.0; contract AggroEagles is ERC721Enumerable, Ownable { uint public constant MAX_EAGLES = 10000; string _baseTokenURI; bool public paused = true; constructor(string memory baseURI) ERC721("Aggro Eagles", "AE") { setBaseURI(baseURI); } modifier saleIsOpen{ require(totalSupply() < MAX_EAGLES, "Sale end"); _; } /** * Eagles reserved for promotions and Dev Team */ function reserveEagles() public onlyOwner { uint supply = totalSupply(); uint i; for (i = 0; i < 100; i++) { _safeMint(msg.sender, supply + i); } } function mintEagles(address _to, uint _count) public payable saleIsOpen { if(msg.sender != owner()){ require(!paused, "Paused"); } require(totalSupply() + _count <= MAX_EAGLES, "Max limit"); require(totalSupply() < MAX_EAGLES, "Sale end"); require(_count <= 36, "Exceeds 36"); require(msg.value >= price(_count), "Value below price"); for(uint i = 0; i < _count; i++){ _safeMint(_to, totalSupply()); } } function price(uint _count) public view returns (uint256) { uint _id = totalSupply(); // testing 10 if(_id <= 10 ){ require(_count <= 1, "Max 1 Free Per TX"); return 0; } return 36000000000000000 * _count; // 0.0360 ETH } function contractURI() public view returns (string memory) { return "https://gateway.pinata.cloud/ipfs/QmX7xmneJ1GXny1dJtMh86oSHjjiK8he9ouCsqYWtxvRm9"; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function walletOfOwner(address _owner) external view returns(uint256[] memory) { uint tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function pause(bool val) public onlyOwner { paused = val; } function withdrawAll() public payable onlyOwner { require(payable(_msgSender()).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"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":"MAX_EAGLES","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":"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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintEagles","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":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveEagles","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":"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526001600c60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620047be380380620047be8339818101604052810190620000529190620003ba565b6040518060400160405280600c81526020017f416767726f204561676c657300000000000000000000000000000000000000008152506040518060400160405280600281526020017f41450000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d692919062000298565b508060019080519060200190620000ef92919062000298565b505050600062000104620001bb60201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001b481620001c360201b60201c565b50620005a5565b600033905090565b620001d3620001bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001f96200026e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000252576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002499062000441565b60405180910390fd5b80600b90805190602001906200026a92919062000298565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002a69062000511565b90600052602060002090601f016020900481019282620002ca576000855562000316565b82601f10620002e557805160ff191683800117855562000316565b8280016001018555821562000316579182015b8281111562000315578251825591602001919060010190620002f8565b5b50905062000325919062000329565b5090565b5b80821115620003445760008160009055506001016200032a565b5090565b60006200035f620003598462000497565b62000463565b9050828152602081018484840111156200037857600080fd5b62000385848285620004db565b509392505050565b600082601f8301126200039f57600080fd5b8151620003b184826020860162000348565b91505092915050565b600060208284031215620003cd57600080fd5b600082015167ffffffffffffffff811115620003e857600080fd5b620003f6848285016200038d565b91505092915050565b60006200040e602083620004ca565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200045c81620003ff565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200048d576200048c62000576565b5b8060405250919050565b600067ffffffffffffffff821115620004b557620004b462000576565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b83811015620004fb578082015181840152602081019050620004de565b838111156200050b576000848401525b50505050565b600060028204905060018216806200052a57607f821691505b6020821081141562000541576200054062000547565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61420980620005b56000396000f3fe6080604052600436106101c25760003560e01c806355f804b3116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610624578063e8a3d48514610661578063e985e9c51461068c578063f2fde38b146106c9576101c2565b806395d89b411461058b578063a22cb465146105b6578063b55d60d0146105df578063b88d4fde146105fb576101c2565b806370a08231116100d157806370a0823114610502578063715018a61461053f578063853828b6146105565780638da5cb5b14610560576101c2565b806355f804b3146104715780635c975abb1461049a5780636352211e146104c5576101c2565b806323b872dd1161016457806342842e0e1161013e57806342842e0e146103b7578063438b6300146103e05780634f6ccce71461041d5780635434a45a1461045a576101c2565b806323b872dd1461031457806326a49e371461033d5780632f745c591461037a576101c2565b8063081812fc116101a0578063081812fc14610258578063095ea7b31461029557806318160ddd146102be578063212710f7146102e9576101c2565b806301ffc9a7146101c757806302329a291461020457806306fdde031461022d575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612eac565b6106f2565b6040516101fb919061397e565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190612e83565b61076c565b005b34801561023957600080fd5b50610242610805565b60405161024f9190613999565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190612f3f565b610897565b60405161028c91906138f5565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612e47565b61091c565b005b3480156102ca57600080fd5b506102d3610a34565b6040516102e09190613cbb565b60405180910390f35b3480156102f557600080fd5b506102fe610a41565b60405161030b9190613cbb565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190612d41565b610a47565b005b34801561034957600080fd5b50610364600480360381019061035f9190612f3f565b610aa7565b6040516103719190613cbb565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190612e47565b610b26565b6040516103ae9190613cbb565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190612d41565b610bcb565b005b3480156103ec57600080fd5b5061040760048036038101906104029190612cdc565b610beb565b604051610414919061395c565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190612f3f565b610ce5565b6040516104519190613cbb565b60405180910390f35b34801561046657600080fd5b5061046f610d7c565b005b34801561047d57600080fd5b5061049860048036038101906104939190612efe565b610e3c565b005b3480156104a657600080fd5b506104af610ed2565b6040516104bc919061397e565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190612f3f565b610ee5565b6040516104f991906138f5565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190612cdc565b610f97565b6040516105369190613cbb565b60405180910390f35b34801561054b57600080fd5b5061055461104f565b005b61055e61118c565b005b34801561056c57600080fd5b5061057561124f565b60405161058291906138f5565b60405180910390f35b34801561059757600080fd5b506105a0611279565b6040516105ad9190613999565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190612e0b565b61130b565b005b6105f960048036038101906105f49190612e47565b61148c565b005b34801561060757600080fd5b50610622600480360381019061061d9190612d90565b6116c7565b005b34801561063057600080fd5b5061064b60048036038101906106469190612f3f565b611729565b6040516106589190613999565b60405180910390f35b34801561066d57600080fd5b506106766117d0565b6040516106839190613999565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190612d05565b6117f0565b6040516106c0919061397e565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190612cdc565b611884565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610765575061076482611a30565b5b9050919050565b610774611b12565b73ffffffffffffffffffffffffffffffffffffffff1661079261124f565b73ffffffffffffffffffffffffffffffffffffffff16146107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90613bbb565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b60606000805461081490613fae565b80601f016020809104026020016040519081016040528092919081815260200182805461084090613fae565b801561088d5780601f106108625761010080835404028352916020019161088d565b820191906000526020600020905b81548152906001019060200180831161087057829003601f168201915b5050505050905090565b60006108a282611b1a565b6108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613b9b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092782610ee5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90613c3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b7611b12565b73ffffffffffffffffffffffffffffffffffffffff1614806109e657506109e5816109e0611b12565b6117f0565b5b610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90613afb565b60405180910390fd5b610a2f8383611b86565b505050565b6000600880549050905090565b61271081565b610a58610a52611b12565b82611c3f565b610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90613c5b565b60405180910390fd5b610aa2838383611d1d565b505050565b600080610ab2610a34565b9050600a8111610b0a576001831115610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790613c9b565b60405180910390fd5b6000915050610b21565b82667fe5cf2bea0000610b1d9190613e6a565b9150505b919050565b6000610b3183610f97565b8210610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b69906139fb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610be6838383604051806020016040528060008152506116c7565b505050565b60606000610bf883610f97565b905060008167ffffffffffffffff811115610c3c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c6a5781602001602082028036833780820191505090505b50905060005b82811015610cda57610c828582610b26565b828281518110610cbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610cd290613fe0565b915050610c70565b508092505050919050565b6000610cef610a34565b8210610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790613c7b565b60405180910390fd5b60088281548110610d6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d84611b12565b73ffffffffffffffffffffffffffffffffffffffff16610da261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def90613bbb565b60405180910390fd5b6000610e02610a34565b905060005b6064811015610e3857610e25338284610e209190613de3565b611f79565b8080610e3090613fe0565b915050610e07565b5050565b610e44611b12565b73ffffffffffffffffffffffffffffffffffffffff16610e6261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90613bbb565b60405180910390fd5b80600b9080519060200190610ece929190612b00565b5050565b600c60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8590613b3b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613b1b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611057611b12565b73ffffffffffffffffffffffffffffffffffffffff1661107561124f565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290613bbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611194611b12565b73ffffffffffffffffffffffffffffffffffffffff166111b261124f565b73ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613bbb565b60405180910390fd5b611210611b12565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061124d57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461128890613fae565b80601f01602080910402602001604051908101604052809291908181526020018280546112b490613fae565b80156113015780601f106112d657610100808354040283529160200191611301565b820191906000526020600020905b8154815290600101906020018083116112e457829003601f168201915b5050505050905090565b611313611b12565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890613a9b565b60405180910390fd5b806005600061138e611b12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661143b611b12565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611480919061397e565b60405180910390a35050565b612710611497610a34565b106114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce90613b7b565b60405180910390fd5b6114df61124f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461156257600c60009054906101000a900460ff1615611561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611558906139bb565b60405180910390fd5b5b6127108161156e610a34565b6115789190613de3565b11156115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090613abb565b60405180910390fd5b6127106115c4610a34565b10611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb90613b7b565b60405180910390fd5b6024811115611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f906139db565b60405180910390fd5b61165181610aa7565b341015611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613c1b565b60405180910390fd5b60005b818110156116c2576116af836116aa610a34565b611f79565b80806116ba90613fe0565b915050611696565b505050565b6116d86116d2611b12565b83611c3f565b611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613c5b565b60405180910390fd5b61172384848484611f97565b50505050565b606061173482611b1a565b611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90613bfb565b60405180910390fd5b600061177d611ff3565b9050600081511161179d57604051806020016040528060008152506117c8565b806117a784612085565b6040516020016117b89291906138d1565b6040516020818303038152906040525b915050919050565b606060405180608001604052806050815260200161418460509139905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61188c611b12565b73ffffffffffffffffffffffffffffffffffffffff166118aa61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790613bbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790613a3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611afb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b0b5750611b0a82612232565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bf983610ee5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c4a82611b1a565b611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613adb565b60405180910390fd5b6000611c9483610ee5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d0357508373ffffffffffffffffffffffffffffffffffffffff16611ceb84610897565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d145750611d1381856117f0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d3d82610ee5565b73ffffffffffffffffffffffffffffffffffffffff1614611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613bdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa90613a7b565b60405180910390fd5b611e0e83838361229c565b611e19600082611b86565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e699190613ec4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec09190613de3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f938282604051806020016040528060008152506123b0565b5050565b611fa2848484611d1d565b611fae8484848461240b565b611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490613a1b565b60405180910390fd5b50505050565b6060600b805461200290613fae565b80601f016020809104026020016040519081016040528092919081815260200182805461202e90613fae565b801561207b5780601f106120505761010080835404028352916020019161207b565b820191906000526020600020905b81548152906001019060200180831161205e57829003601f168201915b5050505050905090565b606060008214156120cd576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061222d565b600082905060005b600082146120ff5780806120e890613fe0565b915050600a826120f89190613e39565b91506120d5565b60008167ffffffffffffffff811115612141577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121735781602001600182028036833780820191505090505b5090505b600085146122265760018261218c9190613ec4565b9150600a8561219b9190614029565b60306121a79190613de3565b60f81b8183815181106121e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561221f9190613e39565b9450612177565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122a78383836125a2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ea576122e5816125a7565b612329565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123285761232783826125f0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561236c576123678161275d565b6123ab565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123aa576123a982826128a0565b5b5b505050565b6123ba838361291f565b6123c7600084848461240b565b612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90613a1b565b60405180910390fd5b505050565b600061242c8473ffffffffffffffffffffffffffffffffffffffff16612aed565b15612595578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612455611b12565b8786866040518563ffffffff1660e01b81526004016124779493929190613910565b602060405180830381600087803b15801561249157600080fd5b505af19250505080156124c257506040513d601f19601f820116820180604052508101906124bf9190612ed5565b60015b612545573d80600081146124f2576040519150601f19603f3d011682016040523d82523d6000602084013e6124f7565b606091505b5060008151141561253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253490613a1b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061259a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125fd84610f97565b6126079190613ec4565b90506000600760008481526020019081526020016000205490508181146126ec576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127719190613ec4565b90506000600960008481526020019081526020016000205490506000600883815481106127c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061280f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612884577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006128ab83610f97565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690613b5b565b60405180910390fd5b61299881611b1a565b156129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90613a5b565b60405180910390fd5b6129e46000838361229c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a349190613de3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b0c90613fae565b90600052602060002090601f016020900481019282612b2e5760008555612b75565b82601f10612b4757805160ff1916838001178555612b75565b82800160010185558215612b75579182015b82811115612b74578251825591602001919060010190612b59565b5b509050612b829190612b86565b5090565b5b80821115612b9f576000816000905550600101612b87565b5090565b6000612bb6612bb184613d07565b613cd6565b905082815260208101848484011115612bce57600080fd5b612bd9848285613f6c565b509392505050565b6000612bf4612bef84613d37565b613cd6565b905082815260208101848484011115612c0c57600080fd5b612c17848285613f6c565b509392505050565b600081359050612c2e81614127565b92915050565b600081359050612c438161413e565b92915050565b600081359050612c5881614155565b92915050565b600081519050612c6d81614155565b92915050565b600082601f830112612c8457600080fd5b8135612c94848260208601612ba3565b91505092915050565b600082601f830112612cae57600080fd5b8135612cbe848260208601612be1565b91505092915050565b600081359050612cd68161416c565b92915050565b600060208284031215612cee57600080fd5b6000612cfc84828501612c1f565b91505092915050565b60008060408385031215612d1857600080fd5b6000612d2685828601612c1f565b9250506020612d3785828601612c1f565b9150509250929050565b600080600060608486031215612d5657600080fd5b6000612d6486828701612c1f565b9350506020612d7586828701612c1f565b9250506040612d8686828701612cc7565b9150509250925092565b60008060008060808587031215612da657600080fd5b6000612db487828801612c1f565b9450506020612dc587828801612c1f565b9350506040612dd687828801612cc7565b925050606085013567ffffffffffffffff811115612df357600080fd5b612dff87828801612c73565b91505092959194509250565b60008060408385031215612e1e57600080fd5b6000612e2c85828601612c1f565b9250506020612e3d85828601612c34565b9150509250929050565b60008060408385031215612e5a57600080fd5b6000612e6885828601612c1f565b9250506020612e7985828601612cc7565b9150509250929050565b600060208284031215612e9557600080fd5b6000612ea384828501612c34565b91505092915050565b600060208284031215612ebe57600080fd5b6000612ecc84828501612c49565b91505092915050565b600060208284031215612ee757600080fd5b6000612ef584828501612c5e565b91505092915050565b600060208284031215612f1057600080fd5b600082013567ffffffffffffffff811115612f2a57600080fd5b612f3684828501612c9d565b91505092915050565b600060208284031215612f5157600080fd5b6000612f5f84828501612cc7565b91505092915050565b6000612f7483836138b3565b60208301905092915050565b612f8981613ef8565b82525050565b6000612f9a82613d77565b612fa48185613da5565b9350612faf83613d67565b8060005b83811015612fe0578151612fc78882612f68565b9750612fd283613d98565b925050600181019050612fb3565b5085935050505092915050565b612ff681613f0a565b82525050565b600061300782613d82565b6130118185613db6565b9350613021818560208601613f7b565b61302a81614116565b840191505092915050565b600061304082613d8d565b61304a8185613dc7565b935061305a818560208601613f7b565b61306381614116565b840191505092915050565b600061307982613d8d565b6130838185613dd8565b9350613093818560208601613f7b565b80840191505092915050565b60006130ac600683613dc7565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006130ec600a83613dc7565b91507f45786365656473203336000000000000000000000000000000000000000000006000830152602082019050919050565b600061312c602b83613dc7565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613192603283613dc7565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006131f8602683613dc7565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061325e601c83613dc7565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061329e602483613dc7565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613304601983613dc7565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613344600983613dc7565b91507f4d6178206c696d697400000000000000000000000000000000000000000000006000830152602082019050919050565b6000613384602c83613dc7565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006133ea603883613dc7565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613450602a83613dc7565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006134b6602983613dc7565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061351c602083613dc7565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061355c600883613dc7565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b600061359c602c83613dc7565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613602602083613dc7565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613642602983613dc7565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006136a8602f83613dc7565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061370e601183613dc7565b91507f56616c75652062656c6f772070726963650000000000000000000000000000006000830152602082019050919050565b600061374e602183613dc7565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137b4603183613dc7565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061381a602c83613dc7565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613880601183613dc7565b91507f4d617820312046726565205065722054580000000000000000000000000000006000830152602082019050919050565b6138bc81613f62565b82525050565b6138cb81613f62565b82525050565b60006138dd828561306e565b91506138e9828461306e565b91508190509392505050565b600060208201905061390a6000830184612f80565b92915050565b60006080820190506139256000830187612f80565b6139326020830186612f80565b61393f60408301856138c2565b81810360608301526139518184612ffc565b905095945050505050565b600060208201905081810360008301526139768184612f8f565b905092915050565b60006020820190506139936000830184612fed565b92915050565b600060208201905081810360008301526139b38184613035565b905092915050565b600060208201905081810360008301526139d48161309f565b9050919050565b600060208201905081810360008301526139f4816130df565b9050919050565b60006020820190508181036000830152613a148161311f565b9050919050565b60006020820190508181036000830152613a3481613185565b9050919050565b60006020820190508181036000830152613a54816131eb565b9050919050565b60006020820190508181036000830152613a7481613251565b9050919050565b60006020820190508181036000830152613a9481613291565b9050919050565b60006020820190508181036000830152613ab4816132f7565b9050919050565b60006020820190508181036000830152613ad481613337565b9050919050565b60006020820190508181036000830152613af481613377565b9050919050565b60006020820190508181036000830152613b14816133dd565b9050919050565b60006020820190508181036000830152613b3481613443565b9050919050565b60006020820190508181036000830152613b54816134a9565b9050919050565b60006020820190508181036000830152613b748161350f565b9050919050565b60006020820190508181036000830152613b948161354f565b9050919050565b60006020820190508181036000830152613bb48161358f565b9050919050565b60006020820190508181036000830152613bd4816135f5565b9050919050565b60006020820190508181036000830152613bf481613635565b9050919050565b60006020820190508181036000830152613c148161369b565b9050919050565b60006020820190508181036000830152613c3481613701565b9050919050565b60006020820190508181036000830152613c5481613741565b9050919050565b60006020820190508181036000830152613c74816137a7565b9050919050565b60006020820190508181036000830152613c948161380d565b9050919050565b60006020820190508181036000830152613cb481613873565b9050919050565b6000602082019050613cd060008301846138c2565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613cfd57613cfc6140e7565b5b8060405250919050565b600067ffffffffffffffff821115613d2257613d216140e7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613d5257613d516140e7565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613dee82613f62565b9150613df983613f62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e2e57613e2d61405a565b5b828201905092915050565b6000613e4482613f62565b9150613e4f83613f62565b925082613e5f57613e5e614089565b5b828204905092915050565b6000613e7582613f62565b9150613e8083613f62565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eb957613eb861405a565b5b828202905092915050565b6000613ecf82613f62565b9150613eda83613f62565b925082821015613eed57613eec61405a565b5b828203905092915050565b6000613f0382613f42565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f99578082015181840152602081019050613f7e565b83811115613fa8576000848401525b50505050565b60006002820490506001821680613fc657607f821691505b60208210811415613fda57613fd96140b8565b5b50919050565b6000613feb82613f62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561401e5761401d61405a565b5b600182019050919050565b600061403482613f62565b915061403f83613f62565b92508261404f5761404e614089565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61413081613ef8565b811461413b57600080fd5b50565b61414781613f0a565b811461415257600080fd5b50565b61415e81613f16565b811461416957600080fd5b50565b61417581613f62565b811461418057600080fd5b5056fe68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5837786d6e654a3147586e7931644a744d6838366f53486a6a694b386865396f754373715957747876526d39a2646970667358221220f885512909bdcd8ec671aeabfff374109c2c9088aad147ad32e584e2bc367ab164736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101c25760003560e01c806355f804b3116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610624578063e8a3d48514610661578063e985e9c51461068c578063f2fde38b146106c9576101c2565b806395d89b411461058b578063a22cb465146105b6578063b55d60d0146105df578063b88d4fde146105fb576101c2565b806370a08231116100d157806370a0823114610502578063715018a61461053f578063853828b6146105565780638da5cb5b14610560576101c2565b806355f804b3146104715780635c975abb1461049a5780636352211e146104c5576101c2565b806323b872dd1161016457806342842e0e1161013e57806342842e0e146103b7578063438b6300146103e05780634f6ccce71461041d5780635434a45a1461045a576101c2565b806323b872dd1461031457806326a49e371461033d5780632f745c591461037a576101c2565b8063081812fc116101a0578063081812fc14610258578063095ea7b31461029557806318160ddd146102be578063212710f7146102e9576101c2565b806301ffc9a7146101c757806302329a291461020457806306fdde031461022d575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612eac565b6106f2565b6040516101fb919061397e565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190612e83565b61076c565b005b34801561023957600080fd5b50610242610805565b60405161024f9190613999565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190612f3f565b610897565b60405161028c91906138f5565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612e47565b61091c565b005b3480156102ca57600080fd5b506102d3610a34565b6040516102e09190613cbb565b60405180910390f35b3480156102f557600080fd5b506102fe610a41565b60405161030b9190613cbb565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190612d41565b610a47565b005b34801561034957600080fd5b50610364600480360381019061035f9190612f3f565b610aa7565b6040516103719190613cbb565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190612e47565b610b26565b6040516103ae9190613cbb565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190612d41565b610bcb565b005b3480156103ec57600080fd5b5061040760048036038101906104029190612cdc565b610beb565b604051610414919061395c565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190612f3f565b610ce5565b6040516104519190613cbb565b60405180910390f35b34801561046657600080fd5b5061046f610d7c565b005b34801561047d57600080fd5b5061049860048036038101906104939190612efe565b610e3c565b005b3480156104a657600080fd5b506104af610ed2565b6040516104bc919061397e565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190612f3f565b610ee5565b6040516104f991906138f5565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190612cdc565b610f97565b6040516105369190613cbb565b60405180910390f35b34801561054b57600080fd5b5061055461104f565b005b61055e61118c565b005b34801561056c57600080fd5b5061057561124f565b60405161058291906138f5565b60405180910390f35b34801561059757600080fd5b506105a0611279565b6040516105ad9190613999565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190612e0b565b61130b565b005b6105f960048036038101906105f49190612e47565b61148c565b005b34801561060757600080fd5b50610622600480360381019061061d9190612d90565b6116c7565b005b34801561063057600080fd5b5061064b60048036038101906106469190612f3f565b611729565b6040516106589190613999565b60405180910390f35b34801561066d57600080fd5b506106766117d0565b6040516106839190613999565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190612d05565b6117f0565b6040516106c0919061397e565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190612cdc565b611884565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610765575061076482611a30565b5b9050919050565b610774611b12565b73ffffffffffffffffffffffffffffffffffffffff1661079261124f565b73ffffffffffffffffffffffffffffffffffffffff16146107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90613bbb565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b60606000805461081490613fae565b80601f016020809104026020016040519081016040528092919081815260200182805461084090613fae565b801561088d5780601f106108625761010080835404028352916020019161088d565b820191906000526020600020905b81548152906001019060200180831161087057829003601f168201915b5050505050905090565b60006108a282611b1a565b6108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613b9b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092782610ee5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90613c3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b7611b12565b73ffffffffffffffffffffffffffffffffffffffff1614806109e657506109e5816109e0611b12565b6117f0565b5b610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90613afb565b60405180910390fd5b610a2f8383611b86565b505050565b6000600880549050905090565b61271081565b610a58610a52611b12565b82611c3f565b610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90613c5b565b60405180910390fd5b610aa2838383611d1d565b505050565b600080610ab2610a34565b9050600a8111610b0a576001831115610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790613c9b565b60405180910390fd5b6000915050610b21565b82667fe5cf2bea0000610b1d9190613e6a565b9150505b919050565b6000610b3183610f97565b8210610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b69906139fb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610be6838383604051806020016040528060008152506116c7565b505050565b60606000610bf883610f97565b905060008167ffffffffffffffff811115610c3c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c6a5781602001602082028036833780820191505090505b50905060005b82811015610cda57610c828582610b26565b828281518110610cbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610cd290613fe0565b915050610c70565b508092505050919050565b6000610cef610a34565b8210610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790613c7b565b60405180910390fd5b60088281548110610d6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d84611b12565b73ffffffffffffffffffffffffffffffffffffffff16610da261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def90613bbb565b60405180910390fd5b6000610e02610a34565b905060005b6064811015610e3857610e25338284610e209190613de3565b611f79565b8080610e3090613fe0565b915050610e07565b5050565b610e44611b12565b73ffffffffffffffffffffffffffffffffffffffff16610e6261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90613bbb565b60405180910390fd5b80600b9080519060200190610ece929190612b00565b5050565b600c60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8590613b3b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613b1b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611057611b12565b73ffffffffffffffffffffffffffffffffffffffff1661107561124f565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290613bbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611194611b12565b73ffffffffffffffffffffffffffffffffffffffff166111b261124f565b73ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613bbb565b60405180910390fd5b611210611b12565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061124d57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461128890613fae565b80601f01602080910402602001604051908101604052809291908181526020018280546112b490613fae565b80156113015780601f106112d657610100808354040283529160200191611301565b820191906000526020600020905b8154815290600101906020018083116112e457829003601f168201915b5050505050905090565b611313611b12565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890613a9b565b60405180910390fd5b806005600061138e611b12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661143b611b12565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611480919061397e565b60405180910390a35050565b612710611497610a34565b106114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce90613b7b565b60405180910390fd5b6114df61124f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461156257600c60009054906101000a900460ff1615611561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611558906139bb565b60405180910390fd5b5b6127108161156e610a34565b6115789190613de3565b11156115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090613abb565b60405180910390fd5b6127106115c4610a34565b10611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb90613b7b565b60405180910390fd5b6024811115611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f906139db565b60405180910390fd5b61165181610aa7565b341015611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613c1b565b60405180910390fd5b60005b818110156116c2576116af836116aa610a34565b611f79565b80806116ba90613fe0565b915050611696565b505050565b6116d86116d2611b12565b83611c3f565b611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613c5b565b60405180910390fd5b61172384848484611f97565b50505050565b606061173482611b1a565b611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90613bfb565b60405180910390fd5b600061177d611ff3565b9050600081511161179d57604051806020016040528060008152506117c8565b806117a784612085565b6040516020016117b89291906138d1565b6040516020818303038152906040525b915050919050565b606060405180608001604052806050815260200161418460509139905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61188c611b12565b73ffffffffffffffffffffffffffffffffffffffff166118aa61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790613bbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790613a3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611afb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b0b5750611b0a82612232565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bf983610ee5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c4a82611b1a565b611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613adb565b60405180910390fd5b6000611c9483610ee5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d0357508373ffffffffffffffffffffffffffffffffffffffff16611ceb84610897565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d145750611d1381856117f0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d3d82610ee5565b73ffffffffffffffffffffffffffffffffffffffff1614611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613bdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa90613a7b565b60405180910390fd5b611e0e83838361229c565b611e19600082611b86565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e699190613ec4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec09190613de3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f938282604051806020016040528060008152506123b0565b5050565b611fa2848484611d1d565b611fae8484848461240b565b611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490613a1b565b60405180910390fd5b50505050565b6060600b805461200290613fae565b80601f016020809104026020016040519081016040528092919081815260200182805461202e90613fae565b801561207b5780601f106120505761010080835404028352916020019161207b565b820191906000526020600020905b81548152906001019060200180831161205e57829003601f168201915b5050505050905090565b606060008214156120cd576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061222d565b600082905060005b600082146120ff5780806120e890613fe0565b915050600a826120f89190613e39565b91506120d5565b60008167ffffffffffffffff811115612141577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121735781602001600182028036833780820191505090505b5090505b600085146122265760018261218c9190613ec4565b9150600a8561219b9190614029565b60306121a79190613de3565b60f81b8183815181106121e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561221f9190613e39565b9450612177565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122a78383836125a2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ea576122e5816125a7565b612329565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123285761232783826125f0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561236c576123678161275d565b6123ab565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123aa576123a982826128a0565b5b5b505050565b6123ba838361291f565b6123c7600084848461240b565b612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90613a1b565b60405180910390fd5b505050565b600061242c8473ffffffffffffffffffffffffffffffffffffffff16612aed565b15612595578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612455611b12565b8786866040518563ffffffff1660e01b81526004016124779493929190613910565b602060405180830381600087803b15801561249157600080fd5b505af19250505080156124c257506040513d601f19601f820116820180604052508101906124bf9190612ed5565b60015b612545573d80600081146124f2576040519150601f19603f3d011682016040523d82523d6000602084013e6124f7565b606091505b5060008151141561253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253490613a1b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061259a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125fd84610f97565b6126079190613ec4565b90506000600760008481526020019081526020016000205490508181146126ec576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127719190613ec4565b90506000600960008481526020019081526020016000205490506000600883815481106127c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061280f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612884577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006128ab83610f97565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690613b5b565b60405180910390fd5b61299881611b1a565b156129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90613a5b565b60405180910390fd5b6129e46000838361229c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a349190613de3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b0c90613fae565b90600052602060002090601f016020900481019282612b2e5760008555612b75565b82601f10612b4757805160ff1916838001178555612b75565b82800160010185558215612b75579182015b82811115612b74578251825591602001919060010190612b59565b5b509050612b829190612b86565b5090565b5b80821115612b9f576000816000905550600101612b87565b5090565b6000612bb6612bb184613d07565b613cd6565b905082815260208101848484011115612bce57600080fd5b612bd9848285613f6c565b509392505050565b6000612bf4612bef84613d37565b613cd6565b905082815260208101848484011115612c0c57600080fd5b612c17848285613f6c565b509392505050565b600081359050612c2e81614127565b92915050565b600081359050612c438161413e565b92915050565b600081359050612c5881614155565b92915050565b600081519050612c6d81614155565b92915050565b600082601f830112612c8457600080fd5b8135612c94848260208601612ba3565b91505092915050565b600082601f830112612cae57600080fd5b8135612cbe848260208601612be1565b91505092915050565b600081359050612cd68161416c565b92915050565b600060208284031215612cee57600080fd5b6000612cfc84828501612c1f565b91505092915050565b60008060408385031215612d1857600080fd5b6000612d2685828601612c1f565b9250506020612d3785828601612c1f565b9150509250929050565b600080600060608486031215612d5657600080fd5b6000612d6486828701612c1f565b9350506020612d7586828701612c1f565b9250506040612d8686828701612cc7565b9150509250925092565b60008060008060808587031215612da657600080fd5b6000612db487828801612c1f565b9450506020612dc587828801612c1f565b9350506040612dd687828801612cc7565b925050606085013567ffffffffffffffff811115612df357600080fd5b612dff87828801612c73565b91505092959194509250565b60008060408385031215612e1e57600080fd5b6000612e2c85828601612c1f565b9250506020612e3d85828601612c34565b9150509250929050565b60008060408385031215612e5a57600080fd5b6000612e6885828601612c1f565b9250506020612e7985828601612cc7565b9150509250929050565b600060208284031215612e9557600080fd5b6000612ea384828501612c34565b91505092915050565b600060208284031215612ebe57600080fd5b6000612ecc84828501612c49565b91505092915050565b600060208284031215612ee757600080fd5b6000612ef584828501612c5e565b91505092915050565b600060208284031215612f1057600080fd5b600082013567ffffffffffffffff811115612f2a57600080fd5b612f3684828501612c9d565b91505092915050565b600060208284031215612f5157600080fd5b6000612f5f84828501612cc7565b91505092915050565b6000612f7483836138b3565b60208301905092915050565b612f8981613ef8565b82525050565b6000612f9a82613d77565b612fa48185613da5565b9350612faf83613d67565b8060005b83811015612fe0578151612fc78882612f68565b9750612fd283613d98565b925050600181019050612fb3565b5085935050505092915050565b612ff681613f0a565b82525050565b600061300782613d82565b6130118185613db6565b9350613021818560208601613f7b565b61302a81614116565b840191505092915050565b600061304082613d8d565b61304a8185613dc7565b935061305a818560208601613f7b565b61306381614116565b840191505092915050565b600061307982613d8d565b6130838185613dd8565b9350613093818560208601613f7b565b80840191505092915050565b60006130ac600683613dc7565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006130ec600a83613dc7565b91507f45786365656473203336000000000000000000000000000000000000000000006000830152602082019050919050565b600061312c602b83613dc7565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613192603283613dc7565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006131f8602683613dc7565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061325e601c83613dc7565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061329e602483613dc7565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613304601983613dc7565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613344600983613dc7565b91507f4d6178206c696d697400000000000000000000000000000000000000000000006000830152602082019050919050565b6000613384602c83613dc7565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006133ea603883613dc7565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613450602a83613dc7565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006134b6602983613dc7565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061351c602083613dc7565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061355c600883613dc7565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b600061359c602c83613dc7565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613602602083613dc7565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613642602983613dc7565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006136a8602f83613dc7565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061370e601183613dc7565b91507f56616c75652062656c6f772070726963650000000000000000000000000000006000830152602082019050919050565b600061374e602183613dc7565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137b4603183613dc7565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061381a602c83613dc7565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613880601183613dc7565b91507f4d617820312046726565205065722054580000000000000000000000000000006000830152602082019050919050565b6138bc81613f62565b82525050565b6138cb81613f62565b82525050565b60006138dd828561306e565b91506138e9828461306e565b91508190509392505050565b600060208201905061390a6000830184612f80565b92915050565b60006080820190506139256000830187612f80565b6139326020830186612f80565b61393f60408301856138c2565b81810360608301526139518184612ffc565b905095945050505050565b600060208201905081810360008301526139768184612f8f565b905092915050565b60006020820190506139936000830184612fed565b92915050565b600060208201905081810360008301526139b38184613035565b905092915050565b600060208201905081810360008301526139d48161309f565b9050919050565b600060208201905081810360008301526139f4816130df565b9050919050565b60006020820190508181036000830152613a148161311f565b9050919050565b60006020820190508181036000830152613a3481613185565b9050919050565b60006020820190508181036000830152613a54816131eb565b9050919050565b60006020820190508181036000830152613a7481613251565b9050919050565b60006020820190508181036000830152613a9481613291565b9050919050565b60006020820190508181036000830152613ab4816132f7565b9050919050565b60006020820190508181036000830152613ad481613337565b9050919050565b60006020820190508181036000830152613af481613377565b9050919050565b60006020820190508181036000830152613b14816133dd565b9050919050565b60006020820190508181036000830152613b3481613443565b9050919050565b60006020820190508181036000830152613b54816134a9565b9050919050565b60006020820190508181036000830152613b748161350f565b9050919050565b60006020820190508181036000830152613b948161354f565b9050919050565b60006020820190508181036000830152613bb48161358f565b9050919050565b60006020820190508181036000830152613bd4816135f5565b9050919050565b60006020820190508181036000830152613bf481613635565b9050919050565b60006020820190508181036000830152613c148161369b565b9050919050565b60006020820190508181036000830152613c3481613701565b9050919050565b60006020820190508181036000830152613c5481613741565b9050919050565b60006020820190508181036000830152613c74816137a7565b9050919050565b60006020820190508181036000830152613c948161380d565b9050919050565b60006020820190508181036000830152613cb481613873565b9050919050565b6000602082019050613cd060008301846138c2565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613cfd57613cfc6140e7565b5b8060405250919050565b600067ffffffffffffffff821115613d2257613d216140e7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613d5257613d516140e7565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613dee82613f62565b9150613df983613f62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e2e57613e2d61405a565b5b828201905092915050565b6000613e4482613f62565b9150613e4f83613f62565b925082613e5f57613e5e614089565b5b828204905092915050565b6000613e7582613f62565b9150613e8083613f62565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eb957613eb861405a565b5b828202905092915050565b6000613ecf82613f62565b9150613eda83613f62565b925082821015613eed57613eec61405a565b5b828203905092915050565b6000613f0382613f42565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f99578082015181840152602081019050613f7e565b83811115613fa8576000848401525b50505050565b60006002820490506001821680613fc657607f821691505b60208210811415613fda57613fd96140b8565b5b50919050565b6000613feb82613f62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561401e5761401d61405a565b5b600182019050919050565b600061403482613f62565b915061403f83613f62565b92508261404f5761404e614089565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61413081613ef8565b811461413b57600080fd5b50565b61414781613f0a565b811461415257600080fd5b50565b61415e81613f16565b811461416957600080fd5b50565b61417581613f62565b811461418057600080fd5b5056fe68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5837786d6e654a3147586e7931644a744d6838366f53486a6a694b386865396f754373715957747876526d39a2646970667358221220f885512909bdcd8ec671aeabfff374109c2c9088aad147ad32e584e2bc367ab164736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string):
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
47049:2449:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34401:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49289:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21598:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23058:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22595:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35054:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47106:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23948:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48225:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34722:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24324:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48937:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35244:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47498:201;;;;;;;;;;;;;:::i;:::-;;48827:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47179:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21292:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21022:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42279:148;;;;;;;;;;;;;:::i;:::-;;49370:125;;;:::i;:::-;;41628:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21767:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23351:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47709:508;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24546:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21942:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48532:167;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23717:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42582:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34401:237;34503:4;34542:35;34527:50;;;:11;:50;;;;:103;;;;34594:36;34618:11;34594:23;:36::i;:::-;34527:103;34520:110;;34401:237;;;:::o;49289:73::-;41859:12;:10;:12::i;:::-;41848:23;;:7;:5;:7::i;:::-;:23;;;41840:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49351:3:::1;49342:6;;:12;;;;;;;;;;;;;;;;;;49289:73:::0;:::o;21598:100::-;21652:13;21685:5;21678:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21598:100;:::o;23058:221::-;23134:7;23162:16;23170:7;23162;:16::i;:::-;23154:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23247:15;:24;23263:7;23247:24;;;;;;;;;;;;;;;;;;;;;23240:31;;23058:221;;;:::o;22595:397::-;22676:13;22692:23;22707:7;22692:14;:23::i;:::-;22676:39;;22740:5;22734:11;;:2;:11;;;;22726:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22820:5;22804:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22829:37;22846:5;22853:12;:10;:12::i;:::-;22829:16;:37::i;:::-;22804:62;22796:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22963:21;22972:2;22976:7;22963:8;:21::i;:::-;22595:397;;;:::o;35054:113::-;35115:7;35142:10;:17;;;;35135:24;;35054:113;:::o;47106:39::-;47140:5;47106:39;:::o;23948:305::-;24109:41;24128:12;:10;:12::i;:::-;24142:7;24109:18;:41::i;:::-;24101:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24217:28;24227:4;24233:2;24237:7;24217:9;:28::i;:::-;23948:305;;;:::o;48225:299::-;48274:7;48294:8;48305:13;:11;:13::i;:::-;48294:24;;48362:2;48355:3;:9;48352:105;;48399:1;48389:6;:11;;48381:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;48444:1;48437:8;;;;;48352:105;48496:6;48476:17;:26;;;;:::i;:::-;48469:33;;;48225:299;;;;:::o;34722:256::-;34819:7;34855:23;34872:5;34855:16;:23::i;:::-;34847:5;:31;34839:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34944:12;:19;34957:5;34944:19;;;;;;;;;;;;;;;:26;34964:5;34944:26;;;;;;;;;;;;34937:33;;34722:256;;;;:::o;24324:151::-;24428:39;24445:4;24451:2;24455:7;24428:39;;;;;;;;;;;;:16;:39::i;:::-;24324:151;;;:::o;48937:344::-;48998:16;49027:15;49045:17;49055:6;49045:9;:17::i;:::-;49027:35;;49075:25;49117:10;49103:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49075:53;;49143:6;49139:107;49159:10;49155:1;:14;49139:107;;;49204:30;49224:6;49232:1;49204:19;:30::i;:::-;49190:8;49199:1;49190:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;49171:3;;;;;:::i;:::-;;;;49139:107;;;;49265:8;49258:15;;;;48937:344;;;:::o;35244:233::-;35319:7;35355:30;:28;:30::i;:::-;35347:5;:38;35339:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35452:10;35463:5;35452:17;;;;;;;;;;;;;;;;;;;;;;;;35445:24;;35244:233;;;:::o;47498:201::-;41859:12;:10;:12::i;:::-;41848:23;;:7;:5;:7::i;:::-;:23;;;41840:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47551:11:::1;47565:13;:11;:13::i;:::-;47551:27;;47589:6;47606:86;47622:3;47618:1;:7;47606:86;;;47647:33;47657:10;47678:1;47669:6;:10;;;;:::i;:::-;47647:9;:33::i;:::-;47627:3;;;;;:::i;:::-;;;;47606:86;;;41919:1;;47498:201::o:0;48827:102::-;41859:12;:10;:12::i;:::-;41848:23;;:7;:5;:7::i;:::-;:23;;;41840:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48914:7:::1;48898:13;:23;;;;;;;;;;;;:::i;:::-;;48827:102:::0;:::o;47179:25::-;;;;;;;;;;;;;:::o;21292:239::-;21364:7;21384:13;21400:7;:16;21408:7;21400:16;;;;;;;;;;;;;;;;;;;;;21384:32;;21452:1;21435:19;;:5;:19;;;;21427:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21518:5;21511:12;;;21292:239;;;:::o;21022:208::-;21094:7;21139:1;21122:19;;:5;:19;;;;21114:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21206:9;:16;21216:5;21206:16;;;;;;;;;;;;;;;;21199:23;;21022:208;;;:::o;42279:148::-;41859:12;:10;:12::i;:::-;41848:23;;:7;:5;:7::i;:::-;:23;;;41840:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42386:1:::1;42349:40;;42370:6;;;;;;;;;;;42349:40;;;;;;;;;;;;42417:1;42400:6;;:19;;;;;;;;;;;;;;;;;;42279:148::o:0;49370:125::-;41859:12;:10;:12::i;:::-;41848:23;;:7;:5;:7::i;:::-;:23;;;41840:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49445:12:::1;:10;:12::i;:::-;49437:26;;:49;49464:21;49437:49;;;;;;;;;;;;;;;;;;;;;;;49429:58;;;::::0;::::1;;49370:125::o:0;41628:87::-;41674:7;41701:6;;;;;;;;;;;41694:13;;41628:87;:::o;21767:104::-;21823:13;21856:7;21849:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21767:104;:::o;23351:295::-;23466:12;:10;:12::i;:::-;23454:24;;:8;:24;;;;23446:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23566:8;23521:18;:32;23540:12;:10;:12::i;:::-;23521:32;;;;;;;;;;;;;;;:42;23554:8;23521:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23619:8;23590:48;;23605:12;:10;:12::i;:::-;23590:48;;;23629:8;23590:48;;;;;;:::i;:::-;;;;;;;;23351:295;;:::o;47709:508::-;47140:5;47362:13;:11;:13::i;:::-;:26;47354:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;47809:7:::1;:5;:7::i;:::-;47795:21;;:10;:21;;;47792:78;;47841:6;;;;;;;;;;;47840:7;47832:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;47792:78;47140:5;47904:6;47888:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;47880:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47140:5;47957:13;:11;:13::i;:::-;:26;47949:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;48025:2;48015:6;:12;;48007:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;48074:13;48080:6;48074:5;:13::i;:::-;48061:9;:26;;48053:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;48126:6;48122:88;48142:6;48138:1;:10;48122:88;;;48169:29;48179:3;48184:13;:11;:13::i;:::-;48169:9;:29::i;:::-;48150:3;;;;;:::i;:::-;;;;48122:88;;;;47709:508:::0;;:::o;24546:285::-;24678:41;24697:12;:10;:12::i;:::-;24711:7;24678:18;:41::i;:::-;24670:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24784:39;24798:4;24804:2;24808:7;24817:5;24784:13;:39::i;:::-;24546:285;;;;:::o;21942:360::-;22015:13;22049:16;22057:7;22049;:16::i;:::-;22041:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22130:21;22154:10;:8;:10::i;:::-;22130:34;;22206:1;22188:7;22182:21;:25;:112;;;;;;;;;;;;;;;;;22247:7;22256:18;:7;:16;:18::i;:::-;22230:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22182:112;22175:119;;;21942:360;;;:::o;48532:167::-;48576:13;48602:89;;;;;;;;;;;;;;;;;;;48532:167;:::o;23717:164::-;23814:4;23838:18;:25;23857:5;23838:25;;;;;;;;;;;;;;;:35;23864:8;23838:35;;;;;;;;;;;;;;;;;;;;;;;;;23831:42;;23717:164;;;;:::o;42582:244::-;41859:12;:10;:12::i;:::-;41848:23;;:7;:5;:7::i;:::-;:23;;;41840:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42691:1:::1;42671:22;;:8;:22;;;;42663:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42781:8;42752:38;;42773:6;;;;;;;;;;;42752:38;;;;;;;;;;;;42810:8;42801:6;;:17;;;;;;;;;;;;;;;;;;42582:244:::0;:::o;20666:292::-;20768:4;20807:25;20792:40;;;:11;:40;;;;:105;;;;20864:33;20849:48;;;:11;:48;;;;20792:105;:158;;;;20914:36;20938:11;20914:23;:36::i;:::-;20792:158;20785:165;;20666:292;;;:::o;15940:98::-;15993:7;16020:10;16013:17;;15940:98;:::o;26298:127::-;26363:4;26415:1;26387:30;;:7;:16;26395:7;26387:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26380:37;;26298:127;;;:::o;30175:174::-;30277:2;30250:15;:24;30266:7;30250:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30333:7;30329:2;30295:46;;30304:23;30319:7;30304:14;:23::i;:::-;30295:46;;;;;;;;;;;;30175:174;;:::o;26592:348::-;26685:4;26710:16;26718:7;26710;:16::i;:::-;26702:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26786:13;26802:23;26817:7;26802:14;:23::i;:::-;26786:39;;26855:5;26844:16;;:7;:16;;;:51;;;;26888:7;26864:31;;:20;26876:7;26864:11;:20::i;:::-;:31;;;26844:51;:87;;;;26899:32;26916:5;26923:7;26899:16;:32::i;:::-;26844:87;26836:96;;;26592:348;;;;:::o;29513:544::-;29638:4;29611:31;;:23;29626:7;29611:14;:23::i;:::-;:31;;;29603:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29721:1;29707:16;;:2;:16;;;;29699:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29777:39;29798:4;29804:2;29808:7;29777:20;:39::i;:::-;29881:29;29898:1;29902:7;29881:8;:29::i;:::-;29942:1;29923:9;:15;29933:4;29923:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29971:1;29954:9;:13;29964:2;29954:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30002:2;29983:7;:16;29991:7;29983:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30041:7;30037:2;30022:27;;30031:4;30022:27;;;;;;;;;;;;29513:544;;;:::o;27282:110::-;27358:26;27368:2;27372:7;27358:26;;;;;;;;;;;;:9;:26::i;:::-;27282:110;;:::o;25713:272::-;25827:28;25837:4;25843:2;25847:7;25827:9;:28::i;:::-;25874:48;25897:4;25903:2;25907:7;25916:5;25874:22;:48::i;:::-;25866:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25713:272;;;;:::o;48707:114::-;48767:13;48800;48793:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48707:114;:::o;16601:723::-;16657:13;16887:1;16878:5;:10;16874:53;;;16905:10;;;;;;;;;;;;;;;;;;;;;16874:53;16937:12;16952:5;16937:20;;16968:14;16993:78;17008:1;17000:4;:9;16993:78;;17026:8;;;;;:::i;:::-;;;;17057:2;17049:10;;;;;:::i;:::-;;;16993:78;;;17081:19;17113:6;17103:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17081:39;;17131:154;17147:1;17138:5;:10;17131:154;;17175:1;17165:11;;;;;:::i;:::-;;;17242:2;17234:5;:10;;;;:::i;:::-;17221:2;:24;;;;:::i;:::-;17208:39;;17191:6;17198;17191:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17271:2;17262:11;;;;;:::i;:::-;;;17131:154;;;17309:6;17295:21;;;;;16601:723;;;;:::o;19160:157::-;19245:4;19284:25;19269:40;;;:11;:40;;;;19262:47;;19160:157;;;:::o;36090:555::-;36200:45;36227:4;36233:2;36237:7;36200:26;:45::i;:::-;36278:1;36262:18;;:4;:18;;;36258:187;;;36297:40;36329:7;36297:31;:40::i;:::-;36258:187;;;36367:2;36359:10;;:4;:10;;;36355:90;;36386:47;36419:4;36425:7;36386:32;:47::i;:::-;36355:90;36258:187;36473:1;36459:16;;:2;:16;;;36455:183;;;36492:45;36529:7;36492:36;:45::i;:::-;36455:183;;;36565:4;36559:10;;:2;:10;;;36555:83;;36586:40;36614:2;36618:7;36586:27;:40::i;:::-;36555:83;36455:183;36090:555;;;:::o;27619:250::-;27715:18;27721:2;27725:7;27715:5;:18::i;:::-;27752:54;27783:1;27787:2;27791:7;27800:5;27752:22;:54::i;:::-;27744:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27619:250;;;:::o;30914:843::-;31035:4;31061:15;:2;:13;;;:15::i;:::-;31057:693;;;31113:2;31097:36;;;31134:12;:10;:12::i;:::-;31148:4;31154:7;31163:5;31097:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31093:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31360:1;31343:6;:13;:18;31339:341;;;31386:60;;;;;;;;;;:::i;:::-;;;;;;;;31339:341;31630:6;31624:13;31615:6;31611:2;31607:15;31600:38;31093:602;31230:45;;;31220:55;;;:6;:55;;;;31213:62;;;;;31057:693;31734:4;31727:11;;30914:843;;;;;;;:::o;32370:93::-;;;;:::o;37368:164::-;37472:10;:17;;;;37445:15;:24;37461:7;37445:24;;;;;;;;;;;:44;;;;37500:10;37516:7;37500:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37368:164;:::o;38159:988::-;38425:22;38475:1;38450:22;38467:4;38450:16;:22::i;:::-;:26;;;;:::i;:::-;38425:51;;38487:18;38508:17;:26;38526:7;38508:26;;;;;;;;;;;;38487:47;;38655:14;38641:10;:28;38637:328;;38686:19;38708:12;:18;38721:4;38708:18;;;;;;;;;;;;;;;:34;38727:14;38708:34;;;;;;;;;;;;38686:56;;38792:11;38759:12;:18;38772:4;38759:18;;;;;;;;;;;;;;;:30;38778:10;38759:30;;;;;;;;;;;:44;;;;38909:10;38876:17;:30;38894:11;38876:30;;;;;;;;;;;:43;;;;38637:328;;39061:17;:26;39079:7;39061:26;;;;;;;;;;;39054:33;;;39105:12;:18;39118:4;39105:18;;;;;;;;;;;;;;;:34;39124:14;39105:34;;;;;;;;;;;39098:41;;;38159:988;;;;:::o;39442:1079::-;39695:22;39740:1;39720:10;:17;;;;:21;;;;:::i;:::-;39695:46;;39752:18;39773:15;:24;39789:7;39773:24;;;;;;;;;;;;39752:45;;40124:19;40146:10;40157:14;40146:26;;;;;;;;;;;;;;;;;;;;;;;;40124:48;;40210:11;40185:10;40196;40185:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40321:10;40290:15;:28;40306:11;40290:28;;;;;;;;;;;:41;;;;40462:15;:24;40478:7;40462:24;;;;;;;;;;;40455:31;;;40497:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39442:1079;;;;:::o;36946:221::-;37031:14;37048:20;37065:2;37048:16;:20::i;:::-;37031:37;;37106:7;37079:12;:16;37092:2;37079:16;;;;;;;;;;;;;;;:24;37096:6;37079:24;;;;;;;;;;;:34;;;;37153:6;37124:17;:26;37142:7;37124:26;;;;;;;;;;;:35;;;;36946:221;;;:::o;28205:382::-;28299:1;28285:16;;:2;:16;;;;28277:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28358:16;28366:7;28358;:16::i;:::-;28357:17;28349:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28420:45;28449:1;28453:2;28457:7;28420:20;:45::i;:::-;28495:1;28478:9;:13;28488:2;28478:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28526:2;28507:7;:16;28515:7;28507:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28571:7;28567:2;28546:33;;28563:1;28546:33;;;;;;;;;;;;28205:382;;:::o;8053:422::-;8113:4;8321:12;8432:7;8420:20;8412:28;;8466:1;8459:4;:8;8452:15;;;8053:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7904:364::-;;8020:39;8053:5;8020:39;:::i;:::-;8075:71;8139:6;8134:3;8075:71;:::i;:::-;8068:78;;8155:52;8200:6;8195:3;8188:4;8181:5;8177:16;8155:52;:::i;:::-;8232:29;8254:6;8232:29;:::i;:::-;8227:3;8223:39;8216:46;;7996:272;;;;;:::o;8274:377::-;;8408:39;8441:5;8408:39;:::i;:::-;8463:89;8545:6;8540:3;8463:89;:::i;:::-;8456:96;;8561:52;8606:6;8601:3;8594:4;8587:5;8583:16;8561:52;:::i;:::-;8638:6;8633:3;8629:16;8622:23;;8384:267;;;;;:::o;8657:303::-;;8820:66;8884:1;8879:3;8820:66;:::i;:::-;8813:73;;8916:8;8912:1;8907:3;8903:11;8896:29;8951:2;8946:3;8942:12;8935:19;;8803:157;;;:::o;8966:308::-;;9129:67;9193:2;9188:3;9129:67;:::i;:::-;9122:74;;9226:12;9222:1;9217:3;9213:11;9206:33;9265:2;9260:3;9256:12;9249:19;;9112:162;;;:::o;9280:375::-;;9443:67;9507:2;9502:3;9443:67;:::i;:::-;9436:74;;9540:34;9536:1;9531:3;9527:11;9520:55;9606:13;9601:2;9596:3;9592:12;9585:35;9646:2;9641:3;9637:12;9630:19;;9426:229;;;:::o;9661:382::-;;9824:67;9888:2;9883:3;9824:67;:::i;:::-;9817:74;;9921:34;9917:1;9912:3;9908:11;9901:55;9987:20;9982:2;9977:3;9973:12;9966:42;10034:2;10029:3;10025:12;10018:19;;9807:236;;;:::o;10049:370::-;;10212:67;10276:2;10271:3;10212:67;:::i;:::-;10205:74;;10309:34;10305:1;10300:3;10296:11;10289:55;10375:8;10370:2;10365:3;10361:12;10354:30;10410:2;10405:3;10401:12;10394:19;;10195:224;;;:::o;10425:326::-;;10588:67;10652:2;10647:3;10588:67;:::i;:::-;10581:74;;10685:30;10681:1;10676:3;10672:11;10665:51;10742:2;10737:3;10733:12;10726:19;;10571:180;;;:::o;10757:368::-;;10920:67;10984:2;10979:3;10920:67;:::i;:::-;10913:74;;11017:34;11013:1;11008:3;11004:11;10997:55;11083:6;11078:2;11073:3;11069:12;11062:28;11116:2;11111:3;11107:12;11100:19;;10903:222;;;:::o;11131:323::-;;11294:67;11358:2;11353:3;11294:67;:::i;:::-;11287:74;;11391:27;11387:1;11382:3;11378:11;11371:48;11445:2;11440:3;11436:12;11429:19;;11277:177;;;:::o;11460:306::-;;11623:66;11687:1;11682:3;11623:66;:::i;:::-;11616:73;;11719:11;11715:1;11710:3;11706:11;11699:32;11757:2;11752:3;11748:12;11741:19;;11606:160;;;:::o;11772:376::-;;11935:67;11999:2;11994:3;11935:67;:::i;:::-;11928:74;;12032:34;12028:1;12023:3;12019:11;12012:55;12098:14;12093:2;12088:3;12084:12;12077:36;12139:2;12134:3;12130:12;12123:19;;11918:230;;;:::o;12154:388::-;;12317:67;12381:2;12376:3;12317:67;:::i;:::-;12310:74;;12414:34;12410:1;12405:3;12401:11;12394:55;12480:26;12475:2;12470:3;12466:12;12459:48;12533:2;12528:3;12524:12;12517:19;;12300:242;;;:::o;12548:374::-;;12711:67;12775:2;12770:3;12711:67;:::i;:::-;12704:74;;12808:34;12804:1;12799:3;12795:11;12788:55;12874:12;12869:2;12864:3;12860:12;12853:34;12913:2;12908:3;12904:12;12897:19;;12694:228;;;:::o;12928:373::-;;13091:67;13155:2;13150:3;13091:67;:::i;:::-;13084:74;;13188:34;13184:1;13179:3;13175:11;13168:55;13254:11;13249:2;13244:3;13240:12;13233:33;13292:2;13287:3;13283:12;13276:19;;13074:227;;;:::o;13307:330::-;;13470:67;13534:2;13529:3;13470:67;:::i;:::-;13463:74;;13567:34;13563:1;13558:3;13554:11;13547:55;13628:2;13623:3;13619:12;13612:19;;13453:184;;;:::o;13643:305::-;;13806:66;13870:1;13865:3;13806:66;:::i;:::-;13799:73;;13902:10;13898:1;13893:3;13889:11;13882:31;13939:2;13934:3;13930:12;13923:19;;13789:159;;;:::o;13954:376::-;;14117:67;14181:2;14176:3;14117:67;:::i;:::-;14110:74;;14214:34;14210:1;14205:3;14201:11;14194:55;14280:14;14275:2;14270:3;14266:12;14259:36;14321:2;14316:3;14312:12;14305:19;;14100:230;;;:::o;14336:330::-;;14499:67;14563:2;14558:3;14499:67;:::i;:::-;14492:74;;14596:34;14592:1;14587:3;14583:11;14576:55;14657:2;14652:3;14648:12;14641:19;;14482:184;;;:::o;14672:373::-;;14835:67;14899:2;14894:3;14835:67;:::i;:::-;14828:74;;14932:34;14928:1;14923:3;14919:11;14912:55;14998:11;14993:2;14988:3;14984:12;14977:33;15036:2;15031:3;15027:12;15020:19;;14818:227;;;:::o;15051:379::-;;15214:67;15278:2;15273:3;15214:67;:::i;:::-;15207:74;;15311:34;15307:1;15302:3;15298:11;15291:55;15377:17;15372:2;15367:3;15363:12;15356:39;15421:2;15416:3;15412:12;15405:19;;15197:233;;;:::o;15436:315::-;;15599:67;15663:2;15658:3;15599:67;:::i;:::-;15592:74;;15696:19;15692:1;15687:3;15683:11;15676:40;15742:2;15737:3;15733:12;15726:19;;15582:169;;;:::o;15757:365::-;;15920:67;15984:2;15979:3;15920:67;:::i;:::-;15913:74;;16017:34;16013:1;16008:3;16004:11;15997:55;16083:3;16078:2;16073:3;16069:12;16062:25;16113:2;16108:3;16104:12;16097:19;;15903:219;;;:::o;16128:381::-;;16291:67;16355:2;16350:3;16291:67;:::i;:::-;16284:74;;16388:34;16384:1;16379:3;16375:11;16368:55;16454:19;16449:2;16444:3;16440:12;16433:41;16500:2;16495:3;16491:12;16484:19;;16274:235;;;:::o;16515:376::-;;16678:67;16742:2;16737:3;16678:67;:::i;:::-;16671:74;;16775:34;16771:1;16766:3;16762:11;16755:55;16841:14;16836:2;16831:3;16827:12;16820:36;16882:2;16877:3;16873:12;16866:19;;16661:230;;;:::o;16897:315::-;;17060:67;17124:2;17119:3;17060:67;:::i;:::-;17053:74;;17157:19;17153:1;17148:3;17144:11;17137:40;17203:2;17198:3;17194:12;17187:19;;17043:169;;;:::o;17218:108::-;17295:24;17313:5;17295:24;:::i;:::-;17290:3;17283:37;17273:53;;:::o;17332:118::-;17419:24;17437:5;17419:24;:::i;:::-;17414:3;17407:37;17397:53;;:::o;17456:435::-;;17658:95;17749:3;17740:6;17658:95;:::i;:::-;17651:102;;17770:95;17861:3;17852:6;17770:95;:::i;:::-;17763:102;;17882:3;17875:10;;17640:251;;;;;:::o;17897:222::-;;18028:2;18017:9;18013:18;18005:26;;18041:71;18109:1;18098:9;18094:17;18085:6;18041:71;:::i;:::-;17995:124;;;;:::o;18125:640::-;;18358:3;18347:9;18343:19;18335:27;;18372:71;18440:1;18429:9;18425:17;18416:6;18372:71;:::i;:::-;18453:72;18521:2;18510:9;18506:18;18497:6;18453:72;:::i;:::-;18535;18603:2;18592:9;18588:18;18579:6;18535:72;:::i;:::-;18654:9;18648:4;18644:20;18639:2;18628:9;18624:18;18617:48;18682:76;18753:4;18744:6;18682:76;:::i;:::-;18674:84;;18325:440;;;;;;;:::o;18771:373::-;;18952:2;18941:9;18937:18;18929:26;;19001:9;18995:4;18991:20;18987:1;18976:9;18972:17;18965:47;19029:108;19132:4;19123:6;19029:108;:::i;:::-;19021:116;;18919:225;;;;:::o;19150:210::-;;19275:2;19264:9;19260:18;19252:26;;19288:65;19350:1;19339:9;19335:17;19326:6;19288:65;:::i;:::-;19242:118;;;;:::o;19366:313::-;;19517:2;19506:9;19502:18;19494:26;;19566:9;19560:4;19556:20;19552:1;19541:9;19537:17;19530:47;19594:78;19667:4;19658:6;19594:78;:::i;:::-;19586:86;;19484:195;;;;:::o;19685:419::-;;19889:2;19878:9;19874:18;19866:26;;19938:9;19932:4;19928:20;19924:1;19913:9;19909:17;19902:47;19966:131;20092:4;19966:131;:::i;:::-;19958:139;;19856:248;;;:::o;20110:419::-;;20314:2;20303:9;20299:18;20291:26;;20363:9;20357:4;20353:20;20349:1;20338:9;20334:17;20327:47;20391:131;20517:4;20391:131;:::i;:::-;20383:139;;20281:248;;;:::o;20535:419::-;;20739:2;20728:9;20724:18;20716:26;;20788:9;20782:4;20778:20;20774:1;20763:9;20759:17;20752:47;20816:131;20942:4;20816:131;:::i;:::-;20808:139;;20706:248;;;:::o;20960:419::-;;21164:2;21153:9;21149:18;21141:26;;21213:9;21207:4;21203:20;21199:1;21188:9;21184:17;21177:47;21241:131;21367:4;21241:131;:::i;:::-;21233:139;;21131:248;;;:::o;21385:419::-;;21589:2;21578:9;21574:18;21566:26;;21638:9;21632:4;21628:20;21624:1;21613:9;21609:17;21602:47;21666:131;21792:4;21666:131;:::i;:::-;21658:139;;21556:248;;;:::o;21810:419::-;;22014:2;22003:9;21999:18;21991:26;;22063:9;22057:4;22053:20;22049:1;22038:9;22034:17;22027:47;22091:131;22217:4;22091:131;:::i;:::-;22083:139;;21981:248;;;:::o;22235:419::-;;22439:2;22428:9;22424:18;22416:26;;22488:9;22482:4;22478:20;22474:1;22463:9;22459:17;22452:47;22516:131;22642:4;22516:131;:::i;:::-;22508:139;;22406:248;;;:::o;22660:419::-;;22864:2;22853:9;22849:18;22841:26;;22913:9;22907:4;22903:20;22899:1;22888:9;22884:17;22877:47;22941:131;23067:4;22941:131;:::i;:::-;22933:139;;22831:248;;;:::o;23085:419::-;;23289:2;23278:9;23274:18;23266:26;;23338:9;23332:4;23328:20;23324:1;23313:9;23309:17;23302:47;23366:131;23492:4;23366:131;:::i;:::-;23358:139;;23256:248;;;:::o;23510:419::-;;23714:2;23703:9;23699:18;23691:26;;23763:9;23757:4;23753:20;23749:1;23738:9;23734:17;23727:47;23791:131;23917:4;23791:131;:::i;:::-;23783:139;;23681:248;;;:::o;23935:419::-;;24139:2;24128:9;24124:18;24116:26;;24188:9;24182:4;24178:20;24174:1;24163:9;24159:17;24152:47;24216:131;24342:4;24216:131;:::i;:::-;24208:139;;24106:248;;;:::o;24360:419::-;;24564:2;24553:9;24549:18;24541:26;;24613:9;24607:4;24603:20;24599:1;24588:9;24584:17;24577:47;24641:131;24767:4;24641:131;:::i;:::-;24633:139;;24531:248;;;:::o;24785:419::-;;24989:2;24978:9;24974:18;24966:26;;25038:9;25032:4;25028:20;25024:1;25013:9;25009:17;25002:47;25066:131;25192:4;25066:131;:::i;:::-;25058:139;;24956:248;;;:::o;25210:419::-;;25414:2;25403:9;25399:18;25391:26;;25463:9;25457:4;25453:20;25449:1;25438:9;25434:17;25427:47;25491:131;25617:4;25491:131;:::i;:::-;25483:139;;25381:248;;;:::o;25635:419::-;;25839:2;25828:9;25824:18;25816:26;;25888:9;25882:4;25878:20;25874:1;25863:9;25859:17;25852:47;25916:131;26042:4;25916:131;:::i;:::-;25908:139;;25806:248;;;:::o;26060:419::-;;26264:2;26253:9;26249:18;26241:26;;26313:9;26307:4;26303:20;26299:1;26288:9;26284:17;26277:47;26341:131;26467:4;26341:131;:::i;:::-;26333:139;;26231:248;;;:::o;26485:419::-;;26689:2;26678:9;26674:18;26666:26;;26738:9;26732:4;26728:20;26724:1;26713:9;26709:17;26702:47;26766:131;26892:4;26766:131;:::i;:::-;26758:139;;26656:248;;;:::o;26910:419::-;;27114:2;27103:9;27099:18;27091:26;;27163:9;27157:4;27153:20;27149:1;27138:9;27134:17;27127:47;27191:131;27317:4;27191:131;:::i;:::-;27183:139;;27081:248;;;:::o;27335:419::-;;27539:2;27528:9;27524:18;27516:26;;27588:9;27582:4;27578:20;27574:1;27563:9;27559:17;27552:47;27616:131;27742:4;27616:131;:::i;:::-;27608:139;;27506:248;;;:::o;27760:419::-;;27964:2;27953:9;27949:18;27941:26;;28013:9;28007:4;28003:20;27999:1;27988:9;27984:17;27977:47;28041:131;28167:4;28041:131;:::i;:::-;28033:139;;27931:248;;;:::o;28185:419::-;;28389:2;28378:9;28374:18;28366:26;;28438:9;28432:4;28428:20;28424:1;28413:9;28409:17;28402:47;28466:131;28592:4;28466:131;:::i;:::-;28458:139;;28356:248;;;:::o;28610:419::-;;28814:2;28803:9;28799:18;28791:26;;28863:9;28857:4;28853:20;28849:1;28838:9;28834:17;28827:47;28891:131;29017:4;28891:131;:::i;:::-;28883:139;;28781:248;;;:::o;29035:419::-;;29239:2;29228:9;29224:18;29216:26;;29288:9;29282:4;29278:20;29274:1;29263:9;29259:17;29252:47;29316:131;29442:4;29316:131;:::i;:::-;29308:139;;29206:248;;;:::o;29460:419::-;;29664:2;29653:9;29649:18;29641:26;;29713:9;29707:4;29703:20;29699:1;29688:9;29684:17;29677:47;29741:131;29867:4;29741:131;:::i;:::-;29733:139;;29631:248;;;:::o;29885:222::-;;30016:2;30005:9;30001:18;29993:26;;30029:71;30097:1;30086:9;30082:17;30073:6;30029:71;:::i;:::-;29983:124;;;;:::o;30113:283::-;;30179:2;30173:9;30163:19;;30221:4;30213:6;30209:17;30328:6;30316:10;30313:22;30292:18;30280:10;30277:34;30274:62;30271:2;;;30339:18;;:::i;:::-;30271:2;30379:10;30375:2;30368:22;30153:243;;;;:::o;30402:331::-;;30553:18;30545:6;30542:30;30539:2;;;30575:18;;:::i;:::-;30539:2;30660:4;30656:9;30649:4;30641:6;30637:17;30633:33;30625:41;;30721:4;30715;30711:15;30703:23;;30468:265;;;:::o;30739:332::-;;30891:18;30883:6;30880:30;30877:2;;;30913:18;;:::i;:::-;30877:2;30998:4;30994:9;30987:4;30979:6;30975:17;30971:33;30963:41;;31059:4;31053;31049:15;31041:23;;30806:265;;;:::o;31077:132::-;;31167:3;31159:11;;31197:4;31192:3;31188:14;31180:22;;31149:60;;;:::o;31215:114::-;;31316:5;31310:12;31300:22;;31289:40;;;:::o;31335:98::-;;31420:5;31414:12;31404:22;;31393:40;;;:::o;31439:99::-;;31525:5;31519:12;31509:22;;31498:40;;;:::o;31544:113::-;;31646:4;31641:3;31637:14;31629:22;;31619:38;;;:::o;31663:184::-;;31796:6;31791:3;31784:19;31836:4;31831:3;31827:14;31812:29;;31774:73;;;;:::o;31853:168::-;;31970:6;31965:3;31958:19;32010:4;32005:3;32001:14;31986:29;;31948:73;;;;:::o;32027:169::-;;32145:6;32140:3;32133:19;32185:4;32180:3;32176:14;32161:29;;32123:73;;;;:::o;32202:148::-;;32341:3;32326:18;;32316:34;;;;:::o;32356:305::-;;32415:20;32433:1;32415:20;:::i;:::-;32410:25;;32449:20;32467:1;32449:20;:::i;:::-;32444:25;;32603:1;32535:66;32531:74;32528:1;32525:81;32522:2;;;32609:18;;:::i;:::-;32522:2;32653:1;32650;32646:9;32639:16;;32400:261;;;;:::o;32667:185::-;;32724:20;32742:1;32724:20;:::i;:::-;32719:25;;32758:20;32776:1;32758:20;:::i;:::-;32753:25;;32797:1;32787:2;;32802:18;;:::i;:::-;32787:2;32844:1;32841;32837:9;32832:14;;32709:143;;;;:::o;32858:348::-;;32921:20;32939:1;32921:20;:::i;:::-;32916:25;;32955:20;32973:1;32955:20;:::i;:::-;32950:25;;33143:1;33075:66;33071:74;33068:1;33065:81;33060:1;33053:9;33046:17;33042:105;33039:2;;;33150:18;;:::i;:::-;33039:2;33198:1;33195;33191:9;33180:20;;32906:300;;;;:::o;33212:191::-;;33272:20;33290:1;33272:20;:::i;:::-;33267:25;;33306:20;33324:1;33306:20;:::i;:::-;33301:25;;33345:1;33342;33339:8;33336:2;;;33350:18;;:::i;:::-;33336:2;33395:1;33392;33388:9;33380:17;;33257:146;;;;:::o;33409:96::-;;33475:24;33493:5;33475:24;:::i;:::-;33464:35;;33454:51;;;:::o;33511:90::-;;33588:5;33581:13;33574:21;33563:32;;33553:48;;;:::o;33607:149::-;;33683:66;33676:5;33672:78;33661:89;;33651:105;;;:::o;33762:126::-;;33839:42;33832:5;33828:54;33817:65;;33807:81;;;:::o;33894:77::-;;33960:5;33949:16;;33939:32;;;:::o;33977:154::-;34061:6;34056:3;34051;34038:30;34123:1;34114:6;34109:3;34105:16;34098:27;34028:103;;;:::o;34137:307::-;34205:1;34215:113;34229:6;34226:1;34223:13;34215:113;;;34314:1;34309:3;34305:11;34299:18;34295:1;34290:3;34286:11;34279:39;34251:2;34248:1;34244:10;34239:15;;34215:113;;;34346:6;34343:1;34340:13;34337:2;;;34426:1;34417:6;34412:3;34408:16;34401:27;34337:2;34186:258;;;;:::o;34450:320::-;;34531:1;34525:4;34521:12;34511:22;;34578:1;34572:4;34568:12;34599:18;34589:2;;34655:4;34647:6;34643:17;34633:27;;34589:2;34717;34709:6;34706:14;34686:18;34683:38;34680:2;;;34736:18;;:::i;:::-;34680:2;34501:269;;;;:::o;34776:233::-;;34838:24;34856:5;34838:24;:::i;:::-;34829:33;;34884:66;34877:5;34874:77;34871:2;;;34954:18;;:::i;:::-;34871:2;35001:1;34994:5;34990:13;34983:20;;34819:190;;;:::o;35015:176::-;;35064:20;35082:1;35064:20;:::i;:::-;35059:25;;35098:20;35116:1;35098:20;:::i;:::-;35093:25;;35137:1;35127:2;;35142:18;;:::i;:::-;35127:2;35183:1;35180;35176:9;35171:14;;35049:142;;;;:::o;35197:180::-;35245:77;35242:1;35235:88;35342:4;35339:1;35332:15;35366:4;35363:1;35356:15;35383:180;35431:77;35428:1;35421:88;35528:4;35525:1;35518:15;35552:4;35549:1;35542:15;35569:180;35617:77;35614:1;35607:88;35714:4;35711:1;35704:15;35738:4;35735:1;35728:15;35755:180;35803:77;35800:1;35793:88;35900:4;35897:1;35890:15;35924:4;35921:1;35914:15;35941:102;;36033:2;36029:7;36024:2;36017:5;36013:14;36009:28;35999:38;;35989:54;;;:::o;36049:122::-;36122:24;36140:5;36122:24;:::i;:::-;36115:5;36112:35;36102:2;;36161:1;36158;36151:12;36102:2;36092:79;:::o;36177:116::-;36247:21;36262:5;36247:21;:::i;:::-;36240:5;36237:32;36227:2;;36283:1;36280;36273:12;36227:2;36217:76;:::o;36299:120::-;36371:23;36388:5;36371:23;:::i;:::-;36364:5;36361:34;36351:2;;36409:1;36406;36399:12;36351:2;36341:78;:::o;36425:122::-;36498:24;36516:5;36498:24;:::i;:::-;36491:5;36488:35;36478:2;;36537:1;36534;36527:12;36478:2;36468:79;:::o
Swarm Source
ipfs://f885512909bdcd8ec671aeabfff374109c2c9088aad147ad32e584e2bc367ab1
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.