Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 53 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdrawn | 15357880 | 905 days ago | IN | 0 ETH | 0.00027747 | ||||
Free Mint | 15356512 | 906 days ago | IN | 0 ETH | 0.00195595 | ||||
Add To Free Whit... | 15355183 | 906 days ago | IN | 0 ETH | 0.00049921 | ||||
Remove From Free... | 15355181 | 906 days ago | IN | 0 ETH | 0.00024626 | ||||
Post Round Mint | 15354399 | 906 days ago | IN | 0 ETH | 0.00535268 | ||||
Add To Whitelist | 15354346 | 906 days ago | IN | 0 ETH | 0.00213971 | ||||
Add To Whitelist | 15354284 | 906 days ago | IN | 0 ETH | 0.00063882 | ||||
Paid Mint | 15354264 | 906 days ago | IN | 4.5 ETH | 0.00552704 | ||||
Paid Mint | 15354205 | 906 days ago | IN | 1.5 ETH | 0.00283074 | ||||
Paid Mint | 15354201 | 906 days ago | IN | 1.5 ETH | 0.0023503 | ||||
Remove From Whit... | 15354193 | 906 days ago | IN | 0 ETH | 0.00022502 | ||||
Remove From Whit... | 15354180 | 906 days ago | IN | 0 ETH | 0.000283 | ||||
Remove From Whit... | 15354180 | 906 days ago | IN | 0 ETH | 0.000283 | ||||
Remove From Whit... | 15354180 | 906 days ago | IN | 0 ETH | 0.000283 | ||||
Remove From Whit... | 15354175 | 906 days ago | IN | 0 ETH | 0.0002204 | ||||
Remove From Whit... | 15354174 | 906 days ago | IN | 0 ETH | 0.00022093 | ||||
Remove From Whit... | 15354171 | 906 days ago | IN | 0 ETH | 0.00020963 | ||||
Remove From Whit... | 15354168 | 906 days ago | IN | 0 ETH | 0.00018013 | ||||
Remove From Whit... | 15354164 | 906 days ago | IN | 0 ETH | 0.00021936 | ||||
Remove From Whit... | 15354159 | 906 days ago | IN | 0 ETH | 0.00023643 | ||||
Remove From Whit... | 15354157 | 906 days ago | IN | 0 ETH | 0.00022261 | ||||
Remove From Whit... | 15354153 | 906 days ago | IN | 0 ETH | 0.00022222 | ||||
Remove From Whit... | 15354150 | 906 days ago | IN | 0 ETH | 0.00022777 | ||||
Remove From Whit... | 15354146 | 906 days ago | IN | 0 ETH | 0.00026053 | ||||
Remove From Whit... | 15354143 | 906 days ago | IN | 0 ETH | 0.00027385 |
Latest 8 internal transactions
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RoundContract
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "./interfaces/IMaster.sol"; /// @title NFT minter /// @notice The contract allows you to mint new NFT as well as change the parameters of the collection contract RoundContract is AccessControl { using Address for address payable; address public constant OWNER_ADDRESS = 0x4Ec75C4925E14631a4104ABA596a2Ff4Bb3C846a; address public constant WITHDRAW_ADDRESS = 0x0867436a889bf9C1abCAf3c505046FC4F7880b50; // 0x0867436a889bf9C1abCAf3c505046FC4F7880b50 address public constant PROVIDER_WALLET_ADDRESS = 0x706EbB592Ea9D75E7981B7944aA1de28d30D6C14; // 0x706EbB592Ea9D75E7981B7944aA1de28d30D6C14; address public DEV_ADDRESS; bytes32 public constant ROLE_ADDER = keccak256("ROLE_ADDER"); uint256 private constant ORACLE_FEE = 0.004 ether; /// @notice main round information struct RoundInfo { uint256 mintPrice; uint16 collPadding; uint16 maxSupply; uint16 roundSupply; uint256 startTimestamp; uint256 endTimestamp; uint16 maxPurchase; string roundName; } RoundInfo public info; IMaster masterContract; bool public enableWhitelist; bool public enableFreeWhitelist; bool public firstDollarMinted; mapping(address => bool) public whiteList; mapping(address => bool) public whiteListFree; mapping(address => uint) public userPurchasedNum; event AddedToWhitelist(address user); event RemovedFromWhitelist(address user); event AddedToFreeWhitelist(address user); event RemovedFromFreeWhitelist(address user); event Withdrawn(address recipient); modifier inRound() { require(block.timestamp >= info.startTimestamp, "Wait until round starts!"); require(block.timestamp <= info.endTimestamp, "Round already finished!"); _; } modifier mintPossible(uint nTokens) { require(nTokens <= info.maxPurchase, "Round: too many token to mint"); require(userPurchasedNum[msg.sender] + nTokens <= info.maxPurchase, "Round: too many tokens to mint"); require(address(PROVIDER_WALLET_ADDRESS).balance >= ORACLE_FEE, "Round: Provider the wallet has insufficient funds"); _; } constructor( uint256 _mintPrice, uint16 _reserved, uint16 _collPadding, uint16 _maxSupply, uint256 _startTimestamp, uint256 _endTimestamp, uint16 _maxPurchase, string memory _roundName ) { info.mintPrice = _mintPrice; info.collPadding = _collPadding; info.maxSupply = _maxSupply; info.startTimestamp = _startTimestamp; info.endTimestamp = _endTimestamp; info.maxPurchase = _maxPurchase; info.roundName = _roundName; info.roundSupply = (info.maxSupply - info.collPadding) - _reserved; DEV_ADDRESS = msg.sender; enableWhitelist = true; enableFreeWhitelist = true; _grantRole(DEFAULT_ADMIN_ROLE, OWNER_ADDRESS); _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); } /// @notice function for revoke admin role for developers function revokeDevPermissions() external onlyRole(DEFAULT_ADMIN_ROLE) { _revokeRole(DEFAULT_ADMIN_ROLE, DEV_ADDRESS); } /// @notice create role for user who can add to whitelist function createAdder(address _user) external onlyRole(DEFAULT_ADMIN_ROLE) { _grantRole(ROLE_ADDER, _user); } /// @notice mint price of current round function mintPrice() external view returns(uint) { return info.mintPrice; } /// @notice get round total supply of not minted tokens function roundTotalSupply() external view returns(uint) { return info.roundSupply; } /// @notice check current round state /// @return bool function isFreeRoundNow() public view returns(bool) { return block.timestamp >= info.endTimestamp; } /// @notice set master contract for round function setMaster(address _master) external onlyRole(DEFAULT_ADMIN_ROLE) { masterContract = IMaster(_master); } /// @notice user can get master contract address /// @return address of master contract function getMaster() public view returns(address) { return address(masterContract); } /// @notice enable while list /// @param enable - true or false value function toggleWhitelist(bool enable) external onlyRole(DEFAULT_ADMIN_ROLE) { enableWhitelist = enable; } /// @notice enable while list /// @param enable - true or false value function toggleFreeWhitelist(bool enable) external onlyRole(DEFAULT_ADMIN_ROLE) { enableFreeWhitelist = enable; } /// @notice add array of users to whitelist /// @param users - array of target users function addToFreeWhitelist(address[] calldata users) external onlyRole(ROLE_ADDER) { for (uint256 i = 0; i < users.length; i++) { whiteListFree[users[i]] = true; emit AddedToFreeWhitelist(users[i]); } } /// @notice remove user from whitelist /// @param user - target user function removeFromFreeWhitelist(address user) external onlyRole(ROLE_ADDER) { whiteListFree[user] = false; emit RemovedFromWhitelist(user); } /// @notice add array of users to whitelist /// @param users - array of target users function addToWhitelist(address[] calldata users) external onlyRole(ROLE_ADDER) { for (uint256 i = 0; i < users.length; i++) { whiteList[users[i]] = true; emit AddedToWhitelist(users[i]); } } /// @notice remove user from whitelist /// @param user - target user function removeFromWhitelist(address user) external onlyRole(ROLE_ADDER) { whiteList[user] = false; emit RemovedFromWhitelist(user); } /// @notice create psudo-random number to get index /// @param i - nonce /// @param from - salt /// @return uint - new psudo-random value function _random(uint i, address from) private view returns(uint) { uint randomnumber = uint(keccak256(abi.encodePacked(block.timestamp, from, i))) % (info.maxSupply - info.collPadding); randomnumber = randomnumber + info.collPadding; return randomnumber + 1; } /// @notice Use for check the content of the element in the array /// @dev using for generate array of random unique number /// @param array of uints /// @param value target value function _contain(uint[] memory array, uint value) pure private returns(bool) { bool contained = false; for (uint256 i = 0; i < array.length; i++) { if (array[i] == value) { contained = true; break; } } return contained; } /// @notice Withdrawn funds to treasury function withdrawn() external onlyRole(DEFAULT_ADMIN_ROLE) { payable(WITHDRAW_ADDRESS).sendValue(address(this).balance); emit Withdrawn(WITHDRAW_ADDRESS); } function firstDollar() payable public onlyRole(DEFAULT_ADMIN_ROLE) { require(!firstDollarMinted, "Already minted!"); require(msg.value >= info.mintPrice, "NFT round: Not enough funds!"); firstDollarMinted = true; _mintTokens(1); } /// @notice function for call paid mind for users in original white list /// @dev check if user in original(non payable) white list /// @dev check if user's sended funds enough for mint n times /// @param nTokens is number of tokens for mint function paidMint(uint nTokens) public payable mintPossible(nTokens) inRound { require(enableWhitelist, "NFT round: whitelist disabled"); require(whiteList[msg.sender], "NFT round: no sender in white list"); require(msg.value >= info.mintPrice * nTokens, "NFT round: Not enough funds"); _mintTokens(nTokens); } function freeMint(uint nTokens) public payable mintPossible(nTokens) { require(block.timestamp > info.endTimestamp, "NFT round: freemint not yet possible"); require(enableFreeWhitelist, "NFT round: free whitelist disabled"); require(whiteListFree[msg.sender], "NFT round: no sender in white list"); _mintTokens(nTokens); } function postRoundMint(uint nTokens) public payable { require(block.timestamp > info.endTimestamp, "Cannot do it yet"); require(block.timestamp <= info.endTimestamp + 2 hours, "Cannot do it already"); _mintTokens(nTokens); } /// @notice Create random number /// @dev the function accesses an external master contract and asks if the generated id is busy /// @dev max attemps - 250 /// @param nTokens => attempt function _mintTokens(uint nTokens) private { uint[] memory idxs = new uint[](nTokens); uint16 n = 0; uint i = 0; while(_contain(idxs, 0)) { uint idx = _random(i, msg.sender); if (!masterContract.idOccuped(idx) && !_contain(idxs, idx)) { idxs[i] = idx; i++; } else { n++; } if (n == 250) { payable(msg.sender).sendValue(msg.value); revert("NFT: The required number of tokens was not found, try again"); } } payable(PROVIDER_WALLET_ADDRESS).sendValue(ORACLE_FEE); userPurchasedNum[msg.sender] += nTokens; info.roundSupply -= uint16(nTokens); masterContract.mint(idxs, msg.sender, info.roundName); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/AccessControl.sol) pragma solidity ^0.8.0; import "./IAccessControl.sol"; import "../utils/Context.sol"; import "../utils/Strings.sol"; import "../utils/introspection/ERC165.sol"; /** * @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 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); _; } /** * @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 virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @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 virtual { 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 virtual 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. * * May emit a {RoleGranted} event. */ 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. * * May emit a {RoleRevoked} event. */ 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 revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. * * May emit a {RoleRevoked} event. */ 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. * * May emit a {RoleGranted} event. * * [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}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ 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); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.2; interface IMaster { enum Round { Legendary, Epic, SuperRare, Rare, Public } function totalSupply() external view returns(uint); function maxSupply() external view returns(uint); function fulfillMetaDataRequest(string memory json, uint id, uint tokenId) external; function setMetaDataOracleAddress(address newAddress) external; function getRoundPrice(Round round) external view returns(uint); function showMetaData(uint tokenId) external view returns(string memory); function mint(uint[] memory tokenIdxs, address from, string memory name) external; function idOccuped(uint tokenId) external view returns(bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @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 {AccessControl-_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 Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @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) external; /** * @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) external; /** * @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) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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 Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"},{"internalType":"uint16","name":"_reserved","type":"uint16"},{"internalType":"uint16","name":"_collPadding","type":"uint16"},{"internalType":"uint16","name":"_maxSupply","type":"uint16"},{"internalType":"uint256","name":"_startTimestamp","type":"uint256"},{"internalType":"uint256","name":"_endTimestamp","type":"uint256"},{"internalType":"uint16","name":"_maxPurchase","type":"uint16"},{"internalType":"string","name":"_roundName","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"AddedToFreeWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"AddedToWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"RemovedFromFreeWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"RemovedFromWhitelist","type":"event"},{"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":"recipient","type":"address"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVIDER_WALLET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROLE_ADDER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"addToFreeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"createAdder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableFreeWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstDollar","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"firstDollarMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nTokens","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getMaster","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":[],"name":"info","outputs":[{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint16","name":"collPadding","type":"uint16"},{"internalType":"uint16","name":"maxSupply","type":"uint16"},{"internalType":"uint16","name":"roundSupply","type":"uint16"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"internalType":"uint16","name":"maxPurchase","type":"uint16"},{"internalType":"string","name":"roundName","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFreeRoundNow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nTokens","type":"uint256"}],"name":"paidMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nTokens","type":"uint256"}],"name":"postRoundMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeFromFreeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeFromWhitelist","outputs":[],"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":[],"name":"revokeDevPermissions","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":[],"name":"roundTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_master","type":"address"}],"name":"setMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleFreeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userPurchasedNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawn","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620040f4380380620040f48339818101604052810190620000379190620004b2565b8760026000018190555085600260010160006101000a81548161ffff021916908361ffff16021790555084600260010160026101000a81548161ffff021916908361ffff1602179055508360028001819055508260026003018190555081600260040160006101000a81548161ffff021916908361ffff1602179055508060026005019080519060200190620000cf92919062000356565b5086600260010160009054906101000a900461ffff16600260010160029054906101000a900461ffff16620001059190620005f9565b620001119190620005f9565b600260010160046101000a81548161ffff021916908361ffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff021916908315150217905550620001d06000801b734ec75c4925e14631a4104aba596a2ff4bb3c846a620001f360201b60201c565b620001e56000801b33620001f360201b60201c565b5050505050505050620007d4565b620002058282620002e460201b60201c565b620002e057600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002856200034e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b828054620003649062000682565b90600052602060002090601f016020900481019282620003885760008555620003d4565b82601f10620003a357805160ff1916838001178555620003d4565b82800160010185558215620003d4579182015b82811115620003d3578251825591602001919060010190620003b6565b5b509050620003e39190620003e7565b5090565b5b8082111562000402576000816000905550600101620003e8565b5090565b60006200041d6200041784620005c3565b6200059a565b9050828152602081018484840111156200043c576200043b62000780565b5b620004498482856200064c565b509392505050565b600082601f8301126200046957620004686200077b565b5b81516200047b84826020860162000406565b91505092915050565b6000815190506200049581620007a0565b92915050565b600081519050620004ac81620007ba565b92915050565b600080600080600080600080610100898b031215620004d657620004d56200078a565b5b6000620004e68b828c016200049b565b9850506020620004f98b828c0162000484565b97505060406200050c8b828c0162000484565b96505060606200051f8b828c0162000484565b9550506080620005328b828c016200049b565b94505060a0620005458b828c016200049b565b93505060c0620005588b828c0162000484565b92505060e089015167ffffffffffffffff8111156200057c576200057b62000785565b5b6200058a8b828c0162000451565b9150509295985092959890939650565b6000620005a6620005b9565b9050620005b48282620006b8565b919050565b6000604051905090565b600067ffffffffffffffff821115620005e157620005e06200074c565b5b620005ec826200078f565b9050602081019050919050565b6000620006068262000634565b9150620006138362000634565b925082821015620006295762000628620006ee565b5b828203905092915050565b600061ffff82169050919050565b6000819050919050565b60005b838110156200066c5780820151818401526020810190506200064f565b838111156200067c576000848401525b50505050565b600060028204905060018216806200069b57607f821691505b60208210811415620006b257620006b16200071d565b5b50919050565b620006c3826200078f565b810181811067ffffffffffffffff82111715620006e557620006e46200074c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620007ab8162000634565b8114620007b757600080fd5b50565b620007c58162000642565b8114620007d157600080fd5b50565b61391080620007e46000396000f3fe60806040526004361061021a5760003560e01c80637c928fe9116101235780639877ff25116100ab578063cd0d68921161006f578063cd0d68921461077e578063cdfb2b4e146107a9578063d11a9219146107d4578063d547741f146107fd578063dc34b7a0146108265761021a565b80639877ff25146106ab578063a217fddf146106e8578063aa9a9c2d14610713578063ad85a6191461073e578063c80ec522146107675761021a565b806388241af0116100f257806388241af0146105b45780638ab1d681146105dd5780638c478bb4146106065780638fb1ca841461063157806391d148541461066e5761021a565b80637c928fe91461051b5780637f6497831461053757806380e3f1ad1461056057806383e57aff146105895761021a565b8063372c12b1116101a65780635a99719e116101755780635a99719e146104745780636443e7671461049f57806365cde733146104ca5780636817c76c146104e65780637674537d146105115761021a565b8063372c12b1146103c55780633a2eb5771461040257806351a9914a1461041e5780635639e8cf146104495761021a565b806326fae0d3116101ed57806326fae0d3146102ef5780632f2ff15d146103185780632f374e921461034157806336568abe1461036a578063370158ea146103935761021a565b806301ffc9a71461021f57806306c18a311461025c578063122e04a814610287578063248a9ca3146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612601565b61083d565b6040516102539190612c31565b60405180910390f35b34801561026857600080fd5b506102716108b7565b60405161027e9190612bd1565b60405180910390f35b34801561029357600080fd5b5061029c6108cf565b6040516102a99190612bd1565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190612594565b6108e7565b6040516102e69190612c4c565b60405180910390f35b3480156102fb57600080fd5b50610316600480360381019061031191906124c0565b610906565b005b34801561032457600080fd5b5061033f600480360381019061033a91906125c1565b610958565b005b34801561034d57600080fd5b50610368600480360381019061036391906124c0565b610979565b005b34801561037657600080fd5b50610391600480360381019061038c91906125c1565b610a36565b005b34801561039f57600080fd5b506103a8610ab9565b6040516103bc989796959493929190612f04565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e791906124c0565b610baf565b6040516103f99190612c31565b60405180910390f35b61041c6004803603810190610417919061262e565b610bcf565b005b34801561042a57600080fd5b50610433610c77565b6040516104409190612bd1565b60405180910390f35b34801561045557600080fd5b5061045e610c8f565b60405161046b9190612bd1565b60405180910390f35b34801561048057600080fd5b50610489610cb5565b6040516104969190612bd1565b60405180910390f35b3480156104ab57600080fd5b506104b4610cdf565b6040516104c19190612c31565b60405180910390f35b6104e460048036038101906104df919061262e565b610cf2565b005b3480156104f257600080fd5b506104fb611030565b6040516105089190612ee9565b60405180910390f35b61051961103d565b005b6105356004803603810190610530919061262e565b61110a565b005b34801561054357600080fd5b5061055e600480360381019061055991906124ed565b6113ad565b005b34801561056c57600080fd5b506105876004803603810190610582919061253a565b6114db565b005b34801561059557600080fd5b5061059e611506565b6040516105ab9190612c31565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061253a565b611516565b005b3480156105e957600080fd5b5061060460048036038101906105ff91906124c0565b611541565b005b34801561061257600080fd5b5061061b6115fe565b6040516106289190612c31565b60405180910390f35b34801561063d57600080fd5b50610658600480360381019061065391906124c0565b611611565b6040516106659190612ee9565b60405180910390f35b34801561067a57600080fd5b50610695600480360381019061069091906125c1565b611629565b6040516106a29190612c31565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd91906124c0565b611693565b6040516106df9190612c31565b60405180910390f35b3480156106f457600080fd5b506106fd6116b3565b60405161070a9190612c4c565b60405180910390f35b34801561071f57600080fd5b506107286116ba565b6040516107359190612ee9565b60405180910390f35b34801561074a57600080fd5b50610765600480360381019061076091906124c0565b6116d9565b005b34801561077357600080fd5b5061077c611714565b005b34801561078a57600080fd5b506107936117ac565b6040516107a09190612c4c565b60405180910390f35b3480156107b557600080fd5b506107be6117d0565b6040516107cb9190612c31565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f691906124ed565b6117e3565b005b34801561080957600080fd5b50610824600480360381019061081f91906125c1565b611911565b005b34801561083257600080fd5b5061083b611932565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b057506108af82611971565b5b9050919050565b734ec75c4925e14631a4104aba596a2ff4bb3c846a81565b730867436a889bf9c1abcaf3c505046fc4f7880b5081565b6000806000838152602001908152602001600020600101549050919050565b6000801b610913816119db565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610961826108e7565b61096a816119db565b61097483836119ef565b505050565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f53256109a3816119db565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75782604051610a2a9190612bd1565b60405180910390a15050565b610a3e611acf565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612ec9565b60405180910390fd5b610ab58282611ad7565b5050565b60028060000154908060010160009054906101000a900461ffff16908060010160029054906101000a900461ffff16908060010160049054906101000a900461ffff16908060020154908060030154908060040160009054906101000a900461ffff1690806005018054610b2c906131d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b58906131d6565b8015610ba55780601f10610b7a57610100808354040283529160200191610ba5565b820191906000526020600020905b815481529060010190602001808311610b8857829003601f168201915b5050505050905088565b60096020528060005260406000206000915054906101000a900460ff1681565b6002600301544211610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90612de9565b60405180910390fd5b611c20600260030154610c299190613009565b421115610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290612d89565b60405180910390fd5b610c7481611bb8565b50565b73706ebb592ea9d75e7981b7944aa1de28d30d6c1481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860169054906101000a900460ff1681565b80600260040160009054906101000a900461ffff1661ffff16811115610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490612da9565b60405180910390fd5b600260040160009054906101000a900461ffff1661ffff1681600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610db09190613009565b1115610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de890612cc9565b60405180910390fd5b660e35fa931a000073706ebb592ea9d75e7981b7944aa1de28d30d6c1473ffffffffffffffffffffffffffffffffffffffff16311015610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90612e69565b60405180910390fd5b6002800154421015610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490612ca9565b60405180910390fd5b600260030154421115610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec90612d49565b60405180910390fd5b600860149054906101000a900460ff16610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90612e29565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790612e09565b60405180910390fd5b81600260000154610fe1919061305f565b341015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90612d69565b60405180910390fd5b61102c82611bb8565b5050565b6000600260000154905090565b6000801b61104a816119db565b600860169054906101000a900460ff161561109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190612ea9565b60405180910390fd5b6002600001543410156110e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d990612ce9565b60405180910390fd5b6001600860166101000a81548160ff0219169083151502179055506111076001611bb8565b50565b80600260040160009054906101000a900461ffff1661ffff16811115611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90612da9565b60405180910390fd5b600260040160009054906101000a900461ffff1661ffff1681600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c89190613009565b1115611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090612cc9565b60405180910390fd5b660e35fa931a000073706ebb592ea9d75e7981b7944aa1de28d30d6c1473ffffffffffffffffffffffffffffffffffffffff1631101561127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127590612e69565b60405180910390fd5b60026003015442116112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90612e89565b60405180910390fd5b600860159054906101000a900460ff16611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90612e49565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139790612e09565b60405180910390fd5b6113a982611bb8565b5050565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f53256113d7816119db565b60005b838390508110156114d5576001600960008686858181106113fe576113fd613368565b5b905060200201602081019061141391906124c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab0384848381811061149857611497613368565b5b90506020020160208101906114ad91906124c0565b6040516114ba9190612bd1565b60405180910390a180806114cd90613233565b9150506113da565b50505050565b6000801b6114e8816119db565b81600860146101000a81548160ff0219169083151502179055505050565b6000600260030154421015905090565b6000801b611523816119db565b81600860156101000a81548160ff0219169083151502179055505050565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f532561156b816119db565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df757826040516115f29190612bd1565b60405180910390a15050565b600860159054906101000a900460ff1681565b600b6020528060005260406000206000915090505481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000801b81565b6000600260010160049054906101000a900461ffff1661ffff16905090565b6000801b6116e6816119db565b6117107f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f5325836119ef565b5050565b6000801b611721816119db565b61175e47730867436a889bf9c1abcaf3c505046fc4f7880b5073ffffffffffffffffffffffffffffffffffffffff16611f1590919063ffffffff16565b7ff45a04d08a70caa7eb4b747571305559ad9fdf4a093afd41506b35c8a306fa94730867436a889bf9c1abcaf3c505046fc4f7880b506040516117a19190612bd1565b60405180910390a150565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f532581565b600860149054906101000a900460ff1681565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f532561180d816119db565b60005b8383905081101561190b576001600a600086868581811061183457611833613368565b5b905060200201602081019061184991906124c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff44df912747aab146b1d324f45e1e23f21700ada01acf1b2225a66b18370cb938484838181106118ce576118cd613368565b5b90506020020160208101906118e391906124c0565b6040516118f09190612bd1565b60405180910390a1808061190390613233565b915050611810565b50505050565b61191a826108e7565b611923816119db565b61192d8383611ad7565b505050565b6000801b61193f816119db565b61196e6000801b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ad7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6119ec816119e7611acf565b612009565b50565b6119f98282611629565b611acb57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611a70611acf565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b611ae18282611629565b15611bb457600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b59611acf565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008167ffffffffffffffff811115611bd457611bd3613397565b5b604051908082528060200260200182016040528015611c025781602001602082028036833780820191505090505b5090506000805b611c148360006120a6565b15611da4576000611c258233612102565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166349b0b1d0826040518263ffffffff1660e01b8152600401611c829190612ee9565b60206040518083038186803b158015611c9a57600080fd5b505afa158015611cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd29190612567565b158015611ce65750611ce484826120a6565b155b15611d1e5780848381518110611cff57611cfe613368565b5b6020026020010181815250508180611d1690613233565b925050611d2d565b8280611d2990613208565b9350505b60fa8361ffff161415611d9e57611d63343373ffffffffffffffffffffffffffffffffffffffff16611f1590919063ffffffff16565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590612dc9565b60405180910390fd5b50611c09565b611de8660e35fa931a000073706ebb592ea9d75e7981b7944aa1de28d30d6c1473ffffffffffffffffffffffffffffffffffffffff16611f1590919063ffffffff16565b83600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e379190613009565b9250508190555083600260010160048282829054906101000a900461ffff16611e6091906130b9565b92506101000a81548161ffff021916908361ffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afbc2c6b843360026005016040518463ffffffff1660e01b8152600401611edd93929190612bec565b600060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b5050505050505050565b80471015611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90612d29565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611f7e90612b45565b60006040518083038185875af1925050503d8060008114611fbb576040519150601f19603f3d011682016040523d82523d6000602084013e611fc0565b606091505b5050905080612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90612d09565b60405180910390fd5b505050565b6120138282611629565b6120a2576120388173ffffffffffffffffffffffffffffffffffffffff1660146121b0565b6120468360001c60206121b0565b604051602001612057929190612b5a565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120999190612c67565b60405180910390fd5b5050565b6000806000905060005b84518110156120f757838582815181106120cd576120cc613368565b5b602002602001015114156120e457600191506120f7565b80806120ef90613233565b9150506120b0565b508091505092915050565b600080600260010160009054906101000a900461ffff16600260010160029054906101000a900461ffff1661213791906130b9565b61ffff1642848660405160200161215093929190612b94565b6040516020818303038152906040528051906020012060001c61217391906132aa565b9050600260010160009054906101000a900461ffff1661ffff16816121989190613009565b90506001816121a79190613009565b91505092915050565b6060600060028360026121c3919061305f565b6121cd9190613009565b67ffffffffffffffff8111156121e6576121e5613397565b5b6040519080825280601f01601f1916602001820160405280156122185781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106122505761224f613368565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106122b4576122b3613368565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026122f4919061305f565b6122fe9190613009565b90505b600181111561239e577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106123405761233f613368565b5b1a60f81b82828151811061235757612356613368565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612397906131ac565b9050612301565b50600084146123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990612c89565b60405180910390fd5b8091505092915050565b6000813590506123fb81613867565b92915050565b60008083601f840112612417576124166133cb565b5b8235905067ffffffffffffffff811115612434576124336133c6565b5b6020830191508360208202830111156124505761244f6133d0565b5b9250929050565b6000813590506124668161387e565b92915050565b60008151905061247b8161387e565b92915050565b60008135905061249081613895565b92915050565b6000813590506124a5816138ac565b92915050565b6000813590506124ba816138c3565b92915050565b6000602082840312156124d6576124d56133da565b5b60006124e4848285016123ec565b91505092915050565b60008060208385031215612504576125036133da565b5b600083013567ffffffffffffffff811115612522576125216133d5565b5b61252e85828601612401565b92509250509250929050565b6000602082840312156125505761254f6133da565b5b600061255e84828501612457565b91505092915050565b60006020828403121561257d5761257c6133da565b5b600061258b8482850161246c565b91505092915050565b6000602082840312156125aa576125a96133da565b5b60006125b884828501612481565b91505092915050565b600080604083850312156125d8576125d76133da565b5b60006125e685828601612481565b92505060206125f7858286016123ec565b9150509250929050565b600060208284031215612617576126166133da565b5b600061262584828501612496565b91505092915050565b600060208284031215612644576126436133da565b5b6000612652848285016124ab565b91505092915050565b60006126678383612b10565b60208301905092915050565b61267c816130ed565b82525050565b61269361268e826130ed565b61327c565b82525050565b60006126a482612fae565b6126ae8185612fd1565b93506126b983612f89565b8060005b838110156126ea5781516126d1888261265b565b97506126dc83612fc4565b9250506001810190506126bd565b5085935050505092915050565b612700816130ff565b82525050565b61270f8161310b565b82525050565b600061272082612fb9565b61272a8185612fed565b935061273a818560208601613179565b612743816133df565b840191505092915050565b600061275982612fb9565b6127638185612ffe565b9350612773818560208601613179565b80840191505092915050565b6000815461278c816131d6565b6127968186612fed565b945060018216600081146127b157600181146127c3576127f6565b60ff19831686526020860193506127f6565b6127cc85612f99565b60005b838110156127ee578154818901526001820191506020810190506127cf565b808801955050505b50505092915050565b600061280c602083612fed565b9150612817826133fd565b602082019050919050565b600061282f601883612fed565b915061283a82613426565b602082019050919050565b6000612852601e83612fed565b915061285d8261344f565b602082019050919050565b6000612875601c83612fed565b915061288082613478565b602082019050919050565b6000612898603a83612fed565b91506128a3826134a1565b604082019050919050565b60006128bb601d83612fed565b91506128c6826134f0565b602082019050919050565b60006128de601783612fed565b91506128e982613519565b602082019050919050565b6000612901601b83612fed565b915061290c82613542565b602082019050919050565b6000612924601483612fed565b915061292f8261356b565b602082019050919050565b6000612947601d83612fed565b915061295282613594565b602082019050919050565b600061296a603b83612fed565b9150612975826135bd565b604082019050919050565b600061298d601083612fed565b91506129988261360c565b602082019050919050565b60006129b0602283612fed565b91506129bb82613635565b604082019050919050565b60006129d3601d83612fed565b91506129de82613684565b602082019050919050565b60006129f6600083612fe2565b9150612a01826136ad565b600082019050919050565b6000612a19602283612fed565b9150612a24826136b0565b604082019050919050565b6000612a3c601783612ffe565b9150612a47826136ff565b601782019050919050565b6000612a5f603183612fed565b9150612a6a82613728565b604082019050919050565b6000612a82602483612fed565b9150612a8d82613777565b604082019050919050565b6000612aa5600f83612fed565b9150612ab0826137c6565b602082019050919050565b6000612ac8601183612ffe565b9150612ad3826137ef565b601182019050919050565b6000612aeb602f83612fed565b9150612af682613818565b604082019050919050565b612b0a81613141565b82525050565b612b198161316f565b82525050565b612b288161316f565b82525050565b612b3f612b3a8261316f565b6132a0565b82525050565b6000612b50826129e9565b9150819050919050565b6000612b6582612a2f565b9150612b71828561274e565b9150612b7c82612abb565b9150612b88828461274e565b91508190509392505050565b6000612ba08286612b2e565b602082019150612bb08285612682565b601482019150612bc08284612b2e565b602082019150819050949350505050565b6000602082019050612be66000830184612673565b92915050565b60006060820190508181036000830152612c068186612699565b9050612c156020830185612673565b8181036040830152612c27818461277f565b9050949350505050565b6000602082019050612c4660008301846126f7565b92915050565b6000602082019050612c616000830184612706565b92915050565b60006020820190508181036000830152612c818184612715565b905092915050565b60006020820190508181036000830152612ca2816127ff565b9050919050565b60006020820190508181036000830152612cc281612822565b9050919050565b60006020820190508181036000830152612ce281612845565b9050919050565b60006020820190508181036000830152612d0281612868565b9050919050565b60006020820190508181036000830152612d228161288b565b9050919050565b60006020820190508181036000830152612d42816128ae565b9050919050565b60006020820190508181036000830152612d62816128d1565b9050919050565b60006020820190508181036000830152612d82816128f4565b9050919050565b60006020820190508181036000830152612da281612917565b9050919050565b60006020820190508181036000830152612dc28161293a565b9050919050565b60006020820190508181036000830152612de28161295d565b9050919050565b60006020820190508181036000830152612e0281612980565b9050919050565b60006020820190508181036000830152612e22816129a3565b9050919050565b60006020820190508181036000830152612e42816129c6565b9050919050565b60006020820190508181036000830152612e6281612a0c565b9050919050565b60006020820190508181036000830152612e8281612a52565b9050919050565b60006020820190508181036000830152612ea281612a75565b9050919050565b60006020820190508181036000830152612ec281612a98565b9050919050565b60006020820190508181036000830152612ee281612ade565b9050919050565b6000602082019050612efe6000830184612b1f565b92915050565b600061010082019050612f1a600083018b612b1f565b612f27602083018a612b01565b612f346040830189612b01565b612f416060830188612b01565b612f4e6080830187612b1f565b612f5b60a0830186612b1f565b612f6860c0830185612b01565b81810360e0830152612f7a8184612715565b90509998505050505050505050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006130148261316f565b915061301f8361316f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613054576130536132db565b5b828201905092915050565b600061306a8261316f565b91506130758361316f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130ae576130ad6132db565b5b828202905092915050565b60006130c482613141565b91506130cf83613141565b9250828210156130e2576130e16132db565b5b828203905092915050565b60006130f88261314f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101561319757808201518184015260208101905061317c565b838111156131a6576000848401525b50505050565b60006131b78261316f565b915060008214156131cb576131ca6132db565b5b600182039050919050565b600060028204905060018216806131ee57607f821691505b6020821081141561320257613201613339565b5b50919050565b600061321382613141565b915061ffff821415613228576132276132db565b5b600182019050919050565b600061323e8261316f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613271576132706132db565b5b600182019050919050565b60006132878261328e565b9050919050565b6000613299826133f0565b9050919050565b6000819050919050565b60006132b58261316f565b91506132c08361316f565b9250826132d0576132cf61330a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f5761697420756e74696c20726f756e6420737461727473210000000000000000600082015250565b7f526f756e643a20746f6f206d616e7920746f6b656e7320746f206d696e740000600082015250565b7f4e465420726f756e643a204e6f7420656e6f7567682066756e64732100000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f526f756e6420616c72656164792066696e697368656421000000000000000000600082015250565b7f4e465420726f756e643a204e6f7420656e6f7567682066756e64730000000000600082015250565b7f43616e6e6f7420646f20697420616c7265616479000000000000000000000000600082015250565b7f526f756e643a20746f6f206d616e7920746f6b656e20746f206d696e74000000600082015250565b7f4e46543a20546865207265717569726564206e756d626572206f6620746f6b6560008201527f6e7320776173206e6f7420666f756e642c2074727920616761696e0000000000602082015250565b7f43616e6e6f7420646f2069742079657400000000000000000000000000000000600082015250565b7f4e465420726f756e643a206e6f2073656e64657220696e207768697465206c6960008201527f7374000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e465420726f756e643a2077686974656c6973742064697361626c6564000000600082015250565b50565b7f4e465420726f756e643a20667265652077686974656c6973742064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f526f756e643a2050726f7669646572207468652077616c6c657420686173206960008201527f6e73756666696369656e742066756e6473000000000000000000000000000000602082015250565b7f4e465420726f756e643a20667265656d696e74206e6f742079657420706f737360008201527f69626c6500000000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479206d696e746564210000000000000000000000000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b613870816130ed565b811461387b57600080fd5b50565b613887816130ff565b811461389257600080fd5b50565b61389e8161310b565b81146138a957600080fd5b50565b6138b581613115565b81146138c057600080fd5b50565b6138cc8161316f565b81146138d757600080fd5b5056fea26469706673582212207cf7a35753d16bc0f3ec7dba013e8205fd9a940851583d51f935a45eec80f70f64736f6c6343000807003300000000000000000000000000000000000000000000000014d1120d7b16000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000062fbdb200000000000000000000000000000000000000000000000000000000062fbf7400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000096c6567656e646172790000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061021a5760003560e01c80637c928fe9116101235780639877ff25116100ab578063cd0d68921161006f578063cd0d68921461077e578063cdfb2b4e146107a9578063d11a9219146107d4578063d547741f146107fd578063dc34b7a0146108265761021a565b80639877ff25146106ab578063a217fddf146106e8578063aa9a9c2d14610713578063ad85a6191461073e578063c80ec522146107675761021a565b806388241af0116100f257806388241af0146105b45780638ab1d681146105dd5780638c478bb4146106065780638fb1ca841461063157806391d148541461066e5761021a565b80637c928fe91461051b5780637f6497831461053757806380e3f1ad1461056057806383e57aff146105895761021a565b8063372c12b1116101a65780635a99719e116101755780635a99719e146104745780636443e7671461049f57806365cde733146104ca5780636817c76c146104e65780637674537d146105115761021a565b8063372c12b1146103c55780633a2eb5771461040257806351a9914a1461041e5780635639e8cf146104495761021a565b806326fae0d3116101ed57806326fae0d3146102ef5780632f2ff15d146103185780632f374e921461034157806336568abe1461036a578063370158ea146103935761021a565b806301ffc9a71461021f57806306c18a311461025c578063122e04a814610287578063248a9ca3146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612601565b61083d565b6040516102539190612c31565b60405180910390f35b34801561026857600080fd5b506102716108b7565b60405161027e9190612bd1565b60405180910390f35b34801561029357600080fd5b5061029c6108cf565b6040516102a99190612bd1565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190612594565b6108e7565b6040516102e69190612c4c565b60405180910390f35b3480156102fb57600080fd5b50610316600480360381019061031191906124c0565b610906565b005b34801561032457600080fd5b5061033f600480360381019061033a91906125c1565b610958565b005b34801561034d57600080fd5b50610368600480360381019061036391906124c0565b610979565b005b34801561037657600080fd5b50610391600480360381019061038c91906125c1565b610a36565b005b34801561039f57600080fd5b506103a8610ab9565b6040516103bc989796959493929190612f04565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e791906124c0565b610baf565b6040516103f99190612c31565b60405180910390f35b61041c6004803603810190610417919061262e565b610bcf565b005b34801561042a57600080fd5b50610433610c77565b6040516104409190612bd1565b60405180910390f35b34801561045557600080fd5b5061045e610c8f565b60405161046b9190612bd1565b60405180910390f35b34801561048057600080fd5b50610489610cb5565b6040516104969190612bd1565b60405180910390f35b3480156104ab57600080fd5b506104b4610cdf565b6040516104c19190612c31565b60405180910390f35b6104e460048036038101906104df919061262e565b610cf2565b005b3480156104f257600080fd5b506104fb611030565b6040516105089190612ee9565b60405180910390f35b61051961103d565b005b6105356004803603810190610530919061262e565b61110a565b005b34801561054357600080fd5b5061055e600480360381019061055991906124ed565b6113ad565b005b34801561056c57600080fd5b506105876004803603810190610582919061253a565b6114db565b005b34801561059557600080fd5b5061059e611506565b6040516105ab9190612c31565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061253a565b611516565b005b3480156105e957600080fd5b5061060460048036038101906105ff91906124c0565b611541565b005b34801561061257600080fd5b5061061b6115fe565b6040516106289190612c31565b60405180910390f35b34801561063d57600080fd5b50610658600480360381019061065391906124c0565b611611565b6040516106659190612ee9565b60405180910390f35b34801561067a57600080fd5b50610695600480360381019061069091906125c1565b611629565b6040516106a29190612c31565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd91906124c0565b611693565b6040516106df9190612c31565b60405180910390f35b3480156106f457600080fd5b506106fd6116b3565b60405161070a9190612c4c565b60405180910390f35b34801561071f57600080fd5b506107286116ba565b6040516107359190612ee9565b60405180910390f35b34801561074a57600080fd5b50610765600480360381019061076091906124c0565b6116d9565b005b34801561077357600080fd5b5061077c611714565b005b34801561078a57600080fd5b506107936117ac565b6040516107a09190612c4c565b60405180910390f35b3480156107b557600080fd5b506107be6117d0565b6040516107cb9190612c31565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f691906124ed565b6117e3565b005b34801561080957600080fd5b50610824600480360381019061081f91906125c1565b611911565b005b34801561083257600080fd5b5061083b611932565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b057506108af82611971565b5b9050919050565b734ec75c4925e14631a4104aba596a2ff4bb3c846a81565b730867436a889bf9c1abcaf3c505046fc4f7880b5081565b6000806000838152602001908152602001600020600101549050919050565b6000801b610913816119db565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610961826108e7565b61096a816119db565b61097483836119ef565b505050565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f53256109a3816119db565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75782604051610a2a9190612bd1565b60405180910390a15050565b610a3e611acf565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612ec9565b60405180910390fd5b610ab58282611ad7565b5050565b60028060000154908060010160009054906101000a900461ffff16908060010160029054906101000a900461ffff16908060010160049054906101000a900461ffff16908060020154908060030154908060040160009054906101000a900461ffff1690806005018054610b2c906131d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b58906131d6565b8015610ba55780601f10610b7a57610100808354040283529160200191610ba5565b820191906000526020600020905b815481529060010190602001808311610b8857829003601f168201915b5050505050905088565b60096020528060005260406000206000915054906101000a900460ff1681565b6002600301544211610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90612de9565b60405180910390fd5b611c20600260030154610c299190613009565b421115610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290612d89565b60405180910390fd5b610c7481611bb8565b50565b73706ebb592ea9d75e7981b7944aa1de28d30d6c1481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860169054906101000a900460ff1681565b80600260040160009054906101000a900461ffff1661ffff16811115610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490612da9565b60405180910390fd5b600260040160009054906101000a900461ffff1661ffff1681600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610db09190613009565b1115610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de890612cc9565b60405180910390fd5b660e35fa931a000073706ebb592ea9d75e7981b7944aa1de28d30d6c1473ffffffffffffffffffffffffffffffffffffffff16311015610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90612e69565b60405180910390fd5b6002800154421015610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490612ca9565b60405180910390fd5b600260030154421115610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec90612d49565b60405180910390fd5b600860149054906101000a900460ff16610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90612e29565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790612e09565b60405180910390fd5b81600260000154610fe1919061305f565b341015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90612d69565b60405180910390fd5b61102c82611bb8565b5050565b6000600260000154905090565b6000801b61104a816119db565b600860169054906101000a900460ff161561109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190612ea9565b60405180910390fd5b6002600001543410156110e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d990612ce9565b60405180910390fd5b6001600860166101000a81548160ff0219169083151502179055506111076001611bb8565b50565b80600260040160009054906101000a900461ffff1661ffff16811115611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90612da9565b60405180910390fd5b600260040160009054906101000a900461ffff1661ffff1681600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c89190613009565b1115611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090612cc9565b60405180910390fd5b660e35fa931a000073706ebb592ea9d75e7981b7944aa1de28d30d6c1473ffffffffffffffffffffffffffffffffffffffff1631101561127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127590612e69565b60405180910390fd5b60026003015442116112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90612e89565b60405180910390fd5b600860159054906101000a900460ff16611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90612e49565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139790612e09565b60405180910390fd5b6113a982611bb8565b5050565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f53256113d7816119db565b60005b838390508110156114d5576001600960008686858181106113fe576113fd613368565b5b905060200201602081019061141391906124c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab0384848381811061149857611497613368565b5b90506020020160208101906114ad91906124c0565b6040516114ba9190612bd1565b60405180910390a180806114cd90613233565b9150506113da565b50505050565b6000801b6114e8816119db565b81600860146101000a81548160ff0219169083151502179055505050565b6000600260030154421015905090565b6000801b611523816119db565b81600860156101000a81548160ff0219169083151502179055505050565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f532561156b816119db565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df757826040516115f29190612bd1565b60405180910390a15050565b600860159054906101000a900460ff1681565b600b6020528060005260406000206000915090505481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000801b81565b6000600260010160049054906101000a900461ffff1661ffff16905090565b6000801b6116e6816119db565b6117107f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f5325836119ef565b5050565b6000801b611721816119db565b61175e47730867436a889bf9c1abcaf3c505046fc4f7880b5073ffffffffffffffffffffffffffffffffffffffff16611f1590919063ffffffff16565b7ff45a04d08a70caa7eb4b747571305559ad9fdf4a093afd41506b35c8a306fa94730867436a889bf9c1abcaf3c505046fc4f7880b506040516117a19190612bd1565b60405180910390a150565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f532581565b600860149054906101000a900460ff1681565b7f7c59c4711af96ba0282da1339faa5078a457c1347e8c1bb0b8f0cfe94a7f532561180d816119db565b60005b8383905081101561190b576001600a600086868581811061183457611833613368565b5b905060200201602081019061184991906124c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff44df912747aab146b1d324f45e1e23f21700ada01acf1b2225a66b18370cb938484838181106118ce576118cd613368565b5b90506020020160208101906118e391906124c0565b6040516118f09190612bd1565b60405180910390a1808061190390613233565b915050611810565b50505050565b61191a826108e7565b611923816119db565b61192d8383611ad7565b505050565b6000801b61193f816119db565b61196e6000801b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ad7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6119ec816119e7611acf565b612009565b50565b6119f98282611629565b611acb57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611a70611acf565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b611ae18282611629565b15611bb457600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b59611acf565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008167ffffffffffffffff811115611bd457611bd3613397565b5b604051908082528060200260200182016040528015611c025781602001602082028036833780820191505090505b5090506000805b611c148360006120a6565b15611da4576000611c258233612102565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166349b0b1d0826040518263ffffffff1660e01b8152600401611c829190612ee9565b60206040518083038186803b158015611c9a57600080fd5b505afa158015611cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd29190612567565b158015611ce65750611ce484826120a6565b155b15611d1e5780848381518110611cff57611cfe613368565b5b6020026020010181815250508180611d1690613233565b925050611d2d565b8280611d2990613208565b9350505b60fa8361ffff161415611d9e57611d63343373ffffffffffffffffffffffffffffffffffffffff16611f1590919063ffffffff16565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590612dc9565b60405180910390fd5b50611c09565b611de8660e35fa931a000073706ebb592ea9d75e7981b7944aa1de28d30d6c1473ffffffffffffffffffffffffffffffffffffffff16611f1590919063ffffffff16565b83600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e379190613009565b9250508190555083600260010160048282829054906101000a900461ffff16611e6091906130b9565b92506101000a81548161ffff021916908361ffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afbc2c6b843360026005016040518463ffffffff1660e01b8152600401611edd93929190612bec565b600060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b5050505050505050565b80471015611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90612d29565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611f7e90612b45565b60006040518083038185875af1925050503d8060008114611fbb576040519150601f19603f3d011682016040523d82523d6000602084013e611fc0565b606091505b5050905080612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90612d09565b60405180910390fd5b505050565b6120138282611629565b6120a2576120388173ffffffffffffffffffffffffffffffffffffffff1660146121b0565b6120468360001c60206121b0565b604051602001612057929190612b5a565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120999190612c67565b60405180910390fd5b5050565b6000806000905060005b84518110156120f757838582815181106120cd576120cc613368565b5b602002602001015114156120e457600191506120f7565b80806120ef90613233565b9150506120b0565b508091505092915050565b600080600260010160009054906101000a900461ffff16600260010160029054906101000a900461ffff1661213791906130b9565b61ffff1642848660405160200161215093929190612b94565b6040516020818303038152906040528051906020012060001c61217391906132aa565b9050600260010160009054906101000a900461ffff1661ffff16816121989190613009565b90506001816121a79190613009565b91505092915050565b6060600060028360026121c3919061305f565b6121cd9190613009565b67ffffffffffffffff8111156121e6576121e5613397565b5b6040519080825280601f01601f1916602001820160405280156122185781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106122505761224f613368565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106122b4576122b3613368565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026122f4919061305f565b6122fe9190613009565b90505b600181111561239e577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106123405761233f613368565b5b1a60f81b82828151811061235757612356613368565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612397906131ac565b9050612301565b50600084146123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990612c89565b60405180910390fd5b8091505092915050565b6000813590506123fb81613867565b92915050565b60008083601f840112612417576124166133cb565b5b8235905067ffffffffffffffff811115612434576124336133c6565b5b6020830191508360208202830111156124505761244f6133d0565b5b9250929050565b6000813590506124668161387e565b92915050565b60008151905061247b8161387e565b92915050565b60008135905061249081613895565b92915050565b6000813590506124a5816138ac565b92915050565b6000813590506124ba816138c3565b92915050565b6000602082840312156124d6576124d56133da565b5b60006124e4848285016123ec565b91505092915050565b60008060208385031215612504576125036133da565b5b600083013567ffffffffffffffff811115612522576125216133d5565b5b61252e85828601612401565b92509250509250929050565b6000602082840312156125505761254f6133da565b5b600061255e84828501612457565b91505092915050565b60006020828403121561257d5761257c6133da565b5b600061258b8482850161246c565b91505092915050565b6000602082840312156125aa576125a96133da565b5b60006125b884828501612481565b91505092915050565b600080604083850312156125d8576125d76133da565b5b60006125e685828601612481565b92505060206125f7858286016123ec565b9150509250929050565b600060208284031215612617576126166133da565b5b600061262584828501612496565b91505092915050565b600060208284031215612644576126436133da565b5b6000612652848285016124ab565b91505092915050565b60006126678383612b10565b60208301905092915050565b61267c816130ed565b82525050565b61269361268e826130ed565b61327c565b82525050565b60006126a482612fae565b6126ae8185612fd1565b93506126b983612f89565b8060005b838110156126ea5781516126d1888261265b565b97506126dc83612fc4565b9250506001810190506126bd565b5085935050505092915050565b612700816130ff565b82525050565b61270f8161310b565b82525050565b600061272082612fb9565b61272a8185612fed565b935061273a818560208601613179565b612743816133df565b840191505092915050565b600061275982612fb9565b6127638185612ffe565b9350612773818560208601613179565b80840191505092915050565b6000815461278c816131d6565b6127968186612fed565b945060018216600081146127b157600181146127c3576127f6565b60ff19831686526020860193506127f6565b6127cc85612f99565b60005b838110156127ee578154818901526001820191506020810190506127cf565b808801955050505b50505092915050565b600061280c602083612fed565b9150612817826133fd565b602082019050919050565b600061282f601883612fed565b915061283a82613426565b602082019050919050565b6000612852601e83612fed565b915061285d8261344f565b602082019050919050565b6000612875601c83612fed565b915061288082613478565b602082019050919050565b6000612898603a83612fed565b91506128a3826134a1565b604082019050919050565b60006128bb601d83612fed565b91506128c6826134f0565b602082019050919050565b60006128de601783612fed565b91506128e982613519565b602082019050919050565b6000612901601b83612fed565b915061290c82613542565b602082019050919050565b6000612924601483612fed565b915061292f8261356b565b602082019050919050565b6000612947601d83612fed565b915061295282613594565b602082019050919050565b600061296a603b83612fed565b9150612975826135bd565b604082019050919050565b600061298d601083612fed565b91506129988261360c565b602082019050919050565b60006129b0602283612fed565b91506129bb82613635565b604082019050919050565b60006129d3601d83612fed565b91506129de82613684565b602082019050919050565b60006129f6600083612fe2565b9150612a01826136ad565b600082019050919050565b6000612a19602283612fed565b9150612a24826136b0565b604082019050919050565b6000612a3c601783612ffe565b9150612a47826136ff565b601782019050919050565b6000612a5f603183612fed565b9150612a6a82613728565b604082019050919050565b6000612a82602483612fed565b9150612a8d82613777565b604082019050919050565b6000612aa5600f83612fed565b9150612ab0826137c6565b602082019050919050565b6000612ac8601183612ffe565b9150612ad3826137ef565b601182019050919050565b6000612aeb602f83612fed565b9150612af682613818565b604082019050919050565b612b0a81613141565b82525050565b612b198161316f565b82525050565b612b288161316f565b82525050565b612b3f612b3a8261316f565b6132a0565b82525050565b6000612b50826129e9565b9150819050919050565b6000612b6582612a2f565b9150612b71828561274e565b9150612b7c82612abb565b9150612b88828461274e565b91508190509392505050565b6000612ba08286612b2e565b602082019150612bb08285612682565b601482019150612bc08284612b2e565b602082019150819050949350505050565b6000602082019050612be66000830184612673565b92915050565b60006060820190508181036000830152612c068186612699565b9050612c156020830185612673565b8181036040830152612c27818461277f565b9050949350505050565b6000602082019050612c4660008301846126f7565b92915050565b6000602082019050612c616000830184612706565b92915050565b60006020820190508181036000830152612c818184612715565b905092915050565b60006020820190508181036000830152612ca2816127ff565b9050919050565b60006020820190508181036000830152612cc281612822565b9050919050565b60006020820190508181036000830152612ce281612845565b9050919050565b60006020820190508181036000830152612d0281612868565b9050919050565b60006020820190508181036000830152612d228161288b565b9050919050565b60006020820190508181036000830152612d42816128ae565b9050919050565b60006020820190508181036000830152612d62816128d1565b9050919050565b60006020820190508181036000830152612d82816128f4565b9050919050565b60006020820190508181036000830152612da281612917565b9050919050565b60006020820190508181036000830152612dc28161293a565b9050919050565b60006020820190508181036000830152612de28161295d565b9050919050565b60006020820190508181036000830152612e0281612980565b9050919050565b60006020820190508181036000830152612e22816129a3565b9050919050565b60006020820190508181036000830152612e42816129c6565b9050919050565b60006020820190508181036000830152612e6281612a0c565b9050919050565b60006020820190508181036000830152612e8281612a52565b9050919050565b60006020820190508181036000830152612ea281612a75565b9050919050565b60006020820190508181036000830152612ec281612a98565b9050919050565b60006020820190508181036000830152612ee281612ade565b9050919050565b6000602082019050612efe6000830184612b1f565b92915050565b600061010082019050612f1a600083018b612b1f565b612f27602083018a612b01565b612f346040830189612b01565b612f416060830188612b01565b612f4e6080830187612b1f565b612f5b60a0830186612b1f565b612f6860c0830185612b01565b81810360e0830152612f7a8184612715565b90509998505050505050505050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006130148261316f565b915061301f8361316f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613054576130536132db565b5b828201905092915050565b600061306a8261316f565b91506130758361316f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130ae576130ad6132db565b5b828202905092915050565b60006130c482613141565b91506130cf83613141565b9250828210156130e2576130e16132db565b5b828203905092915050565b60006130f88261314f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101561319757808201518184015260208101905061317c565b838111156131a6576000848401525b50505050565b60006131b78261316f565b915060008214156131cb576131ca6132db565b5b600182039050919050565b600060028204905060018216806131ee57607f821691505b6020821081141561320257613201613339565b5b50919050565b600061321382613141565b915061ffff821415613228576132276132db565b5b600182019050919050565b600061323e8261316f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613271576132706132db565b5b600182019050919050565b60006132878261328e565b9050919050565b6000613299826133f0565b9050919050565b6000819050919050565b60006132b58261316f565b91506132c08361316f565b9250826132d0576132cf61330a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f5761697420756e74696c20726f756e6420737461727473210000000000000000600082015250565b7f526f756e643a20746f6f206d616e7920746f6b656e7320746f206d696e740000600082015250565b7f4e465420726f756e643a204e6f7420656e6f7567682066756e64732100000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f526f756e6420616c72656164792066696e697368656421000000000000000000600082015250565b7f4e465420726f756e643a204e6f7420656e6f7567682066756e64730000000000600082015250565b7f43616e6e6f7420646f20697420616c7265616479000000000000000000000000600082015250565b7f526f756e643a20746f6f206d616e7920746f6b656e20746f206d696e74000000600082015250565b7f4e46543a20546865207265717569726564206e756d626572206f6620746f6b6560008201527f6e7320776173206e6f7420666f756e642c2074727920616761696e0000000000602082015250565b7f43616e6e6f7420646f2069742079657400000000000000000000000000000000600082015250565b7f4e465420726f756e643a206e6f2073656e64657220696e207768697465206c6960008201527f7374000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e465420726f756e643a2077686974656c6973742064697361626c6564000000600082015250565b50565b7f4e465420726f756e643a20667265652077686974656c6973742064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f526f756e643a2050726f7669646572207468652077616c6c657420686173206960008201527f6e73756666696369656e742066756e6473000000000000000000000000000000602082015250565b7f4e465420726f756e643a20667265656d696e74206e6f742079657420706f737360008201527f69626c6500000000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479206d696e746564210000000000000000000000000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b613870816130ed565b811461387b57600080fd5b50565b613887816130ff565b811461389257600080fd5b50565b61389e8161310b565b81146138a957600080fd5b50565b6138b581613115565b81146138c057600080fd5b50565b6138cc8161316f565b81146138d757600080fd5b5056fea26469706673582212207cf7a35753d16bc0f3ec7dba013e8205fd9a940851583d51f935a45eec80f70f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000014d1120d7b16000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000062fbdb200000000000000000000000000000000000000000000000000000000062fbf7400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000096c6567656e646172790000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _mintPrice (uint256): 1500000000000000000
Arg [1] : _reserved (uint16): 100
Arg [2] : _collPadding (uint16): 1
Arg [3] : _maxSupply (uint16): 140
Arg [4] : _startTimestamp (uint256): 1660672800
Arg [5] : _endTimestamp (uint256): 1660680000
Arg [6] : _maxPurchase (uint16): 3
Arg [7] : _roundName (string): legendary
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000014d1120d7b160000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 000000000000000000000000000000000000000000000000000000000000008c
Arg [4] : 0000000000000000000000000000000000000000000000000000000062fbdb20
Arg [5] : 0000000000000000000000000000000000000000000000000000000062fbf740
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [9] : 6c6567656e646172790000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.