Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 65 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 15192027 | 833 days ago | IN | 0 ETH | 0.00013223 | ||||
Claim | 14361334 | 967 days ago | IN | 0 ETH | 0.00039668 | ||||
Claim | 14358599 | 967 days ago | IN | 0 ETH | 0.00039668 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358547 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358511 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358509 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14358483 | 967 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14339099 | 970 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14339099 | 970 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14333179 | 971 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14333175 | 971 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14332030 | 971 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14332030 | 971 days ago | IN | 0 ETH | 0.00039669 | ||||
Claim | 14332030 | 971 days ago | IN | 0 ETH | 0.00039669 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13522433 | 1098 days ago | 2.22 ETH |
Loading...
Loading
Contract Name:
CityLoot
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-04 */ // SPDX-License-Identifier: MIT // ______ __ __ __ __ // / \ / | / | / | / | // /$$$$$$ |$$/ _$$ |_ __ __ $$ | ______ ______ _$$ |_ // $$ | $$/ / |/ $$ | / | / | $$ | / \ / \ / $$ | // $$ | $$ |$$$$$$/ $$ | $$ | $$ | /$$$$$$ |/$$$$$$ |$$$$$$/ // $$ | __ $$ | $$ | __ $$ | $$ | $$ | $$ | $$ |$$ | $$ | $$ | __ // $$ \__/ |$$ | $$ |/ |$$ \__$$ | $$ |_____ $$ \__$$ |$$ \__$$ | $$ |/ | // $$ $$/ $$ | $$ $$/ $$ $$ | $$ |$$ $$/ $$ $$/ $$ $$/ // $$$$$$/ $$/ $$$$/ $$$$$$$ | $$$$$$$$/ $$$$$$/ $$$$$$/ $$$$/ // / \__$$ | // $$ $$/ // $$$$$$/ /// @author CityLoot TEAM /// @title CityLoot 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); } /** * @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; } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "000000"; } 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); for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i - 2] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol function strConcat( string memory _a, string memory _b, string memory _c, string memory _d, string memory _e ) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint256 k = 0; for (uint256 i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (uint256 i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (uint256 i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (uint256 i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (uint256 i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat( string memory _a, string memory _b, string memory _c, string memory _d ) internal pure returns (string memory) { return strConcat(_a, _b, _c, _d, ""); } function strConcat( string memory _a, string memory _b, string memory _c ) internal pure returns (string memory) { return strConcat(_a, _b, _c, "", ""); } function strConcat(string memory _a, string memory _b) internal pure returns (string memory) { return strConcat(_a, _b, "", "", ""); } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @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); } /** * @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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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; } } /** * @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}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public 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 { 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` and `to` are never both zero. * * 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 {} } /** * @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); } /** * @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(); } } contract CityLoot is ERC721Enumerable, ReentrancyGuard, Ownable { uint256 public constant CLAIM_VALUE = 0.06 ether; bool public LotteryFinished; uint256 public currentId = 1; string[] private location = [ "Seashore", "Cliff", "Desert", "Delta", "Island", "Plains", "Plateaus", "Hills", "Basins" ]; string[] private area = [ "100 Square Kilometers", "100,000 Square Kilometers", "500,000 Square Kilometers", "123 Square Kilometers", "560 Square Kilometers", "9,900 Square Kilometers", "46,000 Square Kilometers", "680,000 Square Kilometers", "5,500 Square Kilometers" ]; string[] private population = [ "100 People", "1,000 People", "10,000 People", "100,000 People", "1,000,000 People", "10,000,000 People", "21,900,000 People", "1,500,000 People", "3,500,000 People", "600,000 People", "400,000 People", "50,000 People", "80,000 People" ]; string[] private fiatCurrency = [ "BTC", "ETH", "DOT", "BNB", "ADA", "USDT", "USDC", "XRP", "DOGE", "SOL", "UNI", "LUNA", "MATIC" ]; string[] private traffic = [ "Airplan", "Ship", "Train", "Car", "Bicycle", "Camel", "Hiking", "Subway", "Subway", "Spaceship", "Rocket", "Carriage", "Flying Saucer" ]; string[] private food = [ "Rice", "Bread", "Turkey", "Tomato", "Potato", "Corn", "Sushi", "Sashimi", "Chicken Burrito", "Hot Dog" ]; string[] private drink = [ "Coffee", "Beer", "Vodka", "Sake", "Gin", "Brandy", "Rum", "Tequila", "Wine", "Soda", "Spirit", "Cocktail" ]; string[] private guardian = [ "Zeus", "Hera", "Poseidon", "Hades", "Demeter", "Hestia", "Athena", "Apollo", "Artemis", "Aphrodite", "Hermes", "Ares", "Hebe", "Hephaestus", "Eris" ]; constructor() ERC721("CityLoot", "CL") Ownable() {} receive() external payable { } function random(string memory input) internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked(input))); } function getLocation(uint256 tokenId) internal view returns (string memory) { return getRandomOut(tokenId, "Location", location); } function getArea(uint256 tokenId) internal view returns (string memory) { return getRandomOut(tokenId, "Area", area); } function getPopulation(uint256 tokenId) internal view returns (string memory) { return getRandomOut(tokenId, "Population", population); } function getFiatCurrency(uint256 tokenId) internal view returns (string memory) { return getRandomOut(tokenId, "FiatCurrency", fiatCurrency); } function getTraffic(uint256 tokenId) internal view returns (string memory) { return getRandomOut(tokenId, "Traffic", traffic); } function getFood(uint256 tokenId) internal view returns (string memory) { return getRandomOut(tokenId, "Food", food); } function getDrink(uint256 tokenId) internal view returns (string memory) { return getRandomOut(tokenId, "Drink", drink); } function getGuardian(uint256 tokenId) internal view returns (string memory) { return getRandomOut(tokenId, "Guardian", guardian); } function getColor(uint256 tokenId) internal pure returns (string memory) { uint256 randm = random(string(abi.encodePacked("Color", toString(tokenId)))); uint256 color256 = randm % uint256(0xffffff); string memory stringColor = Strings.toHexString(color256); return Strings.strConcat('#', stringColor); } function getRandomOut(uint256 tokenId, string memory keyPrefix, string[] memory sourceArray) internal pure returns (string memory) { //rand uint256 rand = random(string(abi.encodePacked(keyPrefix, toString(tokenId)))); //output string memory output = sourceArray[rand % sourceArray.length]; return output; } function tokenURI(uint256 tokenId) override public view returns (string memory) { string[17] memory parts; string memory fillColor = getColor(tokenId); parts[0] = Strings.strConcat('<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill:', fillColor, '; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">'); parts[1] = getLocation(tokenId); parts[2] = '</text><text x="10" y="40" class="base">'; parts[3] = getArea(tokenId); parts[4] = '</text><text x="10" y="60" class="base">'; parts[5] = getPopulation(tokenId); parts[6] = '</text><text x="10" y="80" class="base">'; parts[7] = getFiatCurrency(tokenId); parts[8] = '</text><text x="10" y="100" class="base">'; parts[9] = getTraffic(tokenId); parts[10] = '</text><text x="10" y="120" class="base">'; parts[11] = getFood(tokenId); parts[12] = '</text><text x="10" y="140" class="base">'; parts[13] = getDrink(tokenId); parts[14] = '</text><text x="10" y="160" class="base">'; parts[15] = getGuardian(tokenId); parts[16] = '</text></svg>'; string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8])); output = string(abi.encodePacked(output, parts[9], parts[10], parts[11], parts[12], parts[13], parts[14], parts[15], parts[16])); string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "City #', toString(tokenId), '", "description": "Where is your city? What currency is used? Who is the guardian? Create your own city in CityLoot! Feel free to use it in any way you want.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function claim() public payable nonReentrant{ uint256 value = msg.value; require(value >= CLAIM_VALUE, "at least claim 1 NFT"); require(currentId <= 9970,"no nft for claim"); uint256 times = value / CLAIM_VALUE; for(uint256 i = 0; i < times; i++) { if(currentId > 9970) { break; } if(value < CLAIM_VALUE) { break; } _safeMint(_msgSender(), currentId); currentId++; value -= CLAIM_VALUE; } if(value > 0) { Address.sendValue(payable(_msgSender()), value); } } function ownerClaim(uint256 tokenId) public nonReentrant onlyOwner { require(tokenId > 9970 && tokenId < 10000, "Token ID invalid"); _safeMint(owner(), tokenId); } function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // 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); } function withdraw(uint256 value) external onlyOwner { uint256 etherValue = address(this).balance; if(LotteryFinished || totalSupply() <= 9870) { Address.sendValue(payable(_msgSender()), value); }else{ require(etherValue - value >= (CLAIM_VALUE * 100), "too much withdraw"); Address.sendValue(payable(_msgSender()), value); } } function Lottery() external { require(totalSupply() >= 9970, "wait mint finished"); require(!LotteryFinished, "Lottery Finished"); require(balanceOf(_msgSender()) > 0, "balance should greater than 0"); //pseudorandom, we trust that minner wont trick for this reward uint256 rand = uint256(keccak256(abi.encodePacked(_msgSender(), block.number, block.gaslimit, totalSupply(), block.coinbase, block.timestamp, "Lottery"))); uint256 luckId = (rand % totalSupply()) + 1; address winner = ownerOf(luckId); Address.sendValue(payable(winner), CLAIM_VALUE * 100); LotteryFinished = true; } } /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CLAIM_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Lottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LotteryFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"ownerClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":"uint256","name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6001600c5560086101a08181526753656173686f726560c01b6101c052608090815260056101e08181526421b634b33360d91b6102005260a05260066102208181526511195cd95c9d60d21b6102405260c0526102608281526444656c746160d81b6102805260e0526102a081815265125cdb185b9960d21b6102c052610100526102e081815265506c61696e7360d01b610300526101205261032093845267506c61746561757360c01b61034052610140939093526103609081526448696c6c7360d81b61038052610160526103e06040526103a091825265426173696e7360d01b6103c05261018091909152620000fd90600d90600962000e60565b506040805161016081018252601561012082018181527f31303020537175617265204b696c6f6d6574657273000000000000000000000061014084015282528251808401845260198082527f3130302c30303020537175617265204b696c6f6d65746572730000000000000060208381019190915280850192909252845180860186528181527f3530302c30303020537175617265204b696c6f6d6574657273000000000000008184015284860152845180860186528381527f31323320537175617265204b696c6f6d65746572730000000000000000000000818401526060850152845180860186529283527f35363020537175617265204b696c6f6d657465727300000000000000000000008383015260808401929092528351808501855260178082527f392c39303020537175617265204b696c6f6d65746572730000000000000000008284015260a085019190915284518086018652601881527f34362c30303020537175617265204b696c6f6d657465727300000000000000008184015260c0850152845180860186529283527f3638302c30303020537175617265204b696c6f6d6574657273000000000000008383015260e084019290925283518085019094529083527f352c35303020537175617265204b696c6f6d6574657273000000000000000000908301526101008101919091526200030590600e90600962000e60565b50604080516101e081018252600a6101a08201908152693130302050656f706c6560b01b6101c0830152815281518083018352600c81526b312c3030302050656f706c6560a01b6020828101919091528083019190915282518084018452600d8082526c31302c3030302050656f706c6560981b828401528385019190915283518085018552600e8082526d3130302c3030302050656f706c6560901b8285015260608501919091528451808601865260108082526f312c3030302c3030302050656f706c6560801b8286015260808601919091528551808701875260118082527031302c3030302c3030302050656f706c6560781b8287015260a0870191909152865180880188529081527032312c3930302c3030302050656f706c6560781b8186015260c0860152855180870187528181526f312c3530302c3030302050656f706c6560801b8186015260e0860152855180870187529081526f332c3530302c3030302050656f706c6560801b81850152610100850152845180860186528181526d3630302c3030302050656f706c6560901b81850152610120850152845180860186529081526d3430302c3030302050656f706c6560901b81840152610140840152835180850185528181526c35302c3030302050656f706c6560981b8184015261016084015283518085019094528084526c38302c3030302050656f706c6560981b918401919091526101808201929092526200052a91600f919062000ec4565b50604080516101e08101825260036101a082018181526242544360e81b6101c08401528252825180840184528181526208aa8960eb1b6020828101919091528084019190915283518085018552828152621113d560ea1b8183015283850152835180850185528281526221272160e91b818301526060840152835180850185528281526241444160e81b818301526080840152835180850185526004808252631554d11560e21b8284015260a085019190915284518086018652818152635553444360e01b8184015260c0850152845180860186528381526205852560ec1b8184015260e08501528451808601865281815263444f474560e01b81840152610100850152845180860186528381526214d3d360ea1b818401526101208501528451808601865292835262554e4960e81b8383015261014084019290925283518085018552918252634c554e4160e01b82820152610160830191909152825180840190935260058352644d4154494360d81b90830152610180810191909152620006b890601090600d62000ec4565b50604051806101a001604052806040518060400160405280600781526020016620b4b9383630b760c91b8152508152602001604051806040016040528060048152602001630536869760e41b8152508152602001604051806040016040528060058152602001642a3930b4b760d91b81525081526020016040518060400160405280600381526020016221b0b960e91b81525081526020016040518060400160405280600781526020016642696379636c6560c81b81525081526020016040518060400160405280600581526020016410d85b595b60da1b81525081526020016040518060400160405280600681526020016548696b696e6760d01b81525081526020016040518060400160405280600681526020016553756277617960d01b81525081526020016040518060400160405280600681526020016553756277617960d01b81525081526020016040518060400160405280600981526020016805370616365736869760bc1b815250815260200160405180604001604052806006815260200165149bd8dad95d60d21b815250815260200160405180604001604052806008815260200167436172726961676560c01b81525081526020016040518060400160405280600d81526020016c23363cb4b7339029b0bab1b2b960991b815250815250601190600d620008b092919062000ec4565b50604080516101808101825260046101408201818152635269636560e01b610160840152825282518084018452600580825264109c99585960da1b60208381019190915280850192909252845180860186526006808252655475726b657960d01b82850152858701919091528551808701875281815265546f6d61746f60d01b8185015260608601528551808701875290815265506f7461746f60d01b818401526080850152845180860186529283526321b7b93760e11b8383015260a08401929092528351808501855291825264537573686960d81b8282015260c08301919091528251808401845260078082526653617368696d6960c81b8284015260e084019190915283518085018552600f81526e436869636b656e204275727269746f60881b818401526101008401528351808501909452835266486f7420446f6760c81b9083015261012081019190915262000a1090601290600a62000f16565b50604080516101c0810182526006610180820181815265436f6666656560d01b6101a08401528252825180840184526004808252632132b2b960e11b60208381019190915280850192909252845180860186526005815264566f646b6160d81b8184015284860152845180860186528181526353616b6560e01b8184015260608501528451808601865260038082526223b4b760e91b82850152608086019190915285518087018752848152654272616e647960d01b8185015260a0860152855180870187529081526252756d60e81b8184015260c085015284518086018652600781526654657175696c6160c81b8184015260e0850152845180860186528181526357696e6560e01b818401526101008501528451808601865290815263536f646160e01b81830152610120840152835180850185529182526514dc1a5c9a5d60d21b828201526101408301919091528251808401909352600883526710dbd8dadd185a5b60c21b9083015261016081019190915262000b9690601390600c62000f68565b50604080516102208101825260046101e08201818152635a65757360e01b610200840152825282518084018452818152634865726160e01b602082810191909152808401919091528351808501855260088152672837b9b2b4b237b760c11b8183015283850152835180850185526005815264486164657360d81b818301526060840152835180850185526007808252662232b6b2ba32b960c91b8284015260808501919091528451808601865260068082526548657374696160d01b8285015260a08601919091528551808701875281815265417468656e6160d01b8185015260c0860152855180870187528181526541706f6c6c6f60d01b8185015260e08601528551808701875291825266417274656d697360c81b82840152610100850191909152845180860186526009815268417068726f6469746560b81b8184015261012085015284518086018652908152654865726d657360d01b8183015261014084015283518085018552828152634172657360e01b8183015261016084015283518085018552828152634865626560e01b8183015261018084015283518085018552600a8152694865706861657374757360b01b818301526101a08401528351808501909452908352634572697360e01b908301526101c081019190915262000d8690601490600f62000fba565b5034801562000d9457600080fd5b50604080518082018252600881526710da5d1e531bdbdd60c21b60208083019182528351808501909452600284526110d360f21b90840152815191929162000ddf916000916200100c565b50805162000df59060019060208401906200100c565b50506001600a555062000e083362000e0e565b6200114e565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562000eb2579160200282015b8281111562000eb2578251805162000ea19184916020909101906200100c565b509160200191906001019062000e81565b5062000ec092915062001097565b5090565b82805482825590600052602060002090810192821562000eb2579160200282015b8281111562000eb2578251805162000f059184916020909101906200100c565b509160200191906001019062000ee5565b82805482825590600052602060002090810192821562000eb2579160200282015b8281111562000eb2578251805162000f579184916020909101906200100c565b509160200191906001019062000f37565b82805482825590600052602060002090810192821562000eb2579160200282015b8281111562000eb2578251805162000fa99184916020909101906200100c565b509160200191906001019062000f89565b82805482825590600052602060002090810192821562000eb2579160200282015b8281111562000eb2578251805162000ffb9184916020909101906200100c565b509160200191906001019062000fdb565b8280546200101a9062001111565b90600052602060002090601f0160209004810192826200103e576000855562001089565b82601f106200105957805160ff191683800117855562001089565b8280016001018555821562001089579182015b82811115620010895782518255916020019190600101906200106c565b5062000ec0929150620010b8565b8082111562000ec0576000620010ae8282620010cf565b5060010162001097565b5b8082111562000ec05760008155600101620010b9565b508054620010dd9062001111565b6000825580601f10620010ee575050565b601f0160209004906000526020600020908101906200110e9190620010b8565b50565b600181811c908216806200112657607f821691505b602082108114156200114857634e487b7160e01b600052602260045260246000fd5b50919050565b61382a806200115e6000396000f3fe6080604052600436106101855760003560e01c80635da208dd116100d157806398b88a1c1161008a578063c87b56dd11610064578063c87b56dd14610442578063e00dd16114610462578063e985e9c514610478578063f2fde38b146104c157600080fd5b806398b88a1c146103e1578063a22cb46514610402578063b88d4fde1461042257600080fd5b80635da208dd1461033e5780636352211e1461035957806370a0823114610379578063715018a6146103995780638da5cb5b146103ae57806395d89b41146103cc57600080fd5b80632e1a7d4d1161013e57806342842e0e1161011857806342842e0e146102d6578063434f48c4146102f65780634e71d92d146103165780634f6ccce71461031e57600080fd5b80632e1a7d4d146102815780632f745c59146102a15780634245b0f7146102c157600080fd5b806301ffc9a71461019157806306fdde03146101c6578063081812fc146101e8578063095ea7b31461022057806318160ddd1461024257806323b872dd1461026157600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac366004612f9b565b6104e1565b60405190151581526020015b60405180910390f35b3480156101d257600080fd5b506101db61050c565b6040516101bd9190613323565b3480156101f457600080fd5b50610208610203366004612fd5565b61059e565b6040516001600160a01b0390911681526020016101bd565b34801561022c57600080fd5b5061024061023b366004612f71565b610638565b005b34801561024e57600080fd5b506008545b6040519081526020016101bd565b34801561026d57600080fd5b5061024061027c366004612e1d565b61074e565b34801561028d57600080fd5b5061024061029c366004612fd5565b61077f565b3480156102ad57600080fd5b506102536102bc366004612f71565b610848565b3480156102cd57600080fd5b506102406108de565b3480156102e257600080fd5b506102406102f1366004612e1d565b610ab2565b34801561030257600080fd5b50610240610311366004612fd5565b610acd565b610240610bc3565b34801561032a57600080fd5b50610253610339366004612fd5565b610d56565b34801561034a57600080fd5b5061025366d529ae9e86000081565b34801561036557600080fd5b50610208610374366004612fd5565b610de9565b34801561038557600080fd5b50610253610394366004612dcf565b610e60565b3480156103a557600080fd5b50610240610ee7565b3480156103ba57600080fd5b50600b546001600160a01b0316610208565b3480156103d857600080fd5b506101db610f1d565b3480156103ed57600080fd5b50600b546101b190600160a01b900460ff1681565b34801561040e57600080fd5b5061024061041d366004612f35565b610f2c565b34801561042e57600080fd5b5061024061043d366004612e59565b610ff1565b34801561044e57600080fd5b506101db61045d366004612fd5565b611029565b34801561046e57600080fd5b50610253600c5481565b34801561048457600080fd5b506101b1610493366004612dea565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156104cd57600080fd5b506102406104dc366004612dcf565b611300565b60006001600160e01b0319821663780e9d6360e01b148061050657506105068261139b565b92915050565b60606000805461051b906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610547906134b3565b80156105945780601f1061056957610100808354040283529160200191610594565b820191906000526020600020905b81548152906001019060200180831161057757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661061c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061064382610de9565b9050806001600160a01b0316836001600160a01b031614156106b15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610613565b336001600160a01b03821614806106cd57506106cd8133610493565b61073f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610613565b61074983836113eb565b505050565b6107583382611459565b6107745760405162461bcd60e51b8152600401610613906133bd565b610749838383611550565b600b546001600160a01b031633146107a95760405162461bcd60e51b815260040161061390613388565b600b544790600160a01b900460ff16806107cd575061268e6107ca60085490565b11155b156107e1576107dd335b836116fb565b5050565b6107f366d529ae9e860000606461343a565b6107fd8383613459565b101561083f5760405162461bcd60e51b8152602060048201526011602482015270746f6f206d75636820776974686472617760781b6044820152606401610613565b6107dd336107d7565b600061085383610e60565b82106108b55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610613565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6126f26108ea60085490565b101561092d5760405162461bcd60e51b81526020600482015260126024820152711dd85a5d081b5a5b9d08199a5b9a5cda195960721b6044820152606401610613565b600b54600160a01b900460ff161561097a5760405162461bcd60e51b815260206004820152601060248201526f131bdd1d195c9e48119a5b9a5cda195960821b6044820152606401610613565b600061098533610e60565b116109d25760405162461bcd60e51b815260206004820152601d60248201527f62616c616e63652073686f756c642067726561746572207468616e20300000006044820152606401610613565b60003343456109e060085490565b6040516bffffffffffffffffffffffff19606095861b811660208301526034820194909452605481019290925260748201524190921b1660948201524260a8820152664c6f747465727960c81b60c882015260cf016040516020818303038152906040528051906020012060001c90506000610a5b60085490565b610a659083613509565b610a7090600161340e565b90506000610a7d82610de9565b9050610a9a81610a9566d529ae9e860000606461343a565b6116fb565b5050600b805460ff60a01b1916600160a01b17905550565b61074983838360405180602001604052806000815250610ff1565b6002600a541415610b205760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610613565b6002600a55600b546001600160a01b03163314610b4f5760405162461bcd60e51b815260040161061390613388565b6126f281118015610b61575061271081105b610ba05760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881251081a5b9d985b1a5960821b6044820152606401610613565b610bbb610bb5600b546001600160a01b031690565b82611814565b506001600a55565b6002600a541415610c165760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610613565b6002600a553466d529ae9e860000811015610c6a5760405162461bcd60e51b8152602060048201526014602482015273185d081b19585cdd0818db185a5b480c4813919560621b6044820152606401610613565b6126f2600c541115610cb15760405162461bcd60e51b815260206004820152601060248201526f6e6f206e667420666f7220636c61696d60801b6044820152606401610613565b6000610cc466d529ae9e86000083613426565b905060005b81811015610d3d576126f2600c541115610ce257610d3d565b66d529ae9e860000831015610cf657610d3d565b610d0233600c54611814565b600c8054906000610d12836134ee565b90915550610d29905066d529ae9e86000084613459565b925080610d35816134ee565b915050610cc9565b508115610d4d57610d4d336107d7565b50506001600a55565b6000610d6160085490565b8210610dc45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610613565b60088281548110610dd757610dd761355f565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806105065760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610613565b60006001600160a01b038216610ecb5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610613565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b03163314610f115760405162461bcd60e51b815260040161061390613388565b610f1b600061182e565b565b60606001805461051b906134b3565b6001600160a01b038216331415610f855760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610613565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ffb3383611459565b6110175760405162461bcd60e51b8152600401610613906133bd565b61102384848484611880565b50505050565b6060611033612d8b565b600061103e846118b3565b905061107b6040518060a001604052806076815260200161375760769139826040518060c00160405280608181526020016135a260819139611933565b825261108684611960565b82600160200201819052506040518060600160405280602881526020016137cd6028913960408301526110b884611a5e565b6060808401919091526040805191820190526028808252613623602083013960808301526110e584611b4f565b60a08301526040805160608101909152602880825261369d602083013960c083015261111084611c46565b60e0830152604080516060810190915260298082526136c5602083013961010083015261113c84611d3f565b61012083015260408051606081019091526029808252613674602083013961014083015261116984611e33565b610160830152604080516060810190915260298082526136ee602083013961018083015261119684611f24565b6101a08301526040805160608101909152602980825261364b60208301396101c08301526111c384612016565b6101e0830152604080518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b602080830191909152610200850191909152835181850151838601516060870151608088015160a089015160c08a015160e08b01516101008c0151995160009a6112339a909101613065565b60408051808303601f19018152908290526101208501516101408601516101608701516101808801516101a08901516101c08a01516101e08b01516102008c0151979950611286988a9890602001613065565b604051602081830303815290604052905060006112d36112a58761210b565b6112ae84612209565b6040516020016112bf929190613125565b604051602081830303815290604052612209565b9050806040516020016112e69190613274565b60408051601f198184030181529190529695505050505050565b600b546001600160a01b0316331461132a5760405162461bcd60e51b815260040161061390613388565b6001600160a01b03811661138f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610613565b6113988161182e565b50565b60006001600160e01b031982166380ac58cd60e01b14806113cc57506001600160e01b03198216635b5e139f60e01b145b8061050657506301ffc9a760e01b6001600160e01b0319831614610506565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061142082610de9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166114d25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610613565b60006114dd83610de9565b9050806001600160a01b0316846001600160a01b031614806115185750836001600160a01b031661150d8461059e565b6001600160a01b0316145b8061154857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661156382610de9565b6001600160a01b0316146115cb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610613565b6001600160a01b03821661162d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610613565b61163883838361236f565b6116436000826113eb565b6001600160a01b038316600090815260036020526040812080546001929061166c908490613459565b90915550506001600160a01b038216600090815260036020526040812080546001929061169a90849061340e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8047101561174b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610613565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611798576040519150601f19603f3d011682016040523d82523d6000602084013e61179d565b606091505b50509050806107495760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610613565b6107dd828260405180602001604052806000815250612427565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61188b848484611550565b6118978484848461245a565b6110235760405162461bcd60e51b815260040161061390613336565b606060006118e76118c38461210b565b6040516020016118d391906132b9565b604051602081830303815290604052612567565b905060006118f862ffffff83613509565b9050600061190582612598565b905061192a604051806040016040528060018152602001602360f81b815250826125ee565b95945050505050565b60606115488484846040518060200160405280600081525060405180602001604052806000815250612631565b606061050682604051806040016040528060088152602001672637b1b0ba34b7b760c11b815250600d805480602002602001604051908101604052809291908181526020016000905b82821015611a555783829060005260206000200180546119c8906134b3565b80601f01602080910402602001604051908101604052809291908181526020018280546119f4906134b3565b8015611a415780601f10611a1657610100808354040283529160200191611a41565b820191906000526020600020905b815481529060010190602001808311611a2457829003601f168201915b5050505050815260200190600101906119a9565b50505050612916565b606061050682604051806040016040528060048152602001634172656160e01b815250600e805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611ac2906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611aee906134b3565b8015611b3b5780601f10611b1057610100808354040283529160200191611b3b565b820191906000526020600020905b815481529060010190602001808311611b1e57829003601f168201915b505050505081526020019060010190611aa3565b6060610506826040518060400160405280600a8152602001692837b83ab630ba34b7b760b11b815250600f805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611bb9906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611be5906134b3565b8015611c325780601f10611c0757610100808354040283529160200191611c32565b820191906000526020600020905b815481529060010190602001808311611c1557829003601f168201915b505050505081526020019060010190611b9a565b6060610506826040518060400160405280600c81526020016b4669617443757272656e637960a01b8152506010805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611cb2906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611cde906134b3565b8015611d2b5780601f10611d0057610100808354040283529160200191611d2b565b820191906000526020600020905b815481529060010190602001808311611d0e57829003601f168201915b505050505081526020019060010190611c93565b606061050682604051806040016040528060078152602001665472616666696360c81b8152506011805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611da6906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd2906134b3565b8015611e1f5780601f10611df457610100808354040283529160200191611e1f565b820191906000526020600020905b815481529060010190602001808311611e0257829003601f168201915b505050505081526020019060010190611d87565b60606105068260405180604001604052806004815260200163119bdbd960e21b8152506012805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611e97906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec3906134b3565b8015611f105780601f10611ee557610100808354040283529160200191611f10565b820191906000526020600020905b815481529060010190602001808311611ef357829003601f168201915b505050505081526020019060010190611e78565b606061050682604051806040016040528060058152602001644472696e6b60d81b8152506013805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611f89906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb5906134b3565b80156120025780601f10611fd757610100808354040283529160200191612002565b820191906000526020600020905b815481529060010190602001808311611fe557829003601f168201915b505050505081526020019060010190611f6a565b6060610506826040518060400160405280600881526020016723bab0b93234b0b760c11b8152506014805480602002602001604051908101604052809291908181526020016000905b82821015611a5557838290600052602060002001805461207e906134b3565b80601f01602080910402602001604051908101604052809291908181526020018280546120aa906134b3565b80156120f75780601f106120cc576101008083540402835291602001916120f7565b820191906000526020600020905b8154815290600101906020018083116120da57829003601f168201915b50505050508152602001906001019061205f565b60608161212f5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121595780612143816134ee565b91506121529050600a83613426565b9150612133565b60008167ffffffffffffffff81111561217457612174613575565b6040519080825280601f01601f19166020018201604052801561219e576020820181803683370190505b5090505b8415611548576121b3600183613459565b91506121c0600a86613509565b6121cb90603061340e565b60f81b8183815181106121e0576121e061355f565b60200101906001600160f81b031916908160001a905350612202600a86613426565b94506121a2565b805160609080612229575050604080516020810190915260008152919050565b6000600361223883600261340e565b6122429190613426565b61224d90600461343a565b9050600061225c82602061340e565b67ffffffffffffffff81111561227457612274613575565b6040519080825280601f01601f19166020018201604052801561229e576020820181803683370190505b5090506000604051806060016040528060408152602001613717604091399050600181016020830160005b8681101561232a576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b8352600490920191016122c9565b506003860660018114612344576002811461235557612361565b613d3d60f01b600119830152612361565b603d60f81b6000198301525b505050918152949350505050565b6001600160a01b0383166123ca576123c581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6123ed565b816001600160a01b0316836001600160a01b0316146123ed576123ed8382612970565b6001600160a01b0382166124045761074981612a0d565b826001600160a01b0316826001600160a01b031614610749576107498282612abc565b6124318383612b00565b61243e600084848461245a565b6107495760405162461bcd60e51b815260040161061390613336565b60006001600160a01b0384163b1561255c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061249e9033908990889088906004016132e6565b602060405180830381600087803b1580156124b857600080fd5b505af19250505080156124e8575060408051601f3d908101601f191682019092526124e591810190612fb8565b60015b612542573d808015612516576040519150601f19603f3d011682016040523d82523d6000602084013e61251b565b606091505b50805161253a5760405162461bcd60e51b815260040161061390613336565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611548565b506001949350505050565b60008160405160200161257a919061301a565b60408051601f19818403018152919052805160209091012092915050565b6060816125c157505060408051808201909152600681526503030303030360d41b602082015290565b8160005b81156125e457806125d5816134ee565b915050600882901c91506125c5565b6115488482612c4e565b606061262a8383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250612631565b9392505050565b805182518451865188516060948a948a948a948a948a9460009490939092909161265b919061340e565b612665919061340e565b61266f919061340e565b612679919061340e565b67ffffffffffffffff81111561269157612691613575565b6040519080825280601f01601f1916602001820160405280156126bb576020820181803683370190505b509050806000805b8851811015612733578881815181106126de576126de61355f565b01602001516001600160f81b03191683836126f8816134ee565b94508151811061270a5761270a61355f565b60200101906001600160f81b031916908160001a9053508061272b816134ee565b9150506126c3565b5060005b87518110156127a7578781815181106127525761275261355f565b01602001516001600160f81b031916838361276c816134ee565b94508151811061277e5761277e61355f565b60200101906001600160f81b031916908160001a9053508061279f816134ee565b915050612737565b5060005b865181101561281b578681815181106127c6576127c661355f565b01602001516001600160f81b03191683836127e0816134ee565b9450815181106127f2576127f261355f565b60200101906001600160f81b031916908160001a90535080612813816134ee565b9150506127ab565b5060005b855181101561288f5785818151811061283a5761283a61355f565b01602001516001600160f81b0319168383612854816134ee565b9450815181106128665761286661355f565b60200101906001600160f81b031916908160001a90535080612887816134ee565b91505061281f565b5060005b8451811015612903578481815181106128ae576128ae61355f565b01602001516001600160f81b03191683836128c8816134ee565b9450815181106128da576128da61355f565b60200101906001600160f81b031916908160001a905350806128fb816134ee565b915050612893565b50909d9c50505050505050505050505050565b60606000612938846129278761210b565b6040516020016118d3929190613036565b905060008384518361294a9190613509565b8151811061295a5761295a61355f565b6020026020010151905080925050509392505050565b6000600161297d84610e60565b6129879190613459565b6000838152600760205260409020549091508082146129da576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612a1f90600190613459565b60008381526009602052604081205460088054939450909284908110612a4757612a4761355f565b906000526020600020015490508060088381548110612a6857612a6861355f565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612aa057612aa0613549565b6001900381819060005260206000200160009055905550505050565b6000612ac783610e60565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216612b565760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610613565b6000818152600260205260409020546001600160a01b031615612bbb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610613565b612bc76000838361236f565b6001600160a01b0382166000908152600360205260408120805460019290612bf090849061340e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60606000612c5d83600261343a565b67ffffffffffffffff811115612c7557612c75613575565b6040519080825280601f01601f191660200182016040528015612c9f576020820181803683370190505b5090506000612caf84600261343a565b612cba90600161340e565b90505b6001811115612d3c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612cee57612cee61355f565b1a60f81b82612cfe600284613459565b81518110612d0e57612d0e61355f565b60200101906001600160f81b031916908160001a90535060049490941c93612d358161349c565b9050612cbd565b50831561262a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610613565b6040518061022001604052806011905b6060815260200190600190039081612d9b5790505090565b80356001600160a01b0381168114612dca57600080fd5b919050565b600060208284031215612de157600080fd5b61262a82612db3565b60008060408385031215612dfd57600080fd5b612e0683612db3565b9150612e1460208401612db3565b90509250929050565b600080600060608486031215612e3257600080fd5b612e3b84612db3565b9250612e4960208501612db3565b9150604084013590509250925092565b60008060008060808587031215612e6f57600080fd5b612e7885612db3565b9350612e8660208601612db3565b925060408501359150606085013567ffffffffffffffff80821115612eaa57600080fd5b818701915087601f830112612ebe57600080fd5b813581811115612ed057612ed0613575565b604051601f8201601f19908116603f01168101908382118183101715612ef857612ef8613575565b816040528281528a6020848701011115612f1157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215612f4857600080fd5b612f5183612db3565b915060208301358015158114612f6657600080fd5b809150509250929050565b60008060408385031215612f8457600080fd5b612f8d83612db3565b946020939093013593505050565b600060208284031215612fad57600080fd5b813561262a8161358b565b600060208284031215612fca57600080fd5b815161262a8161358b565b600060208284031215612fe757600080fd5b5035919050565b60008151808452613006816020860160208601613470565b601f01601f19169290920160200192915050565b6000825161302c818460208701613470565b9190910192915050565b60008351613048818460208801613470565b83519083019061305c818360208801613470565b01949350505050565b60008a51613077818460208f01613470565b8a516130898183860160208f01613470565b8a51918401019061309e818360208e01613470565b89519101906130b1818360208d01613470565b88516130c38183850160208d01613470565b88519290910101906130d9818360208b01613470565b86516130eb8183850160208b01613470565b8651929091010190613101818360208901613470565b84516131138183850160208901613470565b9101019b9a5050505050505050505050565b6f7b226e616d65223a202243697479202360801b81528251600090613151816010850160208801613470565b7f222c20226465736372697074696f6e223a2022576865726520697320796f75726010918401918201527f20636974793f20576861742063757272656e637920697320757365643f20576860308201527f6f2069732074686520677561726469616e3f2043726561746520796f7572206f60508201527f776e206369747920696e20436974794c6f6f7421204665656c2066726565207460708201527f6f2075736520697420696e20616e792077617920796f752077616e742e222c2060908201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360b082015263194d8d0b60e21b60d082015283516132598160d4840160208801613470565b61227d60f01b60d4929091019182015260d601949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516132ac81601d850160208701613470565b91909101601d0192915050565b6421b7b637b960d91b8152600082516132d9816005850160208701613470565b9190910160050192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061331990830184612fee565b9695505050505050565b60208152600061262a6020830184612fee565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156134215761342161351d565b500190565b60008261343557613435613533565b500490565b60008160001904831182151516156134545761345461351d565b500290565b60008282101561346b5761346b61351d565b500390565b60005b8381101561348b578181015183820152602001613473565b838111156110235750506000910152565b6000816134ab576134ab61351d565b506000190190565b600181811c908216806134c757607f821691505b602082108114156134e857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135025761350261351d565b5060010190565b60008261351857613518613533565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461139857600080fdfe3b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223136302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223132302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea26469706673582212204b3d4282ffecab6efc8b71eb600b281fe1f32fd1521f6c244bc34847e4e775de64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101855760003560e01c80635da208dd116100d157806398b88a1c1161008a578063c87b56dd11610064578063c87b56dd14610442578063e00dd16114610462578063e985e9c514610478578063f2fde38b146104c157600080fd5b806398b88a1c146103e1578063a22cb46514610402578063b88d4fde1461042257600080fd5b80635da208dd1461033e5780636352211e1461035957806370a0823114610379578063715018a6146103995780638da5cb5b146103ae57806395d89b41146103cc57600080fd5b80632e1a7d4d1161013e57806342842e0e1161011857806342842e0e146102d6578063434f48c4146102f65780634e71d92d146103165780634f6ccce71461031e57600080fd5b80632e1a7d4d146102815780632f745c59146102a15780634245b0f7146102c157600080fd5b806301ffc9a71461019157806306fdde03146101c6578063081812fc146101e8578063095ea7b31461022057806318160ddd1461024257806323b872dd1461026157600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac366004612f9b565b6104e1565b60405190151581526020015b60405180910390f35b3480156101d257600080fd5b506101db61050c565b6040516101bd9190613323565b3480156101f457600080fd5b50610208610203366004612fd5565b61059e565b6040516001600160a01b0390911681526020016101bd565b34801561022c57600080fd5b5061024061023b366004612f71565b610638565b005b34801561024e57600080fd5b506008545b6040519081526020016101bd565b34801561026d57600080fd5b5061024061027c366004612e1d565b61074e565b34801561028d57600080fd5b5061024061029c366004612fd5565b61077f565b3480156102ad57600080fd5b506102536102bc366004612f71565b610848565b3480156102cd57600080fd5b506102406108de565b3480156102e257600080fd5b506102406102f1366004612e1d565b610ab2565b34801561030257600080fd5b50610240610311366004612fd5565b610acd565b610240610bc3565b34801561032a57600080fd5b50610253610339366004612fd5565b610d56565b34801561034a57600080fd5b5061025366d529ae9e86000081565b34801561036557600080fd5b50610208610374366004612fd5565b610de9565b34801561038557600080fd5b50610253610394366004612dcf565b610e60565b3480156103a557600080fd5b50610240610ee7565b3480156103ba57600080fd5b50600b546001600160a01b0316610208565b3480156103d857600080fd5b506101db610f1d565b3480156103ed57600080fd5b50600b546101b190600160a01b900460ff1681565b34801561040e57600080fd5b5061024061041d366004612f35565b610f2c565b34801561042e57600080fd5b5061024061043d366004612e59565b610ff1565b34801561044e57600080fd5b506101db61045d366004612fd5565b611029565b34801561046e57600080fd5b50610253600c5481565b34801561048457600080fd5b506101b1610493366004612dea565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156104cd57600080fd5b506102406104dc366004612dcf565b611300565b60006001600160e01b0319821663780e9d6360e01b148061050657506105068261139b565b92915050565b60606000805461051b906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610547906134b3565b80156105945780601f1061056957610100808354040283529160200191610594565b820191906000526020600020905b81548152906001019060200180831161057757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661061c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061064382610de9565b9050806001600160a01b0316836001600160a01b031614156106b15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610613565b336001600160a01b03821614806106cd57506106cd8133610493565b61073f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610613565b61074983836113eb565b505050565b6107583382611459565b6107745760405162461bcd60e51b8152600401610613906133bd565b610749838383611550565b600b546001600160a01b031633146107a95760405162461bcd60e51b815260040161061390613388565b600b544790600160a01b900460ff16806107cd575061268e6107ca60085490565b11155b156107e1576107dd335b836116fb565b5050565b6107f366d529ae9e860000606461343a565b6107fd8383613459565b101561083f5760405162461bcd60e51b8152602060048201526011602482015270746f6f206d75636820776974686472617760781b6044820152606401610613565b6107dd336107d7565b600061085383610e60565b82106108b55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610613565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6126f26108ea60085490565b101561092d5760405162461bcd60e51b81526020600482015260126024820152711dd85a5d081b5a5b9d08199a5b9a5cda195960721b6044820152606401610613565b600b54600160a01b900460ff161561097a5760405162461bcd60e51b815260206004820152601060248201526f131bdd1d195c9e48119a5b9a5cda195960821b6044820152606401610613565b600061098533610e60565b116109d25760405162461bcd60e51b815260206004820152601d60248201527f62616c616e63652073686f756c642067726561746572207468616e20300000006044820152606401610613565b60003343456109e060085490565b6040516bffffffffffffffffffffffff19606095861b811660208301526034820194909452605481019290925260748201524190921b1660948201524260a8820152664c6f747465727960c81b60c882015260cf016040516020818303038152906040528051906020012060001c90506000610a5b60085490565b610a659083613509565b610a7090600161340e565b90506000610a7d82610de9565b9050610a9a81610a9566d529ae9e860000606461343a565b6116fb565b5050600b805460ff60a01b1916600160a01b17905550565b61074983838360405180602001604052806000815250610ff1565b6002600a541415610b205760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610613565b6002600a55600b546001600160a01b03163314610b4f5760405162461bcd60e51b815260040161061390613388565b6126f281118015610b61575061271081105b610ba05760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881251081a5b9d985b1a5960821b6044820152606401610613565b610bbb610bb5600b546001600160a01b031690565b82611814565b506001600a55565b6002600a541415610c165760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610613565b6002600a553466d529ae9e860000811015610c6a5760405162461bcd60e51b8152602060048201526014602482015273185d081b19585cdd0818db185a5b480c4813919560621b6044820152606401610613565b6126f2600c541115610cb15760405162461bcd60e51b815260206004820152601060248201526f6e6f206e667420666f7220636c61696d60801b6044820152606401610613565b6000610cc466d529ae9e86000083613426565b905060005b81811015610d3d576126f2600c541115610ce257610d3d565b66d529ae9e860000831015610cf657610d3d565b610d0233600c54611814565b600c8054906000610d12836134ee565b90915550610d29905066d529ae9e86000084613459565b925080610d35816134ee565b915050610cc9565b508115610d4d57610d4d336107d7565b50506001600a55565b6000610d6160085490565b8210610dc45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610613565b60088281548110610dd757610dd761355f565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806105065760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610613565b60006001600160a01b038216610ecb5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610613565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b03163314610f115760405162461bcd60e51b815260040161061390613388565b610f1b600061182e565b565b60606001805461051b906134b3565b6001600160a01b038216331415610f855760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610613565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ffb3383611459565b6110175760405162461bcd60e51b8152600401610613906133bd565b61102384848484611880565b50505050565b6060611033612d8b565b600061103e846118b3565b905061107b6040518060a001604052806076815260200161375760769139826040518060c00160405280608181526020016135a260819139611933565b825261108684611960565b82600160200201819052506040518060600160405280602881526020016137cd6028913960408301526110b884611a5e565b6060808401919091526040805191820190526028808252613623602083013960808301526110e584611b4f565b60a08301526040805160608101909152602880825261369d602083013960c083015261111084611c46565b60e0830152604080516060810190915260298082526136c5602083013961010083015261113c84611d3f565b61012083015260408051606081019091526029808252613674602083013961014083015261116984611e33565b610160830152604080516060810190915260298082526136ee602083013961018083015261119684611f24565b6101a08301526040805160608101909152602980825261364b60208301396101c08301526111c384612016565b6101e0830152604080518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b602080830191909152610200850191909152835181850151838601516060870151608088015160a089015160c08a015160e08b01516101008c0151995160009a6112339a909101613065565b60408051808303601f19018152908290526101208501516101408601516101608701516101808801516101a08901516101c08a01516101e08b01516102008c0151979950611286988a9890602001613065565b604051602081830303815290604052905060006112d36112a58761210b565b6112ae84612209565b6040516020016112bf929190613125565b604051602081830303815290604052612209565b9050806040516020016112e69190613274565b60408051601f198184030181529190529695505050505050565b600b546001600160a01b0316331461132a5760405162461bcd60e51b815260040161061390613388565b6001600160a01b03811661138f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610613565b6113988161182e565b50565b60006001600160e01b031982166380ac58cd60e01b14806113cc57506001600160e01b03198216635b5e139f60e01b145b8061050657506301ffc9a760e01b6001600160e01b0319831614610506565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061142082610de9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166114d25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610613565b60006114dd83610de9565b9050806001600160a01b0316846001600160a01b031614806115185750836001600160a01b031661150d8461059e565b6001600160a01b0316145b8061154857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661156382610de9565b6001600160a01b0316146115cb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610613565b6001600160a01b03821661162d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610613565b61163883838361236f565b6116436000826113eb565b6001600160a01b038316600090815260036020526040812080546001929061166c908490613459565b90915550506001600160a01b038216600090815260036020526040812080546001929061169a90849061340e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8047101561174b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610613565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611798576040519150601f19603f3d011682016040523d82523d6000602084013e61179d565b606091505b50509050806107495760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610613565b6107dd828260405180602001604052806000815250612427565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61188b848484611550565b6118978484848461245a565b6110235760405162461bcd60e51b815260040161061390613336565b606060006118e76118c38461210b565b6040516020016118d391906132b9565b604051602081830303815290604052612567565b905060006118f862ffffff83613509565b9050600061190582612598565b905061192a604051806040016040528060018152602001602360f81b815250826125ee565b95945050505050565b60606115488484846040518060200160405280600081525060405180602001604052806000815250612631565b606061050682604051806040016040528060088152602001672637b1b0ba34b7b760c11b815250600d805480602002602001604051908101604052809291908181526020016000905b82821015611a555783829060005260206000200180546119c8906134b3565b80601f01602080910402602001604051908101604052809291908181526020018280546119f4906134b3565b8015611a415780601f10611a1657610100808354040283529160200191611a41565b820191906000526020600020905b815481529060010190602001808311611a2457829003601f168201915b5050505050815260200190600101906119a9565b50505050612916565b606061050682604051806040016040528060048152602001634172656160e01b815250600e805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611ac2906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611aee906134b3565b8015611b3b5780601f10611b1057610100808354040283529160200191611b3b565b820191906000526020600020905b815481529060010190602001808311611b1e57829003601f168201915b505050505081526020019060010190611aa3565b6060610506826040518060400160405280600a8152602001692837b83ab630ba34b7b760b11b815250600f805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611bb9906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611be5906134b3565b8015611c325780601f10611c0757610100808354040283529160200191611c32565b820191906000526020600020905b815481529060010190602001808311611c1557829003601f168201915b505050505081526020019060010190611b9a565b6060610506826040518060400160405280600c81526020016b4669617443757272656e637960a01b8152506010805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611cb2906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611cde906134b3565b8015611d2b5780601f10611d0057610100808354040283529160200191611d2b565b820191906000526020600020905b815481529060010190602001808311611d0e57829003601f168201915b505050505081526020019060010190611c93565b606061050682604051806040016040528060078152602001665472616666696360c81b8152506011805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611da6906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd2906134b3565b8015611e1f5780601f10611df457610100808354040283529160200191611e1f565b820191906000526020600020905b815481529060010190602001808311611e0257829003601f168201915b505050505081526020019060010190611d87565b60606105068260405180604001604052806004815260200163119bdbd960e21b8152506012805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611e97906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec3906134b3565b8015611f105780601f10611ee557610100808354040283529160200191611f10565b820191906000526020600020905b815481529060010190602001808311611ef357829003601f168201915b505050505081526020019060010190611e78565b606061050682604051806040016040528060058152602001644472696e6b60d81b8152506013805480602002602001604051908101604052809291908181526020016000905b82821015611a55578382906000526020600020018054611f89906134b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb5906134b3565b80156120025780601f10611fd757610100808354040283529160200191612002565b820191906000526020600020905b815481529060010190602001808311611fe557829003601f168201915b505050505081526020019060010190611f6a565b6060610506826040518060400160405280600881526020016723bab0b93234b0b760c11b8152506014805480602002602001604051908101604052809291908181526020016000905b82821015611a5557838290600052602060002001805461207e906134b3565b80601f01602080910402602001604051908101604052809291908181526020018280546120aa906134b3565b80156120f75780601f106120cc576101008083540402835291602001916120f7565b820191906000526020600020905b8154815290600101906020018083116120da57829003601f168201915b50505050508152602001906001019061205f565b60608161212f5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121595780612143816134ee565b91506121529050600a83613426565b9150612133565b60008167ffffffffffffffff81111561217457612174613575565b6040519080825280601f01601f19166020018201604052801561219e576020820181803683370190505b5090505b8415611548576121b3600183613459565b91506121c0600a86613509565b6121cb90603061340e565b60f81b8183815181106121e0576121e061355f565b60200101906001600160f81b031916908160001a905350612202600a86613426565b94506121a2565b805160609080612229575050604080516020810190915260008152919050565b6000600361223883600261340e565b6122429190613426565b61224d90600461343a565b9050600061225c82602061340e565b67ffffffffffffffff81111561227457612274613575565b6040519080825280601f01601f19166020018201604052801561229e576020820181803683370190505b5090506000604051806060016040528060408152602001613717604091399050600181016020830160005b8681101561232a576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b8352600490920191016122c9565b506003860660018114612344576002811461235557612361565b613d3d60f01b600119830152612361565b603d60f81b6000198301525b505050918152949350505050565b6001600160a01b0383166123ca576123c581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6123ed565b816001600160a01b0316836001600160a01b0316146123ed576123ed8382612970565b6001600160a01b0382166124045761074981612a0d565b826001600160a01b0316826001600160a01b031614610749576107498282612abc565b6124318383612b00565b61243e600084848461245a565b6107495760405162461bcd60e51b815260040161061390613336565b60006001600160a01b0384163b1561255c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061249e9033908990889088906004016132e6565b602060405180830381600087803b1580156124b857600080fd5b505af19250505080156124e8575060408051601f3d908101601f191682019092526124e591810190612fb8565b60015b612542573d808015612516576040519150601f19603f3d011682016040523d82523d6000602084013e61251b565b606091505b50805161253a5760405162461bcd60e51b815260040161061390613336565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611548565b506001949350505050565b60008160405160200161257a919061301a565b60408051601f19818403018152919052805160209091012092915050565b6060816125c157505060408051808201909152600681526503030303030360d41b602082015290565b8160005b81156125e457806125d5816134ee565b915050600882901c91506125c5565b6115488482612c4e565b606061262a8383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250612631565b9392505050565b805182518451865188516060948a948a948a948a948a9460009490939092909161265b919061340e565b612665919061340e565b61266f919061340e565b612679919061340e565b67ffffffffffffffff81111561269157612691613575565b6040519080825280601f01601f1916602001820160405280156126bb576020820181803683370190505b509050806000805b8851811015612733578881815181106126de576126de61355f565b01602001516001600160f81b03191683836126f8816134ee565b94508151811061270a5761270a61355f565b60200101906001600160f81b031916908160001a9053508061272b816134ee565b9150506126c3565b5060005b87518110156127a7578781815181106127525761275261355f565b01602001516001600160f81b031916838361276c816134ee565b94508151811061277e5761277e61355f565b60200101906001600160f81b031916908160001a9053508061279f816134ee565b915050612737565b5060005b865181101561281b578681815181106127c6576127c661355f565b01602001516001600160f81b03191683836127e0816134ee565b9450815181106127f2576127f261355f565b60200101906001600160f81b031916908160001a90535080612813816134ee565b9150506127ab565b5060005b855181101561288f5785818151811061283a5761283a61355f565b01602001516001600160f81b0319168383612854816134ee565b9450815181106128665761286661355f565b60200101906001600160f81b031916908160001a90535080612887816134ee565b91505061281f565b5060005b8451811015612903578481815181106128ae576128ae61355f565b01602001516001600160f81b03191683836128c8816134ee565b9450815181106128da576128da61355f565b60200101906001600160f81b031916908160001a905350806128fb816134ee565b915050612893565b50909d9c50505050505050505050505050565b60606000612938846129278761210b565b6040516020016118d3929190613036565b905060008384518361294a9190613509565b8151811061295a5761295a61355f565b6020026020010151905080925050509392505050565b6000600161297d84610e60565b6129879190613459565b6000838152600760205260409020549091508082146129da576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612a1f90600190613459565b60008381526009602052604081205460088054939450909284908110612a4757612a4761355f565b906000526020600020015490508060088381548110612a6857612a6861355f565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612aa057612aa0613549565b6001900381819060005260206000200160009055905550505050565b6000612ac783610e60565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216612b565760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610613565b6000818152600260205260409020546001600160a01b031615612bbb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610613565b612bc76000838361236f565b6001600160a01b0382166000908152600360205260408120805460019290612bf090849061340e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60606000612c5d83600261343a565b67ffffffffffffffff811115612c7557612c75613575565b6040519080825280601f01601f191660200182016040528015612c9f576020820181803683370190505b5090506000612caf84600261343a565b612cba90600161340e565b90505b6001811115612d3c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612cee57612cee61355f565b1a60f81b82612cfe600284613459565b81518110612d0e57612d0e61355f565b60200101906001600160f81b031916908160001a90535060049490941c93612d358161349c565b9050612cbd565b50831561262a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610613565b6040518061022001604052806011905b6060815260200190600190039081612d9b5790505090565b80356001600160a01b0381168114612dca57600080fd5b919050565b600060208284031215612de157600080fd5b61262a82612db3565b60008060408385031215612dfd57600080fd5b612e0683612db3565b9150612e1460208401612db3565b90509250929050565b600080600060608486031215612e3257600080fd5b612e3b84612db3565b9250612e4960208501612db3565b9150604084013590509250925092565b60008060008060808587031215612e6f57600080fd5b612e7885612db3565b9350612e8660208601612db3565b925060408501359150606085013567ffffffffffffffff80821115612eaa57600080fd5b818701915087601f830112612ebe57600080fd5b813581811115612ed057612ed0613575565b604051601f8201601f19908116603f01168101908382118183101715612ef857612ef8613575565b816040528281528a6020848701011115612f1157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215612f4857600080fd5b612f5183612db3565b915060208301358015158114612f6657600080fd5b809150509250929050565b60008060408385031215612f8457600080fd5b612f8d83612db3565b946020939093013593505050565b600060208284031215612fad57600080fd5b813561262a8161358b565b600060208284031215612fca57600080fd5b815161262a8161358b565b600060208284031215612fe757600080fd5b5035919050565b60008151808452613006816020860160208601613470565b601f01601f19169290920160200192915050565b6000825161302c818460208701613470565b9190910192915050565b60008351613048818460208801613470565b83519083019061305c818360208801613470565b01949350505050565b60008a51613077818460208f01613470565b8a516130898183860160208f01613470565b8a51918401019061309e818360208e01613470565b89519101906130b1818360208d01613470565b88516130c38183850160208d01613470565b88519290910101906130d9818360208b01613470565b86516130eb8183850160208b01613470565b8651929091010190613101818360208901613470565b84516131138183850160208901613470565b9101019b9a5050505050505050505050565b6f7b226e616d65223a202243697479202360801b81528251600090613151816010850160208801613470565b7f222c20226465736372697074696f6e223a2022576865726520697320796f75726010918401918201527f20636974793f20576861742063757272656e637920697320757365643f20576860308201527f6f2069732074686520677561726469616e3f2043726561746520796f7572206f60508201527f776e206369747920696e20436974794c6f6f7421204665656c2066726565207460708201527f6f2075736520697420696e20616e792077617920796f752077616e742e222c2060908201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360b082015263194d8d0b60e21b60d082015283516132598160d4840160208801613470565b61227d60f01b60d4929091019182015260d601949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516132ac81601d850160208701613470565b91909101601d0192915050565b6421b7b637b960d91b8152600082516132d9816005850160208701613470565b9190910160050192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061331990830184612fee565b9695505050505050565b60208152600061262a6020830184612fee565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156134215761342161351d565b500190565b60008261343557613435613533565b500490565b60008160001904831182151516156134545761345461351d565b500290565b60008282101561346b5761346b61351d565b500390565b60005b8381101561348b578181015183820152602001613473565b838111156110235750506000910152565b6000816134ab576134ab61351d565b506000190190565b600181811c908216806134c757607f821691505b602082108114156134e857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135025761350261351d565b5060010190565b60008261351857613518613533565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461139857600080fdfe3b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223136302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223132302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea26469706673582212204b3d4282ffecab6efc8b71eb600b281fe1f32fd1521f6c244bc34847e4e775de64736f6c63430008070033
Deployed Bytecode Sourcemap
46920:9660:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40772:224;;;;;;;;;;-1:-1:-1;40772:224:0;;;;;:::i;:::-;;:::i;:::-;;;10388:14:1;;10381:22;10363:41;;10351:2;10336:18;40772:224:0;;;;;;;;27900:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29459:221::-;;;;;;;;;;-1:-1:-1;29459:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9686:32:1;;;9668:51;;9656:2;9641:18;29459:221:0;9522:203:1;28982:411:0;;;;;;;;;;-1:-1:-1;28982:411:0;;;;;:::i;:::-;;:::i;:::-;;41412:113;;;;;;;;;;-1:-1:-1;41500:10:0;:17;41412:113;;;21517:25:1;;;21505:2;21490:18;41412:113:0;21371:177:1;30349:339:0;;;;;;;;;;-1:-1:-1;30349:339:0;;;;;:::i;:::-;;:::i;55455:425::-;;;;;;;;;;-1:-1:-1;55455:425:0;;;;;:::i;:::-;;:::i;41080:256::-;;;;;;;;;;-1:-1:-1;41080:256:0;;;;;:::i;:::-;;:::i;55888:689::-;;;;;;;;;;;;;:::i;30759:185::-;;;;;;;;;;-1:-1:-1;30759:185:0;;;;;:::i;:::-;;:::i;54538:186::-;;;;;;;;;;-1:-1:-1;54538:186:0;;;;;:::i;:::-;;:::i;53841:685::-;;;:::i;41602:233::-;;;;;;;;;;-1:-1:-1;41602:233:0;;;;;:::i;:::-;;:::i;46993:48::-;;;;;;;;;;;;47031:10;46993:48;;27594:239;;;;;;;;;;-1:-1:-1;27594:239:0;;;;;:::i;:::-;;:::i;27324:208::-;;;;;;;;;;-1:-1:-1;27324:208:0;;;;;:::i;:::-;;:::i;12364:94::-;;;;;;;;;;;;;:::i;11713:87::-;;;;;;;;;;-1:-1:-1;11786:6:0;;-1:-1:-1;;;;;11786:6:0;11713:87;;28069:104;;;;;;;;;;;;;:::i;47048:27::-;;;;;;;;;;-1:-1:-1;47048:27:0;;;;-1:-1:-1;;;47048:27:0;;;;;;29752:295;;;;;;;;;;-1:-1:-1;29752:295:0;;;;;:::i;:::-;;:::i;31015:328::-;;;;;;;;;;-1:-1:-1;31015:328:0;;;;;:::i;:::-;;:::i;51727:2106::-;;;;;;;;;;-1:-1:-1;51727:2106:0;;;;;:::i;:::-;;:::i;47082:28::-;;;;;;;;;;;;;;;;30118:164;;;;;;;;;;-1:-1:-1;30118:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;30239:25:0;;;30215:4;30239:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;30118:164;12613:192;;;;;;;;;;-1:-1:-1;12613:192:0;;;;;:::i;:::-;;:::i;40772:224::-;40874:4;-1:-1:-1;;;;;;40898:50:0;;-1:-1:-1;;;40898:50:0;;:90;;;40952:36;40976:11;40952:23;:36::i;:::-;40891:97;40772:224;-1:-1:-1;;40772:224:0:o;27900:100::-;27954:13;27987:5;27980:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27900:100;:::o;29459:221::-;29535:7;32942:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32942:16:0;29555:73;;;;-1:-1:-1;;;29555:73:0;;17057:2:1;29555:73:0;;;17039:21:1;17096:2;17076:18;;;17069:30;17135:34;17115:18;;;17108:62;-1:-1:-1;;;17186:18:1;;;17179:42;17238:19;;29555:73:0;;;;;;;;;-1:-1:-1;29648:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;29648:24:0;;29459:221::o;28982:411::-;29063:13;29079:23;29094:7;29079:14;:23::i;:::-;29063:39;;29127:5;-1:-1:-1;;;;;29121:11:0;:2;-1:-1:-1;;;;;29121:11:0;;;29113:57;;;;-1:-1:-1;;;29113:57:0;;18944:2:1;29113:57:0;;;18926:21:1;18983:2;18963:18;;;18956:30;19022:34;19002:18;;;18995:62;-1:-1:-1;;;19073:18:1;;;19066:31;19114:19;;29113:57:0;18742:397:1;29113:57:0;10669:10;-1:-1:-1;;;;;29205:21:0;;;;:62;;-1:-1:-1;29230:37:0;29247:5;10669:10;30118:164;:::i;29230:37::-;29183:168;;;;-1:-1:-1;;;29183:168:0;;15450:2:1;29183:168:0;;;15432:21:1;15489:2;15469:18;;;15462:30;15528:34;15508:18;;;15501:62;15599:26;15579:18;;;15572:54;15643:19;;29183:168:0;15248:420:1;29183:168:0;29364:21;29373:2;29377:7;29364:8;:21::i;:::-;29052:341;28982:411;;:::o;30349:339::-;30544:41;10669:10;30577:7;30544:18;:41::i;:::-;30536:103;;;;-1:-1:-1;;;30536:103:0;;;;;;;:::i;:::-;30652:28;30662:4;30668:2;30672:7;30652:9;:28::i;55455:425::-;11786:6;;-1:-1:-1;;;;;11786:6:0;10669:10;11933:23;11925:68;;;;-1:-1:-1;;;11925:68:0;;;;;;;:::i;:::-;55583:15:::1;::::0;55539:21:::1;::::0;-1:-1:-1;;;55583:15:0;::::1;;;::::0;:40:::1;;;55619:4;55602:13;41500:10:::0;:17;;41412:113;55602:13:::1;:21;;55583:40;55580:283;;;55640:47;10669:10:::0;55666:12:::1;55681:5;55640:17;:47::i;:::-;55507:373;55455:425:::0;:::o;55580:283::-:1;55749:17;47031:10;55763:3;55749:17;:::i;:::-;55726:18;55739:5:::0;55726:10;:18:::1;:::i;:::-;:41;;55718:71;;;::::0;-1:-1:-1;;;55718:71:0;;20867:2:1;55718:71:0::1;::::0;::::1;20849:21:1::0;20906:2;20886:18;;;20879:30;-1:-1:-1;;;20925:18:1;;;20918:47;20982:18;;55718:71:0::1;20665:341:1::0;55718:71:0::1;55804:47;10669:10:::0;55830:12:::1;10589:98:::0;41080:256;41177:7;41213:23;41230:5;41213:16;:23::i;:::-;41205:5;:31;41197:87;;;;-1:-1:-1;;;41197:87:0;;11202:2:1;41197:87:0;;;11184:21:1;11241:2;11221:18;;;11214:30;11280:34;11260:18;;;11253:62;-1:-1:-1;;;11331:18:1;;;11324:41;11382:19;;41197:87:0;11000:407:1;41197:87:0;-1:-1:-1;;;;;;41302:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;41080:256::o;55888:689::-;55952:4;55935:13;41500:10;:17;;41412:113;55935:13;:21;;55927:52;;;;-1:-1:-1;;;55927:52:0;;13905:2:1;55927:52:0;;;13887:21:1;13944:2;13924:18;;;13917:30;-1:-1:-1;;;13963:18:1;;;13956:48;14021:18;;55927:52:0;13703:342:1;55927:52:0;55999:15;;-1:-1:-1;;;55999:15:0;;;;55998:16;55990:45;;;;-1:-1:-1;;;55990:45:0;;19691:2:1;55990:45:0;;;19673:21:1;19730:2;19710:18;;;19703:30;-1:-1:-1;;;19749:18:1;;;19742:46;19805:18;;55990:45:0;19489:340:1;55990:45:0;56080:1;56054:23;10669:10;27324:208;:::i;56054:23::-;:27;56046:69;;;;-1:-1:-1;;;56046:69:0;;18586:2:1;56046:69:0;;;18568:21:1;18625:2;18605:18;;;18598:30;18664:31;18644:18;;;18637:59;18713:18;;56046:69:0;18384:353:1;56046:69:0;56199:12;10669:10;56263:12;56277:14;56293:13;41500:10;:17;;41412:113;56293:13;56232:119;;-1:-1:-1;;4142:2:1;4138:15;;;4134:24;;56232:119:0;;;4122:37:1;4175:12;;;4168:28;;;;4212:12;;;4205:28;;;;4249:12;;;4242:28;56308:14:0;4305:15:1;;;4301:24;4286:13;;;4279:47;56324:15:0;4342:13:1;;;4335:29;-1:-1:-1;;;4380:13:1;;;4373:32;4421:13;;56232:119:0;;;;;;;;;;;;56222:130;;;;;;56214:139;;56199:154;;56374:14;56399:13;41500:10;:17;;41412:113;56399:13;56392:20;;:4;:20;:::i;:::-;56391:26;;56416:1;56391:26;:::i;:::-;56374:43;;56430:14;56447:15;56455:6;56447:7;:15::i;:::-;56430:32;-1:-1:-1;56475:53:0;56430:32;56510:17;47031:10;56524:3;56510:17;:::i;:::-;56475;:53::i;:::-;-1:-1:-1;;56541:15:0;:22;;-1:-1:-1;;;;56541:22:0;-1:-1:-1;;;56541:22:0;;;-1:-1:-1;55888:689:0:o;30759:185::-;30897:39;30914:4;30920:2;30924:7;30897:39;;;;;;;;;;;;:16;:39::i;54538:186::-;14644:1;15240:7;;:19;;15232:63;;;;-1:-1:-1;;;15232:63:0;;21213:2:1;15232:63:0;;;21195:21:1;21252:2;21232:18;;;21225:30;21291:33;21271:18;;;21264:61;21342:18;;15232:63:0;21011:355:1;15232:63:0;14644:1;15373:7;:18;11786:6;;-1:-1:-1;;;;;11786:6:0;10669:10;11933:23:::1;11925:68;;;;-1:-1:-1::0;;;11925:68:0::1;;;;;;;:::i;:::-;54634:4:::2;54624:7;:14;:33;;;;;54652:5;54642:7;:15;54624:33;54616:62;;;::::0;-1:-1:-1;;;54616:62:0;;17831:2:1;54616:62:0::2;::::0;::::2;17813:21:1::0;17870:2;17850:18;;;17843:30;-1:-1:-1;;;17889:18:1;;;17882:46;17945:18;;54616:62:0::2;17629:340:1::0;54616:62:0::2;54689:27;54699:7;11786:6:::0;;-1:-1:-1;;;;;11786:6:0;;11713:87;54699:7:::2;54708;54689:9;:27::i;:::-;-1:-1:-1::0;14600:1:0;15552:7;:22;54538:186::o;53841:685::-;14644:1;15240:7;;:19;;15232:63;;;;-1:-1:-1;;;15232:63:0;;21213:2:1;15232:63:0;;;21195:21:1;21252:2;21232:18;;;21225:30;21291:33;21271:18;;;21264:61;21342:18;;15232:63:0;21011:355:1;15232:63:0;14644:1;15373:7;:18;53912:9:::1;47031:10;53940:20:::0;::::1;;53932:53;;;::::0;-1:-1:-1;;;53932:53:0;;12797:2:1;53932:53:0::1;::::0;::::1;12779:21:1::0;12836:2;12816:18;;;12809:30;-1:-1:-1;;;12855:18:1;;;12848:50;12915:18;;53932:53:0::1;12595:344:1::0;53932:53:0::1;54017:4;54004:9;;:17;;53996:45;;;::::0;-1:-1:-1;;;53996:45:0;;19346:2:1;53996:45:0::1;::::0;::::1;19328:21:1::0;19385:2;19365:18;;;19358:30;-1:-1:-1;;;19404:18:1;;;19397:46;19460:18;;53996:45:0::1;19144:340:1::0;53996:45:0::1;54052:13;54068:19;47031:10;54068:5:::0;:19:::1;:::i;:::-;54052:35;;54104:9;54100:310;54123:5;54119:1;:9;54100:310;;;54165:4;54153:9;;:16;54150:61;;;54190:5;;54150:61;47031:10;54228:5;:19;54225:64;;;54268:5;;54225:64;54303:34;10669:10:::0;54327:9:::1;;54303;:34::i;:::-;54352:9;:11:::0;;;:9:::1;:11;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;54378:20:0::1;::::0;-1:-1:-1;47031:10:0::1;54378:20:::0;::::1;:::i;:::-;::::0;-1:-1:-1;54130:3:0;::::1;::::0;::::1;:::i;:::-;;;;54100:310;;;-1:-1:-1::0;54425:9:0;;54422:88:::1;;54451:47;10669:10:::0;54477:12:::1;10589:98:::0;54451:47:::1;-1:-1:-1::0;;14600:1:0;15552:7;:22;53841:685::o;41602:233::-;41677:7;41713:30;41500:10;:17;;41412:113;41713:30;41705:5;:38;41697:95;;;;-1:-1:-1;;;41697:95:0;;20454:2:1;41697:95:0;;;20436:21:1;20493:2;20473:18;;;20466:30;20532:34;20512:18;;;20505:62;-1:-1:-1;;;20583:18:1;;;20576:42;20635:19;;41697:95:0;20252:408:1;41697:95:0;41810:10;41821:5;41810:17;;;;;;;;:::i;:::-;;;;;;;;;41803:24;;41602:233;;;:::o;27594:239::-;27666:7;27702:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27702:16:0;27737:19;27729:73;;;;-1:-1:-1;;;27729:73:0;;16286:2:1;27729:73:0;;;16268:21:1;16325:2;16305:18;;;16298:30;16364:34;16344:18;;;16337:62;-1:-1:-1;;;16415:18:1;;;16408:39;16464:19;;27729:73:0;16084:405:1;27324:208:0;27396:7;-1:-1:-1;;;;;27424:19:0;;27416:74;;;;-1:-1:-1;;;27416:74:0;;15875:2:1;27416:74:0;;;15857:21:1;15914:2;15894:18;;;15887:30;15953:34;15933:18;;;15926:62;-1:-1:-1;;;16004:18:1;;;15997:40;16054:19;;27416:74:0;15673:406:1;27416:74:0;-1:-1:-1;;;;;;27508:16:0;;;;;:9;:16;;;;;;;27324:208::o;12364:94::-;11786:6;;-1:-1:-1;;;;;11786:6:0;10669:10;11933:23;11925:68;;;;-1:-1:-1;;;11925:68:0;;;;;;;:::i;:::-;12429:21:::1;12447:1;12429:9;:21::i;:::-;12364:94::o:0;28069:104::-;28125:13;28158:7;28151:14;;;;;:::i;29752:295::-;-1:-1:-1;;;;;29855:24:0;;10669:10;29855:24;;29847:62;;;;-1:-1:-1;;;29847:62:0;;13551:2:1;29847:62:0;;;13533:21:1;13590:2;13570:18;;;13563:30;13629:27;13609:18;;;13602:55;13674:18;;29847:62:0;13349:349:1;29847:62:0;10669:10;29922:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;29922:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;29922:53:0;;;;;;;;;;29991:48;;10363:41:1;;;29922:42:0;;10669:10;29991:48;;10336:18:1;29991:48:0;;;;;;;29752:295;;:::o;31015:328::-;31190:41;10669:10;31223:7;31190:18;:41::i;:::-;31182:103;;;;-1:-1:-1;;;31182:103:0;;;;;;;:::i;:::-;31296:39;31310:4;31316:2;31320:7;31329:5;31296:13;:39::i;:::-;31015:328;;;;:::o;51727:2106::-;51792:13;51818:23;;:::i;:::-;51854;51880:17;51889:7;51880:8;:17::i;:::-;51854:43;;51921:283;;;;;;;;;;;;;;;;;;52061:9;51921:283;;;;;;;;;;;;;;;;;:17;:283::i;:::-;51910:294;;52228:20;52240:7;52228:11;:20::i;:::-;52217:5;52223:1;52217:8;;;:31;;;;52261:53;;;;;;;;;;;;;;;;;:8;;;:53;52338:16;52346:7;52338;:16::i;:::-;52327:8;;;;:27;;;;52367:53;;;;;;;;;;;;;52327:8;52367:53;;;:8;;;:53;52444:22;52458:7;52444:13;:22::i;:::-;52433:8;;;:33;52479:53;;;;;;;;;;;;;;52433:8;52479:53;;;:8;;;:53;52556:24;52572:7;52556:15;:24::i;:::-;52545:8;;;:35;52593:54;;;;;;;;;;;;;;52545:8;52593:54;;;:8;;;:54;52671:19;52682:7;52671:10;:19::i;:::-;52660:8;;;:30;52703:55;;;;;;;;;;;;;;52660:8;52703:55;;;:9;;;:55;52783:16;52791:7;52783;:16::i;:::-;52771:9;;;:28;52812:55;;;;;;;;;;;;;;52771:9;52812:55;;;:9;;;:55;52892:17;52901:7;52892:8;:17::i;:::-;52880:9;;;:29;52922:55;;;;;;;;;;;;;;52880:9;52922:55;;;:9;;;:55;53002:20;53014:7;53002:11;:20::i;:::-;52990:9;;;:32;53035:27;;;;;;;;;;;-1:-1:-1;;;52990:9:0;53035:27;;;;;;;:9;;;:27;;;;53122:8;;53132;;;;53142;;;;53152;;;;53162;;;;53172;;;;53182;;;;53192;;;;53202;;;;53105:106;;-1:-1:-1;;53105:106:0;;53202:8;;53105:106;;:::i;:::-;;;;;;;-1:-1:-1;;53105:106:0;;;;;;;53266:8;;;;53276:9;;;;53287;;;;53298;;;;53309;;;;53320;;;;53331;;;;53342;;;;53105:106;;-1:-1:-1;53241:111:0;;53105:106;;53342:9;53266:8;53241:111;;:::i;:::-;;;;;;;;;;;;;53225:128;;53374:18;53395:321;53459:17;53468:7;53459:8;:17::i;:::-;53678:28;53698:6;53678:13;:28::i;:::-;53422:291;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53395:13;:321::i;:::-;53374:342;;53793:4;53743:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;53743:55:0;;;;;;;;;;51727:2106;-1:-1:-1;;;;;;51727:2106:0:o;12613:192::-;11786:6;;-1:-1:-1;;;;;11786:6:0;10669:10;11933:23;11925:68;;;;-1:-1:-1;;;11925:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12702:22:0;::::1;12694:73;;;::::0;-1:-1:-1;;;12694:73:0;;12033:2:1;12694:73:0::1;::::0;::::1;12015:21:1::0;12072:2;12052:18;;;12045:30;12111:34;12091:18;;;12084:62;-1:-1:-1;;;12162:18:1;;;12155:36;12208:19;;12694:73:0::1;11831:402:1::0;12694:73:0::1;12778:19;12788:8;12778:9;:19::i;:::-;12613:192:::0;:::o;26955:305::-;27057:4;-1:-1:-1;;;;;;27094:40:0;;-1:-1:-1;;;27094:40:0;;:105;;-1:-1:-1;;;;;;;27151:48:0;;-1:-1:-1;;;27151:48:0;27094:105;:158;;;-1:-1:-1;;;;;;;;;;25673:40:0;;;27216:36;25564:157;36835:174;36910:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36910:29:0;-1:-1:-1;;;;;36910:29:0;;;;;;;;:24;;36964:23;36910:24;36964:14;:23::i;:::-;-1:-1:-1;;;;;36955:46:0;;;;;;;;;;;36835:174;;:::o;33147:348::-;33240:4;32942:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32942:16:0;33257:73;;;;-1:-1:-1;;;33257:73:0;;15037:2:1;33257:73:0;;;15019:21:1;15076:2;15056:18;;;15049:30;15115:34;15095:18;;;15088:62;-1:-1:-1;;;15166:18:1;;;15159:42;15218:19;;33257:73:0;14835:408:1;33257:73:0;33341:13;33357:23;33372:7;33357:14;:23::i;:::-;33341:39;;33410:5;-1:-1:-1;;;;;33399:16:0;:7;-1:-1:-1;;;;;33399:16:0;;:51;;;;33443:7;-1:-1:-1;;;;;33419:31:0;:20;33431:7;33419:11;:20::i;:::-;-1:-1:-1;;;;;33419:31:0;;33399:51;:87;;;-1:-1:-1;;;;;;30239:25:0;;;30215:4;30239:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;33454:32;33391:96;33147:348;-1:-1:-1;;;;33147:348:0:o;36139:578::-;36298:4;-1:-1:-1;;;;;36271:31:0;:23;36286:7;36271:14;:23::i;:::-;-1:-1:-1;;;;;36271:31:0;;36263:85;;;;-1:-1:-1;;;36263:85:0;;18176:2:1;36263:85:0;;;18158:21:1;18215:2;18195:18;;;18188:30;18254:34;18234:18;;;18227:62;-1:-1:-1;;;18305:18:1;;;18298:39;18354:19;;36263:85:0;17974:405:1;36263:85:0;-1:-1:-1;;;;;36367:16:0;;36359:65;;;;-1:-1:-1;;;36359:65:0;;13146:2:1;36359:65:0;;;13128:21:1;13185:2;13165:18;;;13158:30;13224:34;13204:18;;;13197:62;-1:-1:-1;;;13275:18:1;;;13268:34;13319:19;;36359:65:0;12944:400:1;36359:65:0;36437:39;36458:4;36464:2;36468:7;36437:20;:39::i;:::-;36541:29;36558:1;36562:7;36541:8;:29::i;:::-;-1:-1:-1;;;;;36583:15:0;;;;;;:9;:15;;;;;:20;;36602:1;;36583:15;:20;;36602:1;;36583:20;:::i;:::-;;;;-1:-1:-1;;;;;;;36614:13:0;;;;;;:9;:13;;;;;:18;;36631:1;;36614:13;:18;;36631:1;;36614:18;:::i;:::-;;;;-1:-1:-1;;36643:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36643:21:0;-1:-1:-1;;;;;36643:21:0;;;;;;;;;36682:27;;36643:16;;36682:27;;;;;;;36139:578;;;:::o;19074:317::-;19189:6;19164:21;:31;;19156:73;;;;-1:-1:-1;;;19156:73:0;;14679:2:1;19156:73:0;;;14661:21:1;14718:2;14698:18;;;14691:30;14757:31;14737:18;;;14730:59;14806:18;;19156:73:0;14477:353:1;19156:73:0;19243:12;19261:9;-1:-1:-1;;;;;19261:14:0;19283:6;19261:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19242:52;;;19313:7;19305:78;;;;-1:-1:-1;;;19305:78:0;;14252:2:1;19305:78:0;;;14234:21:1;14291:2;14271:18;;;14264:30;14330:34;14310:18;;;14303:62;14401:28;14381:18;;;14374:56;14447:19;;19305:78:0;14050:422:1;33837:110:0;33913:26;33923:2;33927:7;33913:26;;;;;;;;;;;;:9;:26::i;12813:173::-;12888:6;;;-1:-1:-1;;;;;12905:17:0;;;-1:-1:-1;;;;;;12905:17:0;;;;;;;12938:40;;12888:6;;;12905:17;12888:6;;12938:40;;12869:16;;12938:40;12858:128;12813:173;:::o;32225:315::-;32382:28;32392:4;32398:2;32402:7;32382:9;:28::i;:::-;32429:48;32452:4;32458:2;32462:7;32471:5;32429:22;:48::i;:::-;32421:111;;;;-1:-1:-1;;;32421:111:0;;;;;;;:::i;50996:352::-;51054:13;51080;51096:60;51136:17;51145:7;51136:8;:17::i;:::-;51110:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;51096:6;:60::i;:::-;51080:76;-1:-1:-1;51169:16:0;51188:25;51204:8;51080:76;51188:25;:::i;:::-;51169:44;;51226:25;51254:29;51274:8;51254:19;:29::i;:::-;51226:57;;51303:35;;;;;;;;;;;;;;-1:-1:-1;;;51303:35:0;;;51326:11;51303:17;:35::i;:::-;51296:42;50996:352;-1:-1:-1;;;;;50996:352:0:o;9729:170::-;9838:13;9865:29;9875:2;9879;9883;9865:29;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;49766:145::-;49827:13;49860:43;49873:7;49860:43;;;;;;;;;;;;;-1:-1:-1;;;49860:43:0;;;49894:8;49860:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:43::i;49923:133::-;49980:13;50013:35;50026:7;50013:35;;;;;;;;;;;;;-1:-1:-1;;;50013:35:0;;;50043:4;50013:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50068:151;50131:13;50164:47;50177:7;50164:47;;;;;;;;;;;;;-1:-1:-1;;;50164:47:0;;;50200:10;50164:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50231:157;50296:13;50329:51;50342:7;50329:51;;;;;;;;;;;;;-1:-1:-1;;;50329:51:0;;;50367:12;50329:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50400:142;50460:13;50493:41;50506:7;50493:41;;;;;;;;;;;;;-1:-1:-1;;;50493:41:0;;;50526:7;50493:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50550:133;50607:13;50640:35;50653:7;50640:35;;;;;;;;;;;;;-1:-1:-1;;;50640:35:0;;;50670:4;50640:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50695:136;50753:13;50786:37;50799:7;50786:37;;;;;;;;;;;;;-1:-1:-1;;;50786:37:0;;;50817:5;50786:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50843:145;50904:13;50937:43;50950:7;50937:43;;;;;;;;;;;;;-1:-1:-1;;;50937:43:0;;;50971:8;50937:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54732:715;54788:13;55001:10;54997:53;;-1:-1:-1;;55028:10:0;;;;;;;;;;;;-1:-1:-1;;;55028:10:0;;;;;54732:715::o;54997:53::-;55075:5;55060:12;55116:78;55123:9;;55116:78;;55149:8;;;;:::i;:::-;;-1:-1:-1;55172:10:0;;-1:-1:-1;55180:2:0;55172:10;;:::i;:::-;;;55116:78;;;55204:19;55236:6;55226:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55226:17:0;;55204:39;;55254:154;55261:10;;55254:154;;55288:11;55298:1;55288:11;;:::i;:::-;;-1:-1:-1;55357:10:0;55365:2;55357:5;:10;:::i;:::-;55344:24;;:2;:24;:::i;:::-;55331:39;;55314:6;55321;55314:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;55314:56:0;;;;;;;;-1:-1:-1;55385:11:0;55394:2;55385:11;;:::i;:::-;;;55254:154;;56931:1607;57029:11;;56989:13;;57055:8;57051:23;;-1:-1:-1;;57065:9:0;;;;;;;;;-1:-1:-1;57065:9:0;;;56931:1607;-1:-1:-1;56931:1607:0:o;57051:23::-;57126:18;57164:1;57153:7;:3;57159:1;57153:7;:::i;:::-;57152:13;;;;:::i;:::-;57147:19;;:1;:19;:::i;:::-;57126:40;-1:-1:-1;57224:19:0;57256:15;57126:40;57269:2;57256:15;:::i;:::-;57246:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57246:26:0;;57224:48;;57285:18;57306:5;;;;;;;;;;;;;;;;;57285:26;;57375:1;57368:5;57364:13;57420:2;57412:6;57408:15;57471:1;57439:777;57494:3;57491:1;57488:10;57439:777;;;57549:1;57592:12;;;;;57586:19;57687:4;57675:2;57671:14;;;;;57653:40;;57647:47;57796:2;57792:14;;;57788:25;;57774:40;;57768:47;57925:1;57921:13;;;57917:24;;57903:39;;57897:46;58045:16;;;;58031:31;;58025:38;57723:1;57719:11;;;57817:4;57764:58;;;57755:68;57848:11;;57893:57;;;57884:67;;;;57976:11;;58021:49;;58012:59;58100:3;58096:13;58129:22;;58199:1;58184:17;;;;57542:9;57439:777;;;57443:44;58248:1;58243:3;58239:11;58269:1;58264:84;;;;58367:1;58362:82;;;;58232:212;;58264:84;-1:-1:-1;;;;;58297:17:0;;58290:43;58264:84;;58362:82;-1:-1:-1;;;;;58395:17:0;;58388:41;58232:212;-1:-1:-1;;;58460:26:0;;;58467:6;56931:1607;-1:-1:-1;;;;56931:1607:0:o;42448:589::-;-1:-1:-1;;;;;42654:18:0;;42650:187;;42689:40;42721:7;43864:10;:17;;43837:24;;;;:15;:24;;;;;:44;;;43892:24;;;;;;;;;;;;43760:164;42689:40;42650:187;;;42759:2;-1:-1:-1;;;;;42751:10:0;:4;-1:-1:-1;;;;;42751:10:0;;42747:90;;42778:47;42811:4;42817:7;42778:32;:47::i;:::-;-1:-1:-1;;;;;42851:16:0;;42847:183;;42884:45;42921:7;42884:36;:45::i;42847:183::-;42957:4;-1:-1:-1;;;;;42951:10:0;:2;-1:-1:-1;;;;;42951:10:0;;42947:83;;42978:40;43006:2;43010:7;42978:27;:40::i;34174:321::-;34304:18;34310:2;34314:7;34304:5;:18::i;:::-;34355:54;34386:1;34390:2;34394:7;34403:5;34355:22;:54::i;:::-;34333:154;;;;-1:-1:-1;;;34333:154:0;;;;;;;:::i;37574:803::-;37729:4;-1:-1:-1;;;;;37750:13:0;;18075:20;18123:8;37746:624;;37786:72;;-1:-1:-1;;;37786:72:0;;-1:-1:-1;;;;;37786:36:0;;;;;:72;;10669:10;;37837:4;;37843:7;;37852:5;;37786:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37786:72:0;;;;;;;;-1:-1:-1;;37786:72:0;;;;;;;;;;;;:::i;:::-;;;37782:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38032:13:0;;38028:272;;38075:60;;-1:-1:-1;;;38075:60:0;;;;;;;:::i;38028:272::-;38250:6;38244:13;38235:6;38231:2;38227:15;38220:38;37782:533;-1:-1:-1;;;;;;37909:55:0;-1:-1:-1;;;37909:55:0;;-1:-1:-1;37902:62:0;;37746:624;-1:-1:-1;38354:4:0;37574:803;;;;;;:::o;49620:138::-;49680:7;49742:5;49725:23;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49725:23:0;;;;;;;;;49715:34;;49725:23;49715:34;;;;;49620:138;-1:-1:-1;;49620:138:0:o;7713:342::-;7772:13;7802:10;7798:58;;-1:-1:-1;;7829:15:0;;;;;;;;;;;;-1:-1:-1;;;7829:15:0;;;;;7713:342::o;7798:58::-;7881:5;7866:12;7926:78;7933:9;;7926:78;;7959:8;;;;:::i;:::-;;;;7991:1;7982:10;;;;;7926:78;;;8021:26;8033:5;8040:6;8021:11;:26::i;9904:139::-;9982:13;10009:29;10019:2;10023;10009:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;10002:36;9904:139;-1:-1:-1;;;9904:139:0:o;8678:850::-;9099:10;;9086;;9073;;9060;;9047;;8829:13;;8874:2;;8907;;8940;;8973;;9006;;8849:16;;9099:10;;9086;;9073;;9047:23;;9060:10;9047:23;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;9036:74;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9036:74:0;-1:-1:-1;9014:96:0;-1:-1:-1;9014:96:0;9115:19;;9172:61;9196:3;:10;9192:1;:14;9172:61;;;9227:3;9231:1;9227:6;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;9227:6:0;9213;9220:3;;;;:::i;:::-;;;9213:11;;;;;;;;:::i;:::-;;;;:20;-1:-1:-1;;;;;9213:20:0;;;;;;;;-1:-1:-1;9208:3:0;;;;:::i;:::-;;;;9172:61;;;;9243:9;9238:61;9262:3;:10;9258:1;:14;9238:61;;;9293:3;9297:1;9293:6;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;9293:6:0;9279;9286:3;;;;:::i;:::-;;;9279:11;;;;;;;;:::i;:::-;;;;:20;-1:-1:-1;;;;;9279:20:0;;;;;;;;-1:-1:-1;9274:3:0;;;;:::i;:::-;;;;9238:61;;;;9309:9;9304:61;9328:3;:10;9324:1;:14;9304:61;;;9359:3;9363:1;9359:6;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;9359:6:0;9345;9352:3;;;;:::i;:::-;;;9345:11;;;;;;;;:::i;:::-;;;;:20;-1:-1:-1;;;;;9345:20:0;;;;;;;;-1:-1:-1;9340:3:0;;;;:::i;:::-;;;;9304:61;;;;9375:9;9370:61;9394:3;:10;9390:1;:14;9370:61;;;9425:3;9429:1;9425:6;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;9425:6:0;9411;9418:3;;;;:::i;:::-;;;9411:11;;;;;;;;:::i;:::-;;;;:20;-1:-1:-1;;;;;9411:20:0;;;;;;;;-1:-1:-1;9406:3:0;;;;:::i;:::-;;;;9370:61;;;;9441:9;9436:61;9460:3;:10;9456:1;:14;9436:61;;;9491:3;9495:1;9491:6;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;9491:6:0;9477;9484:3;;;;:::i;:::-;;;9477:11;;;;;;;;:::i;:::-;;;;:20;-1:-1:-1;;;;;9477:20:0;;;;;;;;-1:-1:-1;9472:3:0;;;;:::i;:::-;;;;9436:61;;;-1:-1:-1;9516:6:0;;8678:850;-1:-1:-1;;;;;;;;;;;;;8678:850:0:o;51356:359::-;51472:13;51514:12;51529:62;51560:9;51571:17;51580:7;51571:8;:17::i;:::-;51543:46;;;;;;;;;:::i;51529:62::-;51514:77;;51620:20;51643:11;51662;:18;51655:4;:25;;;;:::i;:::-;51643:38;;;;;;;;:::i;:::-;;;;;;;51620:61;;51701:6;51694:13;;;;51356:359;;;;;:::o;44551:988::-;44817:22;44867:1;44842:22;44859:4;44842:16;:22::i;:::-;:26;;;;:::i;:::-;44879:18;44900:26;;;:17;:26;;;;;;44817:51;;-1:-1:-1;45033:28:0;;;45029:328;;-1:-1:-1;;;;;45100:18:0;;45078:19;45100:18;;;:12;:18;;;;;;;;:34;;;;;;;;;45151:30;;;;;;:44;;;45268:30;;:17;:30;;;;;:43;;;45029:328;-1:-1:-1;45453:26:0;;;;:17;:26;;;;;;;;45446:33;;;-1:-1:-1;;;;;45497:18:0;;;;;:12;:18;;;;;:34;;;;;;;45490:41;44551:988::o;45834:1079::-;46112:10;:17;46087:22;;46112:21;;46132:1;;46112:21;:::i;:::-;46144:18;46165:24;;;:15;:24;;;;;;46538:10;:26;;46087:46;;-1:-1:-1;46165:24:0;;46087:46;;46538:26;;;;;;:::i;:::-;;;;;;;;;46516:48;;46602:11;46577:10;46588;46577:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;46682:28;;;:15;:28;;;;;;;:41;;;46854:24;;;;;46847:31;46889:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;45905:1008;;;45834:1079;:::o;43338:221::-;43423:14;43440:20;43457:2;43440:16;:20::i;:::-;-1:-1:-1;;;;;43471:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;43516:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;43338:221:0:o;34831:382::-;-1:-1:-1;;;;;34911:16:0;;34903:61;;;;-1:-1:-1;;;34903:61:0;;16696:2:1;34903:61:0;;;16678:21:1;;;16715:18;;;16708:30;16774:34;16754:18;;;16747:62;16826:18;;34903:61:0;16494:356:1;34903:61:0;32918:4;32942:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32942:16:0;:30;34975:58;;;;-1:-1:-1;;;34975:58:0;;12440:2:1;34975:58:0;;;12422:21:1;12479:2;12459:18;;;12452:30;12518;12498:18;;;12491:58;12566:18;;34975:58:0;12238:352:1;34975:58:0;35046:45;35075:1;35079:2;35083:7;35046:20;:45::i;:::-;-1:-1:-1;;;;;35104:13:0;;;;;;:9;:13;;;;;:18;;35121:1;;35104:13;:18;;35121:1;;35104:18;:::i;:::-;;;;-1:-1:-1;;35133:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35133:21:0;-1:-1:-1;;;;;35133:21:0;;;;;;;;35172:33;;35133:16;;;35172:33;;35133:16;;35172:33;34831:382;;:::o;8183:405::-;8258:13;8284:19;8316:10;8320:6;8316:1;:10;:::i;:::-;8306:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8306:21:0;-1:-1:-1;8284:43:0;-1:-1:-1;8345:9:0;8357:10;8361:6;8357:1;:10;:::i;:::-;:14;;8370:1;8357:14;:::i;:::-;8345:26;;8340:139;8377:1;8373;:5;8340:139;;;-1:-1:-1;;;8429:5:0;8437:3;8429:11;8416:25;;;;;;;:::i;:::-;;;;8400:6;8407:5;8411:1;8407;:5;:::i;:::-;8400:13;;;;;;;;:::i;:::-;;;;:41;-1:-1:-1;;;;;8400:41:0;;;;;;;;-1:-1:-1;8466:1:0;8456:11;;;;;8380:3;;;:::i;:::-;;;8340:139;;;-1:-1:-1;8499:10:0;;8491:55;;;;-1:-1:-1;;;8491:55:0;;10841:2:1;8491:55:0;;;10823:21:1;;;10860:18;;;10853:30;10919:34;10899:18;;;10892:62;10971:18;;8491:55:0;10639:356:1;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:1138::-;1076:6;1084;1092;1100;1153:3;1141:9;1132:7;1128:23;1124:33;1121:53;;;1170:1;1167;1160:12;1121:53;1193:29;1212:9;1193:29;:::i;:::-;1183:39;;1241:38;1275:2;1264:9;1260:18;1241:38;:::i;:::-;1231:48;;1326:2;1315:9;1311:18;1298:32;1288:42;;1381:2;1370:9;1366:18;1353:32;1404:18;1445:2;1437:6;1434:14;1431:34;;;1461:1;1458;1451:12;1431:34;1499:6;1488:9;1484:22;1474:32;;1544:7;1537:4;1533:2;1529:13;1525:27;1515:55;;1566:1;1563;1556:12;1515:55;1602:2;1589:16;1624:2;1620;1617:10;1614:36;;;1630:18;;:::i;:::-;1705:2;1699:9;1673:2;1759:13;;-1:-1:-1;;1755:22:1;;;1779:2;1751:31;1747:40;1735:53;;;1803:18;;;1823:22;;;1800:46;1797:72;;;1849:18;;:::i;:::-;1889:10;1885:2;1878:22;1924:2;1916:6;1909:18;1964:7;1959:2;1954;1950;1946:11;1942:20;1939:33;1936:53;;;1985:1;1982;1975:12;1936:53;2041:2;2036;2032;2028:11;2023:2;2015:6;2011:15;1998:46;2086:1;2081:2;2076;2068:6;2064:15;2060:24;2053:35;2107:6;2097:16;;;;;;;981:1138;;;;;;;:::o;2124:347::-;2189:6;2197;2250:2;2238:9;2229:7;2225:23;2221:32;2218:52;;;2266:1;2263;2256:12;2218:52;2289:29;2308:9;2289:29;:::i;:::-;2279:39;;2368:2;2357:9;2353:18;2340:32;2415:5;2408:13;2401:21;2394:5;2391:32;2381:60;;2437:1;2434;2427:12;2381:60;2460:5;2450:15;;;2124:347;;;;;:::o;2476:254::-;2544:6;2552;2605:2;2593:9;2584:7;2580:23;2576:32;2573:52;;;2621:1;2618;2611:12;2573:52;2644:29;2663:9;2644:29;:::i;:::-;2634:39;2720:2;2705:18;;;;2692:32;;-1:-1:-1;;;2476:254:1:o;2735:245::-;2793:6;2846:2;2834:9;2825:7;2821:23;2817:32;2814:52;;;2862:1;2859;2852:12;2814:52;2901:9;2888:23;2920:30;2944:5;2920:30;:::i;2985:249::-;3054:6;3107:2;3095:9;3086:7;3082:23;3078:32;3075:52;;;3123:1;3120;3113:12;3075:52;3155:9;3149:16;3174:30;3198:5;3174:30;:::i;3239:180::-;3298:6;3351:2;3339:9;3330:7;3326:23;3322:32;3319:52;;;3367:1;3364;3357:12;3319:52;-1:-1:-1;3390:23:1;;3239:180;-1:-1:-1;3239:180:1:o;3424:257::-;3465:3;3503:5;3497:12;3530:6;3525:3;3518:19;3546:63;3602:6;3595:4;3590:3;3586:14;3579:4;3572:5;3568:16;3546:63;:::i;:::-;3663:2;3642:15;-1:-1:-1;;3638:29:1;3629:39;;;;3670:4;3625:50;;3424:257;-1:-1:-1;;3424:257:1:o;4445:276::-;4576:3;4614:6;4608:13;4630:53;4676:6;4671:3;4664:4;4656:6;4652:17;4630:53;:::i;:::-;4699:16;;;;;4445:276;-1:-1:-1;;4445:276:1:o;4726:470::-;4905:3;4943:6;4937:13;4959:53;5005:6;5000:3;4993:4;4985:6;4981:17;4959:53;:::i;:::-;5075:13;;5034:16;;;;5097:57;5075:13;5034:16;5131:4;5119:17;;5097:57;:::i;:::-;5170:20;;4726:470;-1:-1:-1;;;;4726:470:1:o;5201:1776::-;5716:3;5754:6;5748:13;5770:53;5816:6;5811:3;5804:4;5796:6;5792:17;5770:53;:::i;:::-;5854:6;5848:13;5870:68;5929:8;5920:6;5915:3;5911:16;5904:4;5896:6;5892:17;5870:68;:::i;:::-;6016:13;;5964:16;;;5960:31;;6038:57;6016:13;5960:31;6072:4;6060:17;;6038:57;:::i;:::-;6162:13;;6117:20;;;6184:57;6162:13;6117:20;6218:4;6206:17;;6184:57;:::i;:::-;6272:6;6266:13;6288:72;6351:8;6340;6333:5;6329:20;6322:4;6314:6;6310:17;6288:72;:::i;:::-;6442:13;;6386:20;;;;6382:35;;6464:57;6442:13;6382:35;6498:4;6486:17;;6464:57;:::i;:::-;6552:6;6546:13;6568:72;6631:8;6620;6613:5;6609:20;6602:4;6594:6;6590:17;6568:72;:::i;:::-;6722:13;;6666:20;;;;6662:35;;6744:57;6722:13;6662:35;6778:4;6766:17;;6744:57;:::i;:::-;6832:6;6826:13;6848:72;6911:8;6900;6893:5;6889:20;6882:4;6874:6;6870:17;6848:72;:::i;:::-;6940:20;;6936:35;;5201:1776;-1:-1:-1;;;;;;;;;;;5201:1776:1:o;6982:1445::-;-1:-1:-1;;;7482:57:1;;7562:13;;7464:3;;7584:62;7562:13;7634:2;7625:12;;7618:4;7606:17;;7584:62;:::i;:::-;7710:66;7705:2;7665:16;;;7697:11;;;7690:87;7806:34;7801:2;7793:11;;7786:55;7870:34;7865:2;7857:11;;7850:55;7935:34;7929:3;7921:12;;7914:56;8000:66;7994:3;7986:12;;7979:88;8097:66;8091:3;8083:12;;8076:88;-1:-1:-1;;;8188:3:1;8180:12;;8173:28;8226:13;;8248:64;8226:13;8297:3;8289:12;;8282:4;8270:17;;8248:64;:::i;:::-;-1:-1:-1;;;8372:3:1;8331:17;;;;8364:12;;;8357:36;8417:3;8409:12;;6982:1445;-1:-1:-1;;;;6982:1445:1:o;8432:448::-;8694:31;8689:3;8682:44;8664:3;8755:6;8749:13;8771:62;8826:6;8821:2;8816:3;8812:12;8805:4;8797:6;8793:17;8771:62;:::i;:::-;8853:16;;;;8871:2;8849:25;;8432:448;-1:-1:-1;;8432:448:1:o;9095:422::-;-1:-1:-1;;;9352:3:1;9345:20;9327:3;9394:6;9388:13;9410:61;9464:6;9460:1;9455:3;9451:11;9444:4;9436:6;9432:17;9410:61;:::i;:::-;9491:16;;;;9509:1;9487:24;;9095:422;-1:-1:-1;;9095:422:1:o;9730:488::-;-1:-1:-1;;;;;9999:15:1;;;9981:34;;10051:15;;10046:2;10031:18;;10024:43;10098:2;10083:18;;10076:34;;;10146:3;10141:2;10126:18;;10119:31;;;9924:4;;10167:45;;10192:19;;10184:6;10167:45;:::i;:::-;10159:53;9730:488;-1:-1:-1;;;;;;9730:488:1:o;10415:219::-;10564:2;10553:9;10546:21;10527:4;10584:44;10624:2;10613:9;10609:18;10601:6;10584:44;:::i;11412:414::-;11614:2;11596:21;;;11653:2;11633:18;;;11626:30;11692:34;11687:2;11672:18;;11665:62;-1:-1:-1;;;11758:2:1;11743:18;;11736:48;11816:3;11801:19;;11412:414::o;17268:356::-;17470:2;17452:21;;;17489:18;;;17482:30;17548:34;17543:2;17528:18;;17521:62;17615:2;17600:18;;17268:356::o;19834:413::-;20036:2;20018:21;;;20075:2;20055:18;;;20048:30;20114:34;20109:2;20094:18;;20087:62;-1:-1:-1;;;20180:2:1;20165:18;;20158:47;20237:3;20222:19;;19834:413::o;21553:128::-;21593:3;21624:1;21620:6;21617:1;21614:13;21611:39;;;21630:18;;:::i;:::-;-1:-1:-1;21666:9:1;;21553:128::o;21686:120::-;21726:1;21752;21742:35;;21757:18;;:::i;:::-;-1:-1:-1;21791:9:1;;21686:120::o;21811:168::-;21851:7;21917:1;21913;21909:6;21905:14;21902:1;21899:21;21894:1;21887:9;21880:17;21876:45;21873:71;;;21924:18;;:::i;:::-;-1:-1:-1;21964:9:1;;21811:168::o;21984:125::-;22024:4;22052:1;22049;22046:8;22043:34;;;22057:18;;:::i;:::-;-1:-1:-1;22094:9:1;;21984:125::o;22114:258::-;22186:1;22196:113;22210:6;22207:1;22204:13;22196:113;;;22286:11;;;22280:18;22267:11;;;22260:39;22232:2;22225:10;22196:113;;;22327:6;22324:1;22321:13;22318:48;;;-1:-1:-1;;22362:1:1;22344:16;;22337:27;22114:258::o;22377:136::-;22416:3;22444:5;22434:39;;22453:18;;:::i;:::-;-1:-1:-1;;;22489:18:1;;22377:136::o;22518:380::-;22597:1;22593:12;;;;22640;;;22661:61;;22715:4;22707:6;22703:17;22693:27;;22661:61;22768:2;22760:6;22757:14;22737:18;22734:38;22731:161;;;22814:10;22809:3;22805:20;22802:1;22795:31;22849:4;22846:1;22839:15;22877:4;22874:1;22867:15;22731:161;;22518:380;;;:::o;22903:135::-;22942:3;-1:-1:-1;;22963:17:1;;22960:43;;;22983:18;;:::i;:::-;-1:-1:-1;23030:1:1;23019:13;;22903:135::o;23043:112::-;23075:1;23101;23091:35;;23106:18;;:::i;:::-;-1:-1:-1;23140:9:1;;23043:112::o;23160:127::-;23221:10;23216:3;23212:20;23209:1;23202:31;23252:4;23249:1;23242:15;23276:4;23273:1;23266:15;23292:127;23353:10;23348:3;23344:20;23341:1;23334:31;23384:4;23381:1;23374:15;23408:4;23405:1;23398:15;23424:127;23485:10;23480:3;23476:20;23473:1;23466:31;23516:4;23513:1;23506:15;23540:4;23537:1;23530:15;23556:127;23617:10;23612:3;23608:20;23605:1;23598:31;23648:4;23645:1;23638:15;23672:4;23669:1;23662:15;23688:127;23749:10;23744:3;23740:20;23737:1;23730:31;23780:4;23777:1;23770:15;23804:4;23801:1;23794:15;23820:131;-1:-1:-1;;;;;;23894:32:1;;23884:43;;23874:71;;23941:1;23938;23931:12
Swarm Source
ipfs://4b3d4282ffecab6efc8b71eb600b281fe1f32fd1521f6c244bc34847e4e775de
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.