More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Battle | 1984812 | 71 days ago | IN | 0 S | 0.00093302 | ||||
Create Battle | 1984807 | 71 days ago | IN | 0 S | 0.00106285 | ||||
Join Battle And ... | 1752277 | 74 days ago | IN | 0 S | 0.00121937 | ||||
Join Battle And ... | 1752234 | 74 days ago | IN | 0 S | 0.00154943 | ||||
Create Battle | 1751605 | 74 days ago | IN | 0 S | 0.00118508 | ||||
Create Battle | 1751594 | 74 days ago | IN | 0 S | 0.00129049 |
Loading...
Loading
Contract Name:
SkyRocketBattle
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-11 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.12; /** * @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; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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 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 String operations. * Enhanced Strings library by SkyRocket * Added concatenation */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev * Added by SkyRocket * Concatenation for string types **/ function append(string memory a, string memory b, string memory c, string memory d, string memory e) internal pure returns (string memory) { return string(abi.encodePacked(a, b, c, d, e)); } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev * Convert address to string **/ function addressToAsciiString(address x) internal pure returns (string memory) { bytes memory s = new bytes(40); for (uint i = 0; i < 20; i++) { bytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i))))); bytes1 hi = bytes1(uint8(b) / 16); bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi)); s[2 * i] = char(hi); s[2 * i + 1] = char(lo); } return string(s); } function char(bytes1 b) internal pure returns (bytes1 c) { if (uint8(b) < 10) return bytes1(uint8(b) + 0x30); else return bytes1(uint8(b) + 0x57); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success,) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } modifier isAdmin() { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Account is not in the admin list"); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } } /** * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } } /** * @dev * Interface to access the SkyRocketNFTFactory **/ abstract contract ISkyRocketNFTFactory { /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external virtual; /** * @dev * Returns the balance of the number of NFTs based on the NFTId **/ function balanceOf(address _owner, uint256 _nftId) external view virtual returns (uint256); /** * @dev * Returns the balance of a list of addresses **/ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view virtual returns (uint256[] memory); /** * @dev * Mint the NFT **/ function mint(address _to, uint256 _nftId, uint256 _quantity, bytes calldata _data) external virtual; /** * @dev * Check if the NFT is mintable **/ function isMintable(uint256 _nftId) external view virtual returns (bool); /** * @dev * Transfer the NFT _from _to **/ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external virtual; /** * @dev * Safe transfer a batch of NFTs _from _to **/ function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external virtual; /** * @dev * Get max supply for token NFT id **/ function maxSupply(uint256 _nftId) external view virtual returns (uint256); /** * @dev Total amount of tokens in with a given NFT id. */ function totalSupply(uint256 _nftId) external view virtual returns (uint256); /** * @dev * Get the Tier based on the NFT Id **/ function getTierByNFTId(uint256 _nftId) external view virtual returns (uint256); /** * @dev * Burn the NFT **/ function burn(address account, uint256 id, uint256 value) external virtual; /** * @dev Get the total owned NFTs by the address **/ function getTotalOwnedNFTs(address _address) external view virtual returns (uint256); /** * @dev Get array of all owned NFTs by the address **/ function getOwnedNFTs(address _address) external view virtual returns (uint256[] memory); /** * @dev Get DNA by NFT Id **/ function getDNAByNFTId(uint256 _nftId) external view virtual returns (uint256); /** * @dev * Get the Tier Name based on the NFT Id **/ function getTierNameByNFTId(uint256 _nftId) public view virtual returns (string memory); /** * @dev Mint the token to the _receiver address, although you can specify a quantity it is suggested to mint only 1 * Only Admins are allowed to mint tokens **/ function mint(address _receiver, bytes calldata _data) external virtual; } contract SkyRocketBattle is ERC1155Holder, AccessControl { using SafeMath for uint256; ISkyRocketNFTFactory public skyRocketNFTFactory; struct Battle { address initiator; address opponent; uint256 initiatorNFTId; uint256 opponentNFTId; address winner; } mapping(uint256 => Battle) public BattleStruct; // Maps NFTId by SkyRocketNFTStruct uint256 public createdBattles = 1; uint256 public totalWonBattles = 0; event UpdateSkyRocketNFTInterface(address admin, ISkyRocketNFTFactory oldSkyRocketNFTFactory, ISkyRocketNFTFactory newSkyRocketNFTFactory); constructor(ISkyRocketNFTFactory _skyRocketNFTFactory) { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); skyRocketNFTFactory = _skyRocketNFTFactory; } // Needed for compiling function supportsInterface(bytes4 _interfaceId) public view virtual override(ERC1155Receiver, AccessControl) returns (bool) { return super.supportsInterface(_interfaceId); } // Getters and Setters /** * @dev Update the ISkyRocketNFTFactory address **/ function setSkyRocketNFTInterface(ISkyRocketNFTFactory _skyRocketNFTFactory) external isAdmin { ISkyRocketNFTFactory _oldSkyRocketNFTFactory = _skyRocketNFTFactory; skyRocketNFTFactory = _skyRocketNFTFactory; emit UpdateSkyRocketNFTInterface(msg.sender, _oldSkyRocketNFTFactory, skyRocketNFTFactory); } /** * @dev Get the Balance of the wallet **/ function getCreatedBattles() public view returns (uint256 _balance) { return createdBattles; } /** * @dev Get total won battles **/ function getTotalWonBattles() public view returns (uint256 _totalWonBattles) { return totalWonBattles; } /** * @dev Get the battle details **/ function getBattleDetails(uint256 _battleId) public view returns (address _initiator, address _opponent, uint256 _initiatorNFTId, uint256 _opponentNFTId, address _winner) { return ( BattleStruct[_battleId].initiator, BattleStruct[_battleId].opponent, BattleStruct[_battleId].initiatorNFTId, BattleStruct[_battleId].opponentNFTId, BattleStruct[_battleId].winner ); } // Checks // BusinessLogic /** * @dev Generate a random number based on the DNA **/ function createRandomNumber(uint256 _dna) public view returns (uint256) { return uint256( keccak256( abi.encodePacked( block.timestamp, block.difficulty, msg.sender, _dna ) ) ) % 16; } /** * @dev Buy the Tier NFT, provide the NFT ID. **/ function createBattle(uint256 _nftId) public { require(skyRocketNFTFactory.balanceOf(msg.sender, _nftId) >= 1, "You do not own this NFT"); BattleStruct[createdBattles] = Battle(msg.sender, address(0), _nftId, 0, address(0)); createdBattles = createdBattles + 1; // Transfer the NFT to the contract skyRocketNFTFactory.safeTransferFrom(msg.sender, address(this), _nftId, 1, ""); } /** * @dev Join the battle, provide the battle ID **/ function joinBattleAndFight(uint256 _battleId, uint256 _opponentNFTId) public { require(BattleStruct[_battleId].opponent == address(0), "Battle already has an opponent"); require(BattleStruct[_battleId].initiator != msg.sender, "You cannot join your own battle"); require(skyRocketNFTFactory.balanceOf(msg.sender, _opponentNFTId) >= 1, "You do not own this NFT"); // Transfer the NFT to the contract skyRocketNFTFactory.safeTransferFrom(msg.sender, address(this), _opponentNFTId, 1, ""); BattleStruct[_battleId].opponent = msg.sender; BattleStruct[_battleId].opponentNFTId = _opponentNFTId; uint256 _initiatorNFTDNA = skyRocketNFTFactory.getDNAByNFTId(BattleStruct[_battleId].initiatorNFTId); uint256 _opponentNFTDNA = skyRocketNFTFactory.getDNAByNFTId(BattleStruct[_battleId].opponentNFTId); uint256 _initiatorRandomNumber = createRandomNumber(_initiatorNFTDNA); uint256 _opponentRandomNumber = createRandomNumber(_opponentNFTDNA); // Fight between random numbers: if (_initiatorRandomNumber > _opponentRandomNumber) { BattleStruct[_battleId].winner = BattleStruct[_battleId].initiator; } else { BattleStruct[_battleId].winner = BattleStruct[_battleId].opponent; } totalWonBattles = totalWonBattles + 1; // Transfer both NFTs back to the winner skyRocketNFTFactory.safeTransferFrom(address(this), BattleStruct[_battleId].winner, BattleStruct[_battleId].opponentNFTId, 1, ""); skyRocketNFTFactory.safeTransferFrom(address(this), BattleStruct[_battleId].winner, BattleStruct[_battleId].initiatorNFTId, 1, ""); } /** * @dev Cancel the battle, provide the battle ID **/ function cancelBattle(uint256 _battleId) public { require(BattleStruct[_battleId].initiator == msg.sender, "You are not the initiator of this battle"); require(BattleStruct[_battleId].winner == address(0), "This battle has already been won"); // Transfer the NFT back to the initiator skyRocketNFTFactory.safeTransferFrom(address(this), BattleStruct[_battleId].initiator, BattleStruct[_battleId].initiatorNFTId, 1, ""); delete BattleStruct[_battleId]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract ISkyRocketNFTFactory","name":"_skyRocketNFTFactory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"contract ISkyRocketNFTFactory","name":"oldSkyRocketNFTFactory","type":"address"},{"indexed":false,"internalType":"contract ISkyRocketNFTFactory","name":"newSkyRocketNFTFactory","type":"address"}],"name":"UpdateSkyRocketNFTInterface","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"BattleStruct","outputs":[{"internalType":"address","name":"initiator","type":"address"},{"internalType":"address","name":"opponent","type":"address"},{"internalType":"uint256","name":"initiatorNFTId","type":"uint256"},{"internalType":"uint256","name":"opponentNFTId","type":"uint256"},{"internalType":"address","name":"winner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_battleId","type":"uint256"}],"name":"cancelBattle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"createBattle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dna","type":"uint256"}],"name":"createRandomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createdBattles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_battleId","type":"uint256"}],"name":"getBattleDetails","outputs":[{"internalType":"address","name":"_initiator","type":"address"},{"internalType":"address","name":"_opponent","type":"address"},{"internalType":"uint256","name":"_initiatorNFTId","type":"uint256"},{"internalType":"uint256","name":"_opponentNFTId","type":"uint256"},{"internalType":"address","name":"_winner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreatedBattles","outputs":[{"internalType":"uint256","name":"_balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalWonBattles","outputs":[{"internalType":"uint256","name":"_totalWonBattles","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_battleId","type":"uint256"},{"internalType":"uint256","name":"_opponentNFTId","type":"uint256"}],"name":"joinBattleAndFight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISkyRocketNFTFactory","name":"_skyRocketNFTFactory","type":"address"}],"name":"setSkyRocketNFTInterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"skyRocketNFTFactory","outputs":[{"internalType":"contract ISkyRocketNFTFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWonBattles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600160035560006004553480156200001b57600080fd5b506040516200302f3803806200302f833981810160405281019062000041919062000295565b620000566000801b336200009e60201b60201c565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620002c7565b620000b08282620000b460201b60201c565b5050565b620000c68282620001a560201b60201c565b620001a157600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001466200020f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000249826200021c565b9050919050565b60006200025d826200023c565b9050919050565b6200026f8162000250565b81146200027b57600080fd5b50565b6000815190506200028f8162000264565b92915050565b600060208284031215620002ae57620002ad62000217565b5b6000620002be848285016200027e565b91505092915050565b612d5880620002d76000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806394d44f12116100b8578063c8e799691161007c578063c8e799691461034c578063d547741f1461036a578063e183913e14610386578063f0e26f80146103ba578063f23a6e61146103ee578063f32ce4371461041e57610137565b806394d44f1214610294578063a217fddf146102b0578063acefd330146102ce578063bc197c81146102fe578063c002a1461461032e57610137565b806336568abe116100ff57806336568abe146101f25780633c65a5761461020e5780634c4c447e1461022a5780636fd84d441461024657806391d148541461026457610137565b806301ffc9a71461013c578063248a9ca31461016c57806326d959401461019c578063276f374d146101b85780632f2ff15d146101d6575b600080fd5b61015660048036038101906101519190611cc4565b61043c565b6040516101639190611d0c565b60405180910390f35b61018660048036038101906101819190611d5d565b61044e565b6040516101939190611d99565b60405180910390f35b6101b660048036038101906101b19190611dea565b61046d565b005b6101c0610c20565b6040516101cd9190611e39565b60405180910390f35b6101f060048036038101906101eb9190611eb2565b610c2a565b005b61020c60048036038101906102079190611eb2565b610c53565b005b61022860048036038101906102239190611f30565b610cd6565b005b610244600480360381019061023f9190611f5d565b610dd0565b005b61024e611097565b60405161025b9190611e39565b60405180910390f35b61027e60048036038101906102799190611eb2565b61109d565b60405161028b9190611d0c565b60405180910390f35b6102ae60048036038101906102a99190611f5d565b611107565b005b6102b86113ff565b6040516102c59190611d99565b60405180910390f35b6102e860048036038101906102e39190611f5d565b611406565b6040516102f59190611e39565b60405180910390f35b61031860048036038101906103139190612198565b61144b565b6040516103259190612276565b60405180910390f35b610336611460565b6040516103439190611e39565b60405180910390f35b61035461146a565b60405161036191906122f0565b60405180910390f35b610384600480360381019061037f9190611eb2565b611490565b005b6103a0600480360381019061039b9190611f5d565b6114b9565b6040516103b195949392919061231a565b60405180910390f35b6103d460048036038101906103cf9190611f5d565b61154f565b6040516103e595949392919061231a565b60405180910390f35b6104086004803603810190610403919061236d565b61163d565b6040516104159190612276565b60405180910390f35b610426611652565b6040516104339190611e39565b60405180910390f35b600061044782611658565b9050919050565b6000806000838152602001908152602001600020600101549050919050565b600073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050990612461565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad906124cd565b60405180910390fd5b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33846040518363ffffffff1660e01b81526004016106139291906124ed565b602060405180830381865afa158015610630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610654919061252b565b1015610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068c906125a4565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a33308460016040518563ffffffff1660e01b81526004016106f79493929190612636565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b50505050336002600084815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060026000848152602001908152602001600020600301819055506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c29a4df60026000868152602001908152602001600020600201546040518263ffffffff1660e01b815260040161080c9190611e39565b602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d919061252b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c29a4df60026000878152602001908152602001600020600301546040518263ffffffff1660e01b81526004016108c29190611e39565b602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610903919061252b565b9050600061091083611406565b9050600061091d83611406565b9050808211156109b7576002600087815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610a43565b6002600087815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001600454610a5291906126bd565b600481905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30600260008a815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008b81526020019081526020016000206003015460016040518563ffffffff1660e01b8152600401610b069493929190612636565b600060405180830381600087803b158015610b2057600080fd5b505af1158015610b34573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30600260008a815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008b81526020019081526020016000206002015460016040518563ffffffff1660e01b8152600401610be69493929190612636565b600060405180830381600087803b158015610c0057600080fd5b505af1158015610c14573d6000803e3d6000fd5b50505050505050505050565b6000600354905090565b610c338261044e565b610c4481610c3f6116d2565b6116da565b610c4e8383611777565b505050565b610c5b6116d2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612785565b60405180910390fd5b610cd28282611857565b5050565b610cea6000801b610ce56116d2565b61109d565b610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d20906127f1565b60405180910390fd5b600081905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f89932538a1996e752650f41d181b0197a9507bb7fdd3d309efca90fee17c3c5d3382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610dc493929190612811565b60405180910390a15050565b3373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b906128ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090612926565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a306002600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206002015460016040518563ffffffff1660e01b8152600401610fc79493929190612636565b600060405180830381600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b5050505060026000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600282016000905560038201600090556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050565b60035481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33846040518363ffffffff1660e01b81526004016111649291906124ed565b602060405180830381865afa158015611181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a5919061252b565b10156111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dd906125a4565b60405180910390fd5b6040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200182815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525060026000600354815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600160035461136291906126bd565b600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a33308460016040518563ffffffff1660e01b81526004016113ca9493929190612636565b600060405180830381600087803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b5050505050565b6000801b81565b600060104244338560405160200161142194939291906129af565b6040516020818303038152906040528051906020012060001c6114449190612a2c565b9050919050565b600063bc197c8160e01b905095945050505050565b6000600454905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114998261044e565b6114aa816114a56116d2565b6116da565b6114b48383611857565b505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b60008060008060006002600087815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600089815260200190815260200160002060020154600260008a815260200190815260200160002060030154600260008b815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450945094509450945091939590929450565b600063f23a6e6160e01b905095945050505050565b60045481565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116cb57506116ca82611938565b5b9050919050565b600033905090565b6116e4828261109d565b611773576117098173ffffffffffffffffffffffffffffffffffffffff1660146119b2565b6117178360001c60206119b2565b604051602001611728929190612b6f565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a9190612be2565b60405180910390fd5b5050565b611781828261109d565b61185357600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117f86116d2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611861828261109d565b1561193457600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506118d96116d2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119ab57506119aa82611bee565b5b9050919050565b6060600060028360026119c59190612c04565b6119cf91906126bd565b67ffffffffffffffff8111156119e8576119e7611fa0565b5b6040519080825280601f01601f191660200182016040528015611a1a5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611a5257611a51612c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611ab657611ab5612c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611af69190612c04565b611b0091906126bd565b90505b6001811115611ba0577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611b4257611b41612c5e565b5b1a60f81b828281518110611b5957611b58612c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611b9990612c8d565b9050611b03565b5060008414611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90612d02565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ca181611c6c565b8114611cac57600080fd5b50565b600081359050611cbe81611c98565b92915050565b600060208284031215611cda57611cd9611c62565b5b6000611ce884828501611caf565b91505092915050565b60008115159050919050565b611d0681611cf1565b82525050565b6000602082019050611d216000830184611cfd565b92915050565b6000819050919050565b611d3a81611d27565b8114611d4557600080fd5b50565b600081359050611d5781611d31565b92915050565b600060208284031215611d7357611d72611c62565b5b6000611d8184828501611d48565b91505092915050565b611d9381611d27565b82525050565b6000602082019050611dae6000830184611d8a565b92915050565b6000819050919050565b611dc781611db4565b8114611dd257600080fd5b50565b600081359050611de481611dbe565b92915050565b60008060408385031215611e0157611e00611c62565b5b6000611e0f85828601611dd5565b9250506020611e2085828601611dd5565b9150509250929050565b611e3381611db4565b82525050565b6000602082019050611e4e6000830184611e2a565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e7f82611e54565b9050919050565b611e8f81611e74565b8114611e9a57600080fd5b50565b600081359050611eac81611e86565b92915050565b60008060408385031215611ec957611ec8611c62565b5b6000611ed785828601611d48565b9250506020611ee885828601611e9d565b9150509250929050565b6000611efd82611e74565b9050919050565b611f0d81611ef2565b8114611f1857600080fd5b50565b600081359050611f2a81611f04565b92915050565b600060208284031215611f4657611f45611c62565b5b6000611f5484828501611f1b565b91505092915050565b600060208284031215611f7357611f72611c62565b5b6000611f8184828501611dd5565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fd882611f8f565b810181811067ffffffffffffffff82111715611ff757611ff6611fa0565b5b80604052505050565b600061200a611c58565b90506120168282611fcf565b919050565b600067ffffffffffffffff82111561203657612035611fa0565b5b602082029050602081019050919050565b600080fd5b600061205f61205a8461201b565b612000565b9050808382526020820190506020840283018581111561208257612081612047565b5b835b818110156120ab57806120978882611dd5565b845260208401935050602081019050612084565b5050509392505050565b600082601f8301126120ca576120c9611f8a565b5b81356120da84826020860161204c565b91505092915050565b600080fd5b600067ffffffffffffffff82111561210357612102611fa0565b5b61210c82611f8f565b9050602081019050919050565b82818337600083830152505050565b600061213b612136846120e8565b612000565b905082815260208101848484011115612157576121566120e3565b5b612162848285612119565b509392505050565b600082601f83011261217f5761217e611f8a565b5b813561218f848260208601612128565b91505092915050565b600080600080600060a086880312156121b4576121b3611c62565b5b60006121c288828901611e9d565b95505060206121d388828901611e9d565b945050604086013567ffffffffffffffff8111156121f4576121f3611c67565b5b612200888289016120b5565b935050606086013567ffffffffffffffff81111561222157612220611c67565b5b61222d888289016120b5565b925050608086013567ffffffffffffffff81111561224e5761224d611c67565b5b61225a8882890161216a565b9150509295509295909350565b61227081611c6c565b82525050565b600060208201905061228b6000830184612267565b92915050565b6000819050919050565b60006122b66122b16122ac84611e54565b612291565b611e54565b9050919050565b60006122c88261229b565b9050919050565b60006122da826122bd565b9050919050565b6122ea816122cf565b82525050565b600060208201905061230560008301846122e1565b92915050565b61231481611e74565b82525050565b600060a08201905061232f600083018861230b565b61233c602083018761230b565b6123496040830186611e2a565b6123566060830185611e2a565b612363608083018461230b565b9695505050505050565b600080600080600060a0868803121561238957612388611c62565b5b600061239788828901611e9d565b95505060206123a888828901611e9d565b94505060406123b988828901611dd5565b93505060606123ca88828901611dd5565b925050608086013567ffffffffffffffff8111156123eb576123ea611c67565b5b6123f78882890161216a565b9150509295509295909350565b600082825260208201905092915050565b7f426174746c6520616c72656164792068617320616e206f70706f6e656e740000600082015250565b600061244b601e83612404565b915061245682612415565b602082019050919050565b6000602082019050818103600083015261247a8161243e565b9050919050565b7f596f752063616e6e6f74206a6f696e20796f7572206f776e20626174746c6500600082015250565b60006124b7601f83612404565b91506124c282612481565b602082019050919050565b600060208201905081810360008301526124e6816124aa565b9050919050565b6000604082019050612502600083018561230b565b61250f6020830184611e2a565b9392505050565b60008151905061252581611dbe565b92915050565b60006020828403121561254157612540611c62565b5b600061254f84828501612516565b91505092915050565b7f596f7520646f206e6f74206f776e2074686973204e4654000000000000000000600082015250565b600061258e601783612404565b915061259982612558565b602082019050919050565b600060208201905081810360008301526125bd81612581565b9050919050565b6000819050919050565b60006125e96125e46125df846125c4565b612291565b611db4565b9050919050565b6125f9816125ce565b82525050565b600082825260208201905092915050565b50565b60006126206000836125ff565b915061262b82612610565b600082019050919050565b600060a08201905061264b600083018761230b565b612658602083018661230b565b6126656040830185611e2a565b61267260608301846125f0565b818103608083015261268381612613565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126c882611db4565b91506126d383611db4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127085761270761268e565b5b828201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061276f602f83612404565b915061277a82612713565b604082019050919050565b6000602082019050818103600083015261279e81612762565b9050919050565b7f4163636f756e74206973206e6f7420696e207468652061646d696e206c697374600082015250565b60006127db602083612404565b91506127e6826127a5565b602082019050919050565b6000602082019050818103600083015261280a816127ce565b9050919050565b6000606082019050612826600083018661230b565b61283360208301856122e1565b61284060408301846122e1565b949350505050565b7f596f7520617265206e6f742074686520696e69746961746f72206f662074686960008201527f7320626174746c65000000000000000000000000000000000000000000000000602082015250565b60006128a4602883612404565b91506128af82612848565b604082019050919050565b600060208201905081810360008301526128d381612897565b9050919050565b7f5468697320626174746c652068617320616c7265616479206265656e20776f6e600082015250565b6000612910602083612404565b915061291b826128da565b602082019050919050565b6000602082019050818103600083015261293f81612903565b9050919050565b6000819050919050565b61296161295c82611db4565b612946565b82525050565b60008160601b9050919050565b600061297f82612967565b9050919050565b600061299182612974565b9050919050565b6129a96129a482611e74565b612986565b82525050565b60006129bb8287612950565b6020820191506129cb8286612950565b6020820191506129db8285612998565b6014820191506129eb8284612950565b60208201915081905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a3782611db4565b9150612a4283611db4565b925082612a5257612a516129fd565b5b828206905092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612a9e601783612a5d565b9150612aa982612a68565b601782019050919050565b600081519050919050565b60005b83811015612add578082015181840152602081019050612ac2565b83811115612aec576000848401525b50505050565b6000612afd82612ab4565b612b078185612a5d565b9350612b17818560208601612abf565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612b59601183612a5d565b9150612b6482612b23565b601182019050919050565b6000612b7a82612a91565b9150612b868285612af2565b9150612b9182612b4c565b9150612b9d8284612af2565b91508190509392505050565b6000612bb482612ab4565b612bbe8185612404565b9350612bce818560208601612abf565b612bd781611f8f565b840191505092915050565b60006020820190508181036000830152612bfc8184612ba9565b905092915050565b6000612c0f82611db4565b9150612c1a83611db4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c5357612c5261268e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612c9882611db4565b915060008203612cab57612caa61268e565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612cec602083612404565b9150612cf782612cb6565b602082019050919050565b60006020820190508181036000830152612d1b81612cdf565b905091905056fea2646970667358221220e445014403c6f85a39636c379bfacdf806743c42e8edcbaa4fa34960a796fa6e64736f6c634300080e003300000000000000000000000008bee8a6884946f63a7b427ac42555c8ce4918f3
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c806394d44f12116100b8578063c8e799691161007c578063c8e799691461034c578063d547741f1461036a578063e183913e14610386578063f0e26f80146103ba578063f23a6e61146103ee578063f32ce4371461041e57610137565b806394d44f1214610294578063a217fddf146102b0578063acefd330146102ce578063bc197c81146102fe578063c002a1461461032e57610137565b806336568abe116100ff57806336568abe146101f25780633c65a5761461020e5780634c4c447e1461022a5780636fd84d441461024657806391d148541461026457610137565b806301ffc9a71461013c578063248a9ca31461016c57806326d959401461019c578063276f374d146101b85780632f2ff15d146101d6575b600080fd5b61015660048036038101906101519190611cc4565b61043c565b6040516101639190611d0c565b60405180910390f35b61018660048036038101906101819190611d5d565b61044e565b6040516101939190611d99565b60405180910390f35b6101b660048036038101906101b19190611dea565b61046d565b005b6101c0610c20565b6040516101cd9190611e39565b60405180910390f35b6101f060048036038101906101eb9190611eb2565b610c2a565b005b61020c60048036038101906102079190611eb2565b610c53565b005b61022860048036038101906102239190611f30565b610cd6565b005b610244600480360381019061023f9190611f5d565b610dd0565b005b61024e611097565b60405161025b9190611e39565b60405180910390f35b61027e60048036038101906102799190611eb2565b61109d565b60405161028b9190611d0c565b60405180910390f35b6102ae60048036038101906102a99190611f5d565b611107565b005b6102b86113ff565b6040516102c59190611d99565b60405180910390f35b6102e860048036038101906102e39190611f5d565b611406565b6040516102f59190611e39565b60405180910390f35b61031860048036038101906103139190612198565b61144b565b6040516103259190612276565b60405180910390f35b610336611460565b6040516103439190611e39565b60405180910390f35b61035461146a565b60405161036191906122f0565b60405180910390f35b610384600480360381019061037f9190611eb2565b611490565b005b6103a0600480360381019061039b9190611f5d565b6114b9565b6040516103b195949392919061231a565b60405180910390f35b6103d460048036038101906103cf9190611f5d565b61154f565b6040516103e595949392919061231a565b60405180910390f35b6104086004803603810190610403919061236d565b61163d565b6040516104159190612276565b60405180910390f35b610426611652565b6040516104339190611e39565b60405180910390f35b600061044782611658565b9050919050565b6000806000838152602001908152602001600020600101549050919050565b600073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050990612461565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad906124cd565b60405180910390fd5b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33846040518363ffffffff1660e01b81526004016106139291906124ed565b602060405180830381865afa158015610630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610654919061252b565b1015610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068c906125a4565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a33308460016040518563ffffffff1660e01b81526004016106f79493929190612636565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b50505050336002600084815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060026000848152602001908152602001600020600301819055506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c29a4df60026000868152602001908152602001600020600201546040518263ffffffff1660e01b815260040161080c9190611e39565b602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d919061252b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c29a4df60026000878152602001908152602001600020600301546040518263ffffffff1660e01b81526004016108c29190611e39565b602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610903919061252b565b9050600061091083611406565b9050600061091d83611406565b9050808211156109b7576002600087815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610a43565b6002600087815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001600454610a5291906126bd565b600481905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30600260008a815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008b81526020019081526020016000206003015460016040518563ffffffff1660e01b8152600401610b069493929190612636565b600060405180830381600087803b158015610b2057600080fd5b505af1158015610b34573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30600260008a815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008b81526020019081526020016000206002015460016040518563ffffffff1660e01b8152600401610be69493929190612636565b600060405180830381600087803b158015610c0057600080fd5b505af1158015610c14573d6000803e3d6000fd5b50505050505050505050565b6000600354905090565b610c338261044e565b610c4481610c3f6116d2565b6116da565b610c4e8383611777565b505050565b610c5b6116d2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612785565b60405180910390fd5b610cd28282611857565b5050565b610cea6000801b610ce56116d2565b61109d565b610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d20906127f1565b60405180910390fd5b600081905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f89932538a1996e752650f41d181b0197a9507bb7fdd3d309efca90fee17c3c5d3382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610dc493929190612811565b60405180910390a15050565b3373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b906128ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090612926565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a306002600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206002015460016040518563ffffffff1660e01b8152600401610fc79493929190612636565b600060405180830381600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b5050505060026000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600282016000905560038201600090556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050565b60035481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33846040518363ffffffff1660e01b81526004016111649291906124ed565b602060405180830381865afa158015611181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a5919061252b565b10156111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dd906125a4565b60405180910390fd5b6040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200182815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525060026000600354815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600160035461136291906126bd565b600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a33308460016040518563ffffffff1660e01b81526004016113ca9493929190612636565b600060405180830381600087803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b5050505050565b6000801b81565b600060104244338560405160200161142194939291906129af565b6040516020818303038152906040528051906020012060001c6114449190612a2c565b9050919050565b600063bc197c8160e01b905095945050505050565b6000600454905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114998261044e565b6114aa816114a56116d2565b6116da565b6114b48383611857565b505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b60008060008060006002600087815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600089815260200190815260200160002060020154600260008a815260200190815260200160002060030154600260008b815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450945094509450945091939590929450565b600063f23a6e6160e01b905095945050505050565b60045481565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116cb57506116ca82611938565b5b9050919050565b600033905090565b6116e4828261109d565b611773576117098173ffffffffffffffffffffffffffffffffffffffff1660146119b2565b6117178360001c60206119b2565b604051602001611728929190612b6f565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a9190612be2565b60405180910390fd5b5050565b611781828261109d565b61185357600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117f86116d2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611861828261109d565b1561193457600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506118d96116d2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119ab57506119aa82611bee565b5b9050919050565b6060600060028360026119c59190612c04565b6119cf91906126bd565b67ffffffffffffffff8111156119e8576119e7611fa0565b5b6040519080825280601f01601f191660200182016040528015611a1a5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611a5257611a51612c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611ab657611ab5612c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611af69190612c04565b611b0091906126bd565b90505b6001811115611ba0577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611b4257611b41612c5e565b5b1a60f81b828281518110611b5957611b58612c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611b9990612c8d565b9050611b03565b5060008414611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90612d02565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ca181611c6c565b8114611cac57600080fd5b50565b600081359050611cbe81611c98565b92915050565b600060208284031215611cda57611cd9611c62565b5b6000611ce884828501611caf565b91505092915050565b60008115159050919050565b611d0681611cf1565b82525050565b6000602082019050611d216000830184611cfd565b92915050565b6000819050919050565b611d3a81611d27565b8114611d4557600080fd5b50565b600081359050611d5781611d31565b92915050565b600060208284031215611d7357611d72611c62565b5b6000611d8184828501611d48565b91505092915050565b611d9381611d27565b82525050565b6000602082019050611dae6000830184611d8a565b92915050565b6000819050919050565b611dc781611db4565b8114611dd257600080fd5b50565b600081359050611de481611dbe565b92915050565b60008060408385031215611e0157611e00611c62565b5b6000611e0f85828601611dd5565b9250506020611e2085828601611dd5565b9150509250929050565b611e3381611db4565b82525050565b6000602082019050611e4e6000830184611e2a565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e7f82611e54565b9050919050565b611e8f81611e74565b8114611e9a57600080fd5b50565b600081359050611eac81611e86565b92915050565b60008060408385031215611ec957611ec8611c62565b5b6000611ed785828601611d48565b9250506020611ee885828601611e9d565b9150509250929050565b6000611efd82611e74565b9050919050565b611f0d81611ef2565b8114611f1857600080fd5b50565b600081359050611f2a81611f04565b92915050565b600060208284031215611f4657611f45611c62565b5b6000611f5484828501611f1b565b91505092915050565b600060208284031215611f7357611f72611c62565b5b6000611f8184828501611dd5565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fd882611f8f565b810181811067ffffffffffffffff82111715611ff757611ff6611fa0565b5b80604052505050565b600061200a611c58565b90506120168282611fcf565b919050565b600067ffffffffffffffff82111561203657612035611fa0565b5b602082029050602081019050919050565b600080fd5b600061205f61205a8461201b565b612000565b9050808382526020820190506020840283018581111561208257612081612047565b5b835b818110156120ab57806120978882611dd5565b845260208401935050602081019050612084565b5050509392505050565b600082601f8301126120ca576120c9611f8a565b5b81356120da84826020860161204c565b91505092915050565b600080fd5b600067ffffffffffffffff82111561210357612102611fa0565b5b61210c82611f8f565b9050602081019050919050565b82818337600083830152505050565b600061213b612136846120e8565b612000565b905082815260208101848484011115612157576121566120e3565b5b612162848285612119565b509392505050565b600082601f83011261217f5761217e611f8a565b5b813561218f848260208601612128565b91505092915050565b600080600080600060a086880312156121b4576121b3611c62565b5b60006121c288828901611e9d565b95505060206121d388828901611e9d565b945050604086013567ffffffffffffffff8111156121f4576121f3611c67565b5b612200888289016120b5565b935050606086013567ffffffffffffffff81111561222157612220611c67565b5b61222d888289016120b5565b925050608086013567ffffffffffffffff81111561224e5761224d611c67565b5b61225a8882890161216a565b9150509295509295909350565b61227081611c6c565b82525050565b600060208201905061228b6000830184612267565b92915050565b6000819050919050565b60006122b66122b16122ac84611e54565b612291565b611e54565b9050919050565b60006122c88261229b565b9050919050565b60006122da826122bd565b9050919050565b6122ea816122cf565b82525050565b600060208201905061230560008301846122e1565b92915050565b61231481611e74565b82525050565b600060a08201905061232f600083018861230b565b61233c602083018761230b565b6123496040830186611e2a565b6123566060830185611e2a565b612363608083018461230b565b9695505050505050565b600080600080600060a0868803121561238957612388611c62565b5b600061239788828901611e9d565b95505060206123a888828901611e9d565b94505060406123b988828901611dd5565b93505060606123ca88828901611dd5565b925050608086013567ffffffffffffffff8111156123eb576123ea611c67565b5b6123f78882890161216a565b9150509295509295909350565b600082825260208201905092915050565b7f426174746c6520616c72656164792068617320616e206f70706f6e656e740000600082015250565b600061244b601e83612404565b915061245682612415565b602082019050919050565b6000602082019050818103600083015261247a8161243e565b9050919050565b7f596f752063616e6e6f74206a6f696e20796f7572206f776e20626174746c6500600082015250565b60006124b7601f83612404565b91506124c282612481565b602082019050919050565b600060208201905081810360008301526124e6816124aa565b9050919050565b6000604082019050612502600083018561230b565b61250f6020830184611e2a565b9392505050565b60008151905061252581611dbe565b92915050565b60006020828403121561254157612540611c62565b5b600061254f84828501612516565b91505092915050565b7f596f7520646f206e6f74206f776e2074686973204e4654000000000000000000600082015250565b600061258e601783612404565b915061259982612558565b602082019050919050565b600060208201905081810360008301526125bd81612581565b9050919050565b6000819050919050565b60006125e96125e46125df846125c4565b612291565b611db4565b9050919050565b6125f9816125ce565b82525050565b600082825260208201905092915050565b50565b60006126206000836125ff565b915061262b82612610565b600082019050919050565b600060a08201905061264b600083018761230b565b612658602083018661230b565b6126656040830185611e2a565b61267260608301846125f0565b818103608083015261268381612613565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126c882611db4565b91506126d383611db4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127085761270761268e565b5b828201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061276f602f83612404565b915061277a82612713565b604082019050919050565b6000602082019050818103600083015261279e81612762565b9050919050565b7f4163636f756e74206973206e6f7420696e207468652061646d696e206c697374600082015250565b60006127db602083612404565b91506127e6826127a5565b602082019050919050565b6000602082019050818103600083015261280a816127ce565b9050919050565b6000606082019050612826600083018661230b565b61283360208301856122e1565b61284060408301846122e1565b949350505050565b7f596f7520617265206e6f742074686520696e69746961746f72206f662074686960008201527f7320626174746c65000000000000000000000000000000000000000000000000602082015250565b60006128a4602883612404565b91506128af82612848565b604082019050919050565b600060208201905081810360008301526128d381612897565b9050919050565b7f5468697320626174746c652068617320616c7265616479206265656e20776f6e600082015250565b6000612910602083612404565b915061291b826128da565b602082019050919050565b6000602082019050818103600083015261293f81612903565b9050919050565b6000819050919050565b61296161295c82611db4565b612946565b82525050565b60008160601b9050919050565b600061297f82612967565b9050919050565b600061299182612974565b9050919050565b6129a96129a482611e74565b612986565b82525050565b60006129bb8287612950565b6020820191506129cb8286612950565b6020820191506129db8285612998565b6014820191506129eb8284612950565b60208201915081905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a3782611db4565b9150612a4283611db4565b925082612a5257612a516129fd565b5b828206905092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612a9e601783612a5d565b9150612aa982612a68565b601782019050919050565b600081519050919050565b60005b83811015612add578082015181840152602081019050612ac2565b83811115612aec576000848401525b50505050565b6000612afd82612ab4565b612b078185612a5d565b9350612b17818560208601612abf565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612b59601183612a5d565b9150612b6482612b23565b601182019050919050565b6000612b7a82612a91565b9150612b868285612af2565b9150612b9182612b4c565b9150612b9d8284612af2565b91508190509392505050565b6000612bb482612ab4565b612bbe8185612404565b9350612bce818560208601612abf565b612bd781611f8f565b840191505092915050565b60006020820190508181036000830152612bfc8184612ba9565b905092915050565b6000612c0f82611db4565b9150612c1a83611db4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c5357612c5261268e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612c9882611db4565b915060008203612cab57612caa61268e565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612cec602083612404565b9150612cf782612cb6565b602082019050919050565b60006020820190508181036000830152612d1b81612cdf565b905091905056fea2646970667358221220e445014403c6f85a39636c379bfacdf806743c42e8edcbaa4fa34960a796fa6e64736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000008bee8a6884946f63a7b427ac42555c8ce4918f3
-----Decoded View---------------
Arg [0] : _skyRocketNFTFactory (address): 0x08bEE8a6884946f63a7b427aC42555C8CE4918f3
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000008bee8a6884946f63a7b427ac42555c8ce4918f3
Deployed Bytecode Sourcemap
35571:5784:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36429:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25914:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39040:1726;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37128:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26299:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27347:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36722:338;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40845:507;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35993:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24827:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38528:435;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22661:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38047:405;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32189:255;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37296:118;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35670:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26691:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35901:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;37475:453;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;31954:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36033:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36429:187;36547:4;36571:37;36595:12;36571:23;:37::i;:::-;36564:44;;36429:187;;;:::o;25914:123::-;25980:7;26007:6;:12;26014:4;26007:12;;;;;;;;;;;:22;;;26000:29;;25914:123;;;:::o;39040:1726::-;39181:1;39137:46;;:12;:23;39150:9;39137:23;;;;;;;;;;;:32;;;;;;;;;;;;:46;;;39129:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;39274:10;39237:47;;:12;:23;39250:9;39237:23;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;39229:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;39400:1;39339:19;;;;;;;;;;;:29;;;39369:10;39381:14;39339:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;39331:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39487:19;;;;;;;;;;;:36;;;39524:10;39544:4;39551:14;39567:1;39487:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39621:10;39586:12;:23;39599:9;39586:23;;;;;;;;;;;:32;;;:45;;;;;;;;;;;;;;;;;;39682:14;39642:12;:23;39655:9;39642:23;;;;;;;;;;;:37;;:54;;;;39709:24;39736:19;;;;;;;;;;;:33;;;39770:12;:23;39783:9;39770:23;;;;;;;;;;;:38;;;39736:73;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39709:100;;39820:23;39846:19;;;;;;;;;;;:33;;;39880:12;:23;39893:9;39880:23;;;;;;;;;;;:37;;;39846:72;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39820:98;;39931:30;39964:36;39983:16;39964:18;:36::i;:::-;39931:69;;40011:29;40043:35;40062:15;40043:18;:35::i;:::-;40011:67;;40162:21;40137:22;:46;40133:243;;;40233:12;:23;40246:9;40233:23;;;;;;;;;;;:33;;;;;;;;;;;;40200:12;:23;40213:9;40200:23;;;;;;;;;;;:30;;;:66;;;;;;;;;;;;;;;;;;40133:243;;;40332:12;:23;40345:9;40332:23;;;;;;;;;;;:32;;;;;;;;;;;;40299:12;:23;40312:9;40299:23;;;;;;;;;;;:30;;;:65;;;;;;;;;;;;;;;;;;40133:243;40424:1;40406:15;;:19;;;;:::i;:::-;40388:15;:37;;;;40488:19;;;;;;;;;;;:36;;;40533:4;40540:12;:23;40553:9;40540:23;;;;;;;;;;;:30;;;;;;;;;;;;40572:12;:23;40585:9;40572:23;;;;;;;;;;;:37;;;40611:1;40488:129;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40628:19;;;;;;;;;;;:36;;;40673:4;40680:12;:23;40693:9;40680:23;;;;;;;;;;;:30;;;;;;;;;;;;40712:12;:23;40725:9;40712:23;;;;;;;;;;;:38;;;40752:1;40628:130;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39118:1648;;;;39040:1726;;:::o;37128:108::-;37178:16;37214:14;;37207:21;;37128:108;:::o;26299:147::-;26382:18;26395:4;26382:12;:18::i;:::-;24265:30;24276:4;24282:12;:10;:12::i;:::-;24265:10;:30::i;:::-;26413:25:::1;26424:4;26430:7;26413:10;:25::i;:::-;26299:147:::0;;;:::o;27347:218::-;27454:12;:10;:12::i;:::-;27443:23;;:7;:23;;;27435:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27531:26;27543:4;27549:7;27531:11;:26::i;:::-;27347:218;;:::o;36722:338::-;24361:41;22706:4;24369:18;;24389:12;:10;:12::i;:::-;24361:7;:41::i;:::-;24353:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;36827:44:::1;36874:20;36827:67;;36929:20;36907:19;;:42;;;;;;;;;;;;;;;;;;36967:85;36995:10;37007:23;37032:19;;;;;;;;;;;36967:85;;;;;;;;:::i;:::-;;;;;;;;36816:244;36722:338:::0;:::o;40845:507::-;40949:10;40912:47;;:12;:23;40925:9;40912:23;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;40904:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;41065:1;41023:44;;:12;:23;41036:9;41023:23;;;;;;;;;;;:30;;;;;;;;;;;;:44;;;41015:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;41168:19;;;;;;;;;;;:36;;;41213:4;41220:12;:23;41233:9;41220:23;;;;;;;;;;;:33;;;;;;;;;;;;41255:12;:23;41268:9;41255:23;;;;;;;;;;;:38;;;41295:1;41168:133;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41321:12;:23;41334:9;41321:23;;;;;;;;;;;;41314:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40845:507;:::o;35993:33::-;;;;:::o;24827:139::-;24905:4;24929:6;:12;24936:4;24929:12;;;;;;;;;;;:20;;:29;24950:7;24929:29;;;;;;;;;;;;;;;;;;;;;;;;;24922:36;;24827:139;;;;:::o;38528:435::-;38645:1;38592:19;;;;;;;;;;;:29;;;38622:10;38634:6;38592:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;38584:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;38718:53;;;;;;;;38725:10;38718:53;;;;;;38745:1;38718:53;;;;;;38749:6;38718:53;;;;38757:1;38718:53;;;;38768:1;38718:53;;;;;38687:12;:28;38700:14;;38687:28;;;;;;;;;;;:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38818:1;38801:14;;:18;;;;:::i;:::-;38784:14;:35;;;;38877:19;;;;;;;;;;;:36;;;38914:10;38934:4;38941:6;38949:1;38877:78;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38528:435;:::o;22661:49::-;22706:4;22661:49;;;:::o;38047:405::-;38110:7;38442:2;38256:15;38298:16;38341:10;38378:4;38213:192;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38181:243;;;;;;38155:284;;:289;;;;:::i;:::-;38135:309;;38047:405;;;:::o;32189:255::-;32374:6;32400:36;;;32393:43;;32189:255;;;;;;;:::o;37296:118::-;37347:24;37391:15;;37384:22;;37296:118;:::o;35670:47::-;;;;;;;;;;;;;:::o;26691:149::-;26775:18;26788:4;26775:12;:18::i;:::-;24265:30;24276:4;24282:12;:10;:12::i;:::-;24265:10;:30::i;:::-;26806:26:::1;26818:4;26824:7;26806:11;:26::i;:::-;26691:149:::0;;;:::o;35901:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37475:453::-;37541:18;37561:17;37580:23;37605:22;37629:15;37679:12;:23;37692:9;37679:23;;;;;;;;;;;:33;;;;;;;;;;;;37727:12;:23;37740:9;37727:23;;;;;;;;;;;:32;;;;;;;;;;;;37774:12;:23;37787:9;37774:23;;;;;;;;;;;:38;;;37827:12;:23;37840:9;37827:23;;;;;;;;;;;:37;;;37879:12;:23;37892:9;37879:23;;;;;;;;;;;:30;;;;;;;;;;;;37657:263;;;;;;;;;;37475:453;;;;;;;:::o;31954:227::-;32116:6;32142:31;;;32135:38;;31954:227;;;;;;;:::o;36033:34::-;;;;:::o;24531:204::-;24616:4;24655:32;24640:47;;;:11;:47;;;;:87;;;;24691:36;24715:11;24691:23;:36::i;:::-;24640:87;24633:94;;24531:204;;;:::o;603:98::-;656:7;683:10;676:17;;603:98;:::o;25256:469::-;25337:22;25345:4;25351:7;25337;:22::i;:::-;25332:386;;25513:41;25541:7;25513:41;;25551:2;25513:19;:41::i;:::-;25619:38;25647:4;25639:13;;25654:2;25619:19;:38::i;:::-;25426:250;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25376:330;;;;;;;;;;;:::i;:::-;;;;;;;;25332:386;25256:469;;:::o;28651:229::-;28726:22;28734:4;28740:7;28726;:22::i;:::-;28721:152;;28797:4;28765:6;:12;28772:4;28765:12;;;;;;;;;;;:20;;:29;28786:7;28765:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;28848:12;:10;:12::i;:::-;28821:40;;28839:7;28821:40;;28833:4;28821:40;;;;;;;;;;28721:152;28651:229;;:::o;28888:230::-;28963:22;28971:4;28977:7;28963;:22::i;:::-;28959:152;;;29034:5;29002:6;:12;29009:4;29002:12;;;;;;;;;;;:20;;:29;29023:7;29002:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;29086:12;:10;:12::i;:::-;29059:40;;29077:7;29059:40;;29071:4;29059:40;;;;;;;;;;28959:152;28888:230;;:::o;31632:223::-;31734:4;31773:34;31758:49;;;:11;:49;;;;:89;;;;31811:36;31835:11;31811:23;:36::i;:::-;31758:89;31751:96;;31632:223;;;:::o;11182:451::-;11257:13;11283:19;11328:1;11319:6;11315:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;11305:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11283:47;;11341:15;:6;11348:1;11341:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;11367;:6;11374:1;11367:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;11398:9;11423:1;11414:6;11410:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;11398:26;;11393:135;11430:1;11426;:5;11393:135;;;11465:12;11486:3;11478:5;:11;11465:25;;;;;;;:::i;:::-;;;;;11453:6;11460:1;11453:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;11515:1;11505:11;;;;;11433:3;;;;:::i;:::-;;;11393:135;;;;11555:1;11546:5;:10;11538:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11618:6;11604:21;;;11182:451;;;;:::o;9119:157::-;9204:4;9243:25;9228:40;;;:11;:40;;;;9221:47;;9119:157;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:122::-;1674:24;1692:5;1674:24;:::i;:::-;1667:5;1664:35;1654:63;;1713:1;1710;1703:12;1654:63;1601:122;:::o;1729:139::-;1775:5;1813:6;1800:20;1791:29;;1829:33;1856:5;1829:33;:::i;:::-;1729:139;;;;:::o;1874:329::-;1933:6;1982:2;1970:9;1961:7;1957:23;1953:32;1950:119;;;1988:79;;:::i;:::-;1950:119;2108:1;2133:53;2178:7;2169:6;2158:9;2154:22;2133:53;:::i;:::-;2123:63;;2079:117;1874:329;;;;:::o;2209:118::-;2296:24;2314:5;2296:24;:::i;:::-;2291:3;2284:37;2209:118;;:::o;2333:222::-;2426:4;2464:2;2453:9;2449:18;2441:26;;2477:71;2545:1;2534:9;2530:17;2521:6;2477:71;:::i;:::-;2333:222;;;;:::o;2561:77::-;2598:7;2627:5;2616:16;;2561:77;;;:::o;2644:122::-;2717:24;2735:5;2717:24;:::i;:::-;2710:5;2707:35;2697:63;;2756:1;2753;2746:12;2697:63;2644:122;:::o;2772:139::-;2818:5;2856:6;2843:20;2834:29;;2872:33;2899:5;2872:33;:::i;:::-;2772:139;;;;:::o;2917:474::-;2985:6;2993;3042:2;3030:9;3021:7;3017:23;3013:32;3010:119;;;3048:79;;:::i;:::-;3010:119;3168:1;3193:53;3238:7;3229:6;3218:9;3214:22;3193:53;:::i;:::-;3183:63;;3139:117;3295:2;3321:53;3366:7;3357:6;3346:9;3342:22;3321:53;:::i;:::-;3311:63;;3266:118;2917:474;;;;;:::o;3397:118::-;3484:24;3502:5;3484:24;:::i;:::-;3479:3;3472:37;3397:118;;:::o;3521:222::-;3614:4;3652:2;3641:9;3637:18;3629:26;;3665:71;3733:1;3722:9;3718:17;3709:6;3665:71;:::i;:::-;3521:222;;;;:::o;3749:126::-;3786:7;3826:42;3819:5;3815:54;3804:65;;3749:126;;;:::o;3881:96::-;3918:7;3947:24;3965:5;3947:24;:::i;:::-;3936:35;;3881:96;;;:::o;3983:122::-;4056:24;4074:5;4056:24;:::i;:::-;4049:5;4046:35;4036:63;;4095:1;4092;4085:12;4036:63;3983:122;:::o;4111:139::-;4157:5;4195:6;4182:20;4173:29;;4211:33;4238:5;4211:33;:::i;:::-;4111:139;;;;:::o;4256:474::-;4324:6;4332;4381:2;4369:9;4360:7;4356:23;4352:32;4349:119;;;4387:79;;:::i;:::-;4349:119;4507:1;4532:53;4577:7;4568:6;4557:9;4553:22;4532:53;:::i;:::-;4522:63;;4478:117;4634:2;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4605:118;4256:474;;;;;:::o;4736:125::-;4802:7;4831:24;4849:5;4831:24;:::i;:::-;4820:35;;4736:125;;;:::o;4867:180::-;4969:53;5016:5;4969:53;:::i;:::-;4962:5;4959:64;4949:92;;5037:1;5034;5027:12;4949:92;4867:180;:::o;5053:197::-;5128:5;5166:6;5153:20;5144:29;;5182:62;5238:5;5182:62;:::i;:::-;5053:197;;;;:::o;5256:387::-;5344:6;5393:2;5381:9;5372:7;5368:23;5364:32;5361:119;;;5399:79;;:::i;:::-;5361:119;5519:1;5544:82;5618:7;5609:6;5598:9;5594:22;5544:82;:::i;:::-;5534:92;;5490:146;5256:387;;;;:::o;5649:329::-;5708:6;5757:2;5745:9;5736:7;5732:23;5728:32;5725:119;;;5763:79;;:::i;:::-;5725:119;5883:1;5908:53;5953:7;5944:6;5933:9;5929:22;5908:53;:::i;:::-;5898:63;;5854:117;5649:329;;;;:::o;5984:117::-;6093:1;6090;6083:12;6107:102;6148:6;6199:2;6195:7;6190:2;6183:5;6179:14;6175:28;6165:38;;6107:102;;;:::o;6215:180::-;6263:77;6260:1;6253:88;6360:4;6357:1;6350:15;6384:4;6381:1;6374:15;6401:281;6484:27;6506:4;6484:27;:::i;:::-;6476:6;6472:40;6614:6;6602:10;6599:22;6578:18;6566:10;6563:34;6560:62;6557:88;;;6625:18;;:::i;:::-;6557:88;6665:10;6661:2;6654:22;6444:238;6401:281;;:::o;6688:129::-;6722:6;6749:20;;:::i;:::-;6739:30;;6778:33;6806:4;6798:6;6778:33;:::i;:::-;6688:129;;;:::o;6823:311::-;6900:4;6990:18;6982:6;6979:30;6976:56;;;7012:18;;:::i;:::-;6976:56;7062:4;7054:6;7050:17;7042:25;;7122:4;7116;7112:15;7104:23;;6823:311;;;:::o;7140:117::-;7249:1;7246;7239:12;7280:710;7376:5;7401:81;7417:64;7474:6;7417:64;:::i;:::-;7401:81;:::i;:::-;7392:90;;7502:5;7531:6;7524:5;7517:21;7565:4;7558:5;7554:16;7547:23;;7618:4;7610:6;7606:17;7598:6;7594:30;7647:3;7639:6;7636:15;7633:122;;;7666:79;;:::i;:::-;7633:122;7781:6;7764:220;7798:6;7793:3;7790:15;7764:220;;;7873:3;7902:37;7935:3;7923:10;7902:37;:::i;:::-;7897:3;7890:50;7969:4;7964:3;7960:14;7953:21;;7840:144;7824:4;7819:3;7815:14;7808:21;;7764:220;;;7768:21;7382:608;;7280:710;;;;;:::o;8013:370::-;8084:5;8133:3;8126:4;8118:6;8114:17;8110:27;8100:122;;8141:79;;:::i;:::-;8100:122;8258:6;8245:20;8283:94;8373:3;8365:6;8358:4;8350:6;8346:17;8283:94;:::i;:::-;8274:103;;8090:293;8013:370;;;;:::o;8389:117::-;8498:1;8495;8488:12;8512:307;8573:4;8663:18;8655:6;8652:30;8649:56;;;8685:18;;:::i;:::-;8649:56;8723:29;8745:6;8723:29;:::i;:::-;8715:37;;8807:4;8801;8797:15;8789:23;;8512:307;;;:::o;8825:154::-;8909:6;8904:3;8899;8886:30;8971:1;8962:6;8957:3;8953:16;8946:27;8825:154;;;:::o;8985:410::-;9062:5;9087:65;9103:48;9144:6;9103:48;:::i;:::-;9087:65;:::i;:::-;9078:74;;9175:6;9168:5;9161:21;9213:4;9206:5;9202:16;9251:3;9242:6;9237:3;9233:16;9230:25;9227:112;;;9258:79;;:::i;:::-;9227:112;9348:41;9382:6;9377:3;9372;9348:41;:::i;:::-;9068:327;8985:410;;;;;:::o;9414:338::-;9469:5;9518:3;9511:4;9503:6;9499:17;9495:27;9485:122;;9526:79;;:::i;:::-;9485:122;9643:6;9630:20;9668:78;9742:3;9734:6;9727:4;9719:6;9715:17;9668:78;:::i;:::-;9659:87;;9475:277;9414:338;;;;:::o;9758:1509::-;9912:6;9920;9928;9936;9944;9993:3;9981:9;9972:7;9968:23;9964:33;9961:120;;;10000:79;;:::i;:::-;9961:120;10120:1;10145:53;10190:7;10181:6;10170:9;10166:22;10145:53;:::i;:::-;10135:63;;10091:117;10247:2;10273:53;10318:7;10309:6;10298:9;10294:22;10273:53;:::i;:::-;10263:63;;10218:118;10403:2;10392:9;10388:18;10375:32;10434:18;10426:6;10423:30;10420:117;;;10456:79;;:::i;:::-;10420:117;10561:78;10631:7;10622:6;10611:9;10607:22;10561:78;:::i;:::-;10551:88;;10346:303;10716:2;10705:9;10701:18;10688:32;10747:18;10739:6;10736:30;10733:117;;;10769:79;;:::i;:::-;10733:117;10874:78;10944:7;10935:6;10924:9;10920:22;10874:78;:::i;:::-;10864:88;;10659:303;11029:3;11018:9;11014:19;11001:33;11061:18;11053:6;11050:30;11047:117;;;11083:79;;:::i;:::-;11047:117;11188:62;11242:7;11233:6;11222:9;11218:22;11188:62;:::i;:::-;11178:72;;10972:288;9758:1509;;;;;;;;:::o;11273:115::-;11358:23;11375:5;11358:23;:::i;:::-;11353:3;11346:36;11273:115;;:::o;11394:218::-;11485:4;11523:2;11512:9;11508:18;11500:26;;11536:69;11602:1;11591:9;11587:17;11578:6;11536:69;:::i;:::-;11394:218;;;;:::o;11618:60::-;11646:3;11667:5;11660:12;;11618:60;;;:::o;11684:142::-;11734:9;11767:53;11785:34;11794:24;11812:5;11794:24;:::i;:::-;11785:34;:::i;:::-;11767:53;:::i;:::-;11754:66;;11684:142;;;:::o;11832:126::-;11882:9;11915:37;11946:5;11915:37;:::i;:::-;11902:50;;11832:126;;;:::o;11964:155::-;12043:9;12076:37;12107:5;12076:37;:::i;:::-;12063:50;;11964:155;;;:::o;12125:189::-;12241:66;12301:5;12241:66;:::i;:::-;12236:3;12229:79;12125:189;;:::o;12320:280::-;12442:4;12480:2;12469:9;12465:18;12457:26;;12493:100;12590:1;12579:9;12575:17;12566:6;12493:100;:::i;:::-;12320:280;;;;:::o;12606:118::-;12693:24;12711:5;12693:24;:::i;:::-;12688:3;12681:37;12606:118;;:::o;12730:664::-;12935:4;12973:3;12962:9;12958:19;12950:27;;12987:71;13055:1;13044:9;13040:17;13031:6;12987:71;:::i;:::-;13068:72;13136:2;13125:9;13121:18;13112:6;13068:72;:::i;:::-;13150;13218:2;13207:9;13203:18;13194:6;13150:72;:::i;:::-;13232;13300:2;13289:9;13285:18;13276:6;13232:72;:::i;:::-;13314:73;13382:3;13371:9;13367:19;13358:6;13314:73;:::i;:::-;12730:664;;;;;;;;:::o;13400:1089::-;13504:6;13512;13520;13528;13536;13585:3;13573:9;13564:7;13560:23;13556:33;13553:120;;;13592:79;;:::i;:::-;13553:120;13712:1;13737:53;13782:7;13773:6;13762:9;13758:22;13737:53;:::i;:::-;13727:63;;13683:117;13839:2;13865:53;13910:7;13901:6;13890:9;13886:22;13865:53;:::i;:::-;13855:63;;13810:118;13967:2;13993:53;14038:7;14029:6;14018:9;14014:22;13993:53;:::i;:::-;13983:63;;13938:118;14095:2;14121:53;14166:7;14157:6;14146:9;14142:22;14121:53;:::i;:::-;14111:63;;14066:118;14251:3;14240:9;14236:19;14223:33;14283:18;14275:6;14272:30;14269:117;;;14305:79;;:::i;:::-;14269:117;14410:62;14464:7;14455:6;14444:9;14440:22;14410:62;:::i;:::-;14400:72;;14194:288;13400:1089;;;;;;;;:::o;14495:169::-;14579:11;14613:6;14608:3;14601:19;14653:4;14648:3;14644:14;14629:29;;14495:169;;;;:::o;14670:180::-;14810:32;14806:1;14798:6;14794:14;14787:56;14670:180;:::o;14856:366::-;14998:3;15019:67;15083:2;15078:3;15019:67;:::i;:::-;15012:74;;15095:93;15184:3;15095:93;:::i;:::-;15213:2;15208:3;15204:12;15197:19;;14856:366;;;:::o;15228:419::-;15394:4;15432:2;15421:9;15417:18;15409:26;;15481:9;15475:4;15471:20;15467:1;15456:9;15452:17;15445:47;15509:131;15635:4;15509:131;:::i;:::-;15501:139;;15228:419;;;:::o;15653:181::-;15793:33;15789:1;15781:6;15777:14;15770:57;15653:181;:::o;15840:366::-;15982:3;16003:67;16067:2;16062:3;16003:67;:::i;:::-;15996:74;;16079:93;16168:3;16079:93;:::i;:::-;16197:2;16192:3;16188:12;16181:19;;15840:366;;;:::o;16212:419::-;16378:4;16416:2;16405:9;16401:18;16393:26;;16465:9;16459:4;16455:20;16451:1;16440:9;16436:17;16429:47;16493:131;16619:4;16493:131;:::i;:::-;16485:139;;16212:419;;;:::o;16637:332::-;16758:4;16796:2;16785:9;16781:18;16773:26;;16809:71;16877:1;16866:9;16862:17;16853:6;16809:71;:::i;:::-;16890:72;16958:2;16947:9;16943:18;16934:6;16890:72;:::i;:::-;16637:332;;;;;:::o;16975:143::-;17032:5;17063:6;17057:13;17048:22;;17079:33;17106:5;17079:33;:::i;:::-;16975:143;;;;:::o;17124:351::-;17194:6;17243:2;17231:9;17222:7;17218:23;17214:32;17211:119;;;17249:79;;:::i;:::-;17211:119;17369:1;17394:64;17450:7;17441:6;17430:9;17426:22;17394:64;:::i;:::-;17384:74;;17340:128;17124:351;;;;:::o;17481:173::-;17621:25;17617:1;17609:6;17605:14;17598:49;17481:173;:::o;17660:366::-;17802:3;17823:67;17887:2;17882:3;17823:67;:::i;:::-;17816:74;;17899:93;17988:3;17899:93;:::i;:::-;18017:2;18012:3;18008:12;18001:19;;17660:366;;;:::o;18032:419::-;18198:4;18236:2;18225:9;18221:18;18213:26;;18285:9;18279:4;18275:20;18271:1;18260:9;18256:17;18249:47;18313:131;18439:4;18313:131;:::i;:::-;18305:139;;18032:419;;;:::o;18457:85::-;18502:7;18531:5;18520:16;;18457:85;;;:::o;18548:158::-;18606:9;18639:61;18657:42;18666:32;18692:5;18666:32;:::i;:::-;18657:42;:::i;:::-;18639:61;:::i;:::-;18626:74;;18548:158;;;:::o;18712:147::-;18807:45;18846:5;18807:45;:::i;:::-;18802:3;18795:58;18712:147;;:::o;18865:168::-;18948:11;18982:6;18977:3;18970:19;19022:4;19017:3;19013:14;18998:29;;18865:168;;;;:::o;19039:114::-;;:::o;19159:362::-;19300:3;19321:65;19384:1;19379:3;19321:65;:::i;:::-;19314:72;;19395:93;19484:3;19395:93;:::i;:::-;19513:1;19508:3;19504:11;19497:18;;19159:362;;;:::o;19527:875::-;19812:4;19850:3;19839:9;19835:19;19827:27;;19864:71;19932:1;19921:9;19917:17;19908:6;19864:71;:::i;:::-;19945:72;20013:2;20002:9;19998:18;19989:6;19945:72;:::i;:::-;20027;20095:2;20084:9;20080:18;20071:6;20027:72;:::i;:::-;20109:80;20185:2;20174:9;20170:18;20161:6;20109:80;:::i;:::-;20237:9;20231:4;20227:20;20221:3;20210:9;20206:19;20199:49;20265:130;20390:4;20265:130;:::i;:::-;20257:138;;19527:875;;;;;;;:::o;20408:180::-;20456:77;20453:1;20446:88;20553:4;20550:1;20543:15;20577:4;20574:1;20567:15;20594:305;20634:3;20653:20;20671:1;20653:20;:::i;:::-;20648:25;;20687:20;20705:1;20687:20;:::i;:::-;20682:25;;20841:1;20773:66;20769:74;20766:1;20763:81;20760:107;;;20847:18;;:::i;:::-;20760:107;20891:1;20888;20884:9;20877:16;;20594:305;;;;:::o;20905:234::-;21045:34;21041:1;21033:6;21029:14;21022:58;21114:17;21109:2;21101:6;21097:15;21090:42;20905:234;:::o;21145:366::-;21287:3;21308:67;21372:2;21367:3;21308:67;:::i;:::-;21301:74;;21384:93;21473:3;21384:93;:::i;:::-;21502:2;21497:3;21493:12;21486:19;;21145:366;;;:::o;21517:419::-;21683:4;21721:2;21710:9;21706:18;21698:26;;21770:9;21764:4;21760:20;21756:1;21745:9;21741:17;21734:47;21798:131;21924:4;21798:131;:::i;:::-;21790:139;;21517:419;;;:::o;21942:182::-;22082:34;22078:1;22070:6;22066:14;22059:58;21942:182;:::o;22130:366::-;22272:3;22293:67;22357:2;22352:3;22293:67;:::i;:::-;22286:74;;22369:93;22458:3;22369:93;:::i;:::-;22487:2;22482:3;22478:12;22471:19;;22130:366;;;:::o;22502:419::-;22668:4;22706:2;22695:9;22691:18;22683:26;;22755:9;22749:4;22745:20;22741:1;22730:9;22726:17;22719:47;22783:131;22909:4;22783:131;:::i;:::-;22775:139;;22502:419;;;:::o;22927:558::-;23134:4;23172:2;23161:9;23157:18;23149:26;;23185:71;23253:1;23242:9;23238:17;23229:6;23185:71;:::i;:::-;23266:101;23363:2;23352:9;23348:18;23339:6;23266:101;:::i;:::-;23377;23474:2;23463:9;23459:18;23450:6;23377:101;:::i;:::-;22927:558;;;;;;:::o;23491:227::-;23631:34;23627:1;23619:6;23615:14;23608:58;23700:10;23695:2;23687:6;23683:15;23676:35;23491:227;:::o;23724:366::-;23866:3;23887:67;23951:2;23946:3;23887:67;:::i;:::-;23880:74;;23963:93;24052:3;23963:93;:::i;:::-;24081:2;24076:3;24072:12;24065:19;;23724:366;;;:::o;24096:419::-;24262:4;24300:2;24289:9;24285:18;24277:26;;24349:9;24343:4;24339:20;24335:1;24324:9;24320:17;24313:47;24377:131;24503:4;24377:131;:::i;:::-;24369:139;;24096:419;;;:::o;24521:182::-;24661:34;24657:1;24649:6;24645:14;24638:58;24521:182;:::o;24709:366::-;24851:3;24872:67;24936:2;24931:3;24872:67;:::i;:::-;24865:74;;24948:93;25037:3;24948:93;:::i;:::-;25066:2;25061:3;25057:12;25050:19;;24709:366;;;:::o;25081:419::-;25247:4;25285:2;25274:9;25270:18;25262:26;;25334:9;25328:4;25324:20;25320:1;25309:9;25305:17;25298:47;25362:131;25488:4;25362:131;:::i;:::-;25354:139;;25081:419;;;:::o;25506:79::-;25545:7;25574:5;25563:16;;25506:79;;;:::o;25591:157::-;25696:45;25716:24;25734:5;25716:24;:::i;:::-;25696:45;:::i;:::-;25691:3;25684:58;25591:157;;:::o;25754:94::-;25787:8;25835:5;25831:2;25827:14;25806:35;;25754:94;;;:::o;25854:::-;25893:7;25922:20;25936:5;25922:20;:::i;:::-;25911:31;;25854:94;;;:::o;25954:100::-;25993:7;26022:26;26042:5;26022:26;:::i;:::-;26011:37;;25954:100;;;:::o;26060:157::-;26165:45;26185:24;26203:5;26185:24;:::i;:::-;26165:45;:::i;:::-;26160:3;26153:58;26060:157;;:::o;26223:679::-;26419:3;26434:75;26505:3;26496:6;26434:75;:::i;:::-;26534:2;26529:3;26525:12;26518:19;;26547:75;26618:3;26609:6;26547:75;:::i;:::-;26647:2;26642:3;26638:12;26631:19;;26660:75;26731:3;26722:6;26660:75;:::i;:::-;26760:2;26755:3;26751:12;26744:19;;26773:75;26844:3;26835:6;26773:75;:::i;:::-;26873:2;26868:3;26864:12;26857:19;;26893:3;26886:10;;26223:679;;;;;;;:::o;26908:180::-;26956:77;26953:1;26946:88;27053:4;27050:1;27043:15;27077:4;27074:1;27067:15;27094:176;27126:1;27143:20;27161:1;27143:20;:::i;:::-;27138:25;;27177:20;27195:1;27177:20;:::i;:::-;27172:25;;27216:1;27206:35;;27221:18;;:::i;:::-;27206:35;27262:1;27259;27255:9;27250:14;;27094:176;;;;:::o;27276:148::-;27378:11;27415:3;27400:18;;27276:148;;;;:::o;27430:173::-;27570:25;27566:1;27558:6;27554:14;27547:49;27430:173;:::o;27609:402::-;27769:3;27790:85;27872:2;27867:3;27790:85;:::i;:::-;27783:92;;27884:93;27973:3;27884:93;:::i;:::-;28002:2;27997:3;27993:12;27986:19;;27609:402;;;:::o;28017:99::-;28069:6;28103:5;28097:12;28087:22;;28017:99;;;:::o;28122:307::-;28190:1;28200:113;28214:6;28211:1;28208:13;28200:113;;;28299:1;28294:3;28290:11;28284:18;28280:1;28275:3;28271:11;28264:39;28236:2;28233:1;28229:10;28224:15;;28200:113;;;28331:6;28328:1;28325:13;28322:101;;;28411:1;28402:6;28397:3;28393:16;28386:27;28322:101;28171:258;28122:307;;;:::o;28435:377::-;28541:3;28569:39;28602:5;28569:39;:::i;:::-;28624:89;28706:6;28701:3;28624:89;:::i;:::-;28617:96;;28722:52;28767:6;28762:3;28755:4;28748:5;28744:16;28722:52;:::i;:::-;28799:6;28794:3;28790:16;28783:23;;28545:267;28435:377;;;;:::o;28818:167::-;28958:19;28954:1;28946:6;28942:14;28935:43;28818:167;:::o;28991:402::-;29151:3;29172:85;29254:2;29249:3;29172:85;:::i;:::-;29165:92;;29266:93;29355:3;29266:93;:::i;:::-;29384:2;29379:3;29375:12;29368:19;;28991:402;;;:::o;29399:967::-;29781:3;29803:148;29947:3;29803:148;:::i;:::-;29796:155;;29968:95;30059:3;30050:6;29968:95;:::i;:::-;29961:102;;30080:148;30224:3;30080:148;:::i;:::-;30073:155;;30245:95;30336:3;30327:6;30245:95;:::i;:::-;30238:102;;30357:3;30350:10;;29399:967;;;;;:::o;30372:364::-;30460:3;30488:39;30521:5;30488:39;:::i;:::-;30543:71;30607:6;30602:3;30543:71;:::i;:::-;30536:78;;30623:52;30668:6;30663:3;30656:4;30649:5;30645:16;30623:52;:::i;:::-;30700:29;30722:6;30700:29;:::i;:::-;30695:3;30691:39;30684:46;;30464:272;30372:364;;;;:::o;30742:313::-;30855:4;30893:2;30882:9;30878:18;30870:26;;30942:9;30936:4;30932:20;30928:1;30917:9;30913:17;30906:47;30970:78;31043:4;31034:6;30970:78;:::i;:::-;30962:86;;30742:313;;;;:::o;31061:348::-;31101:7;31124:20;31142:1;31124:20;:::i;:::-;31119:25;;31158:20;31176:1;31158:20;:::i;:::-;31153:25;;31346:1;31278:66;31274:74;31271:1;31268:81;31263:1;31256:9;31249:17;31245:105;31242:131;;;31353:18;;:::i;:::-;31242:131;31401:1;31398;31394:9;31383:20;;31061:348;;;;:::o;31415:180::-;31463:77;31460:1;31453:88;31560:4;31557:1;31550:15;31584:4;31581:1;31574:15;31601:171;31640:3;31663:24;31681:5;31663:24;:::i;:::-;31654:33;;31709:4;31702:5;31699:15;31696:41;;31717:18;;:::i;:::-;31696:41;31764:1;31757:5;31753:13;31746:20;;31601:171;;;:::o;31778:182::-;31918:34;31914:1;31906:6;31902:14;31895:58;31778:182;:::o;31966:366::-;32108:3;32129:67;32193:2;32188:3;32129:67;:::i;:::-;32122:74;;32205:93;32294:3;32205:93;:::i;:::-;32323:2;32318:3;32314:12;32307:19;;31966:366;;;:::o;32338:419::-;32504:4;32542:2;32531:9;32527:18;32519:26;;32591:9;32585:4;32581:20;32577:1;32566:9;32562:17;32555:47;32619:131;32745:4;32619:131;:::i;:::-;32611:139;;32338:419;;;:::o
Swarm Source
ipfs://e445014403c6f85a39636c379bfacdf806743c42e8edcbaa4fa34960a796fa6e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.