Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 25 from a total of 266 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Grant Role | 14338152 | 1105 days ago | IN | 0 ETH | 0.00166786 | ||||
Public Sale Mint | 14337725 | 1105 days ago | IN | 0.96 ETH | 0.00859079 | ||||
Public Sale Mint | 14337669 | 1105 days ago | IN | 0.25 ETH | 0.00503693 | ||||
Public Sale Mint | 14327003 | 1106 days ago | IN | 0.16 ETH | 0.00280484 | ||||
Public Sale Mint | 14326214 | 1106 days ago | IN | 0.5 ETH | 0.00470662 | ||||
Public Sale Mint | 14325409 | 1107 days ago | IN | 0.48 ETH | 0.00555638 | ||||
Public Sale Mint | 14321678 | 1107 days ago | IN | 0.16 ETH | 0.00831676 | ||||
Public Sale Mint | 14299041 | 1111 days ago | IN | 0.8 ETH | 0.01567179 | ||||
Public Sale Mint | 14290175 | 1112 days ago | IN | 0.16 ETH | 0.01203171 | ||||
Public Sale Mint | 14271425 | 1115 days ago | IN | 0.25 ETH | 0.01096218 | ||||
Public Sale Mint | 14253955 | 1118 days ago | IN | 0.25 ETH | 0.0152929 | ||||
Public Sale Mint | 14195416 | 1127 days ago | IN | 0.16 ETH | 0.00544516 | ||||
Public Sale Mint | 14187559 | 1128 days ago | IN | 0.25 ETH | 0.01321971 | ||||
Public Sale Mint | 14183125 | 1129 days ago | IN | 0.16 ETH | 0.00740501 | ||||
Public Sale Mint | 14182755 | 1129 days ago | IN | 0.16 ETH | 0.01150509 | ||||
Public Sale Mint | 14180210 | 1129 days ago | IN | 0.25 ETH | 0.02282516 | ||||
Public Sale Mint | 14176172 | 1130 days ago | IN | 0.25 ETH | 0.00956117 | ||||
Public Sale Mint | 14176070 | 1130 days ago | IN | 0.5 ETH | 0.01906544 | ||||
Public Sale Mint | 14175989 | 1130 days ago | IN | 1.5 ETH | 0.03207469 | ||||
Public Sale Mint | 14175952 | 1130 days ago | IN | 0.75 ETH | 0.02356679 | ||||
Public Sale Mint | 14175946 | 1130 days ago | IN | 0.25 ETH | 0.01392798 | ||||
Public Sale Mint | 14159278 | 1132 days ago | IN | 0.16 ETH | 0.00884842 | ||||
Public Sale Mint | 14152274 | 1133 days ago | IN | 0.25 ETH | 0.00821223 | ||||
Public Sale Mint | 14152268 | 1133 days ago | IN | 0.25 ETH | 0.00790357 | ||||
Public Sale Mint | 14150182 | 1134 days ago | IN | 0.16 ETH | 0.00677559 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
- | 14337725 | 1105 days ago | 0.96 ETH | ||||
- | 14337669 | 1105 days ago | 0.25 ETH | ||||
- | 14327003 | 1106 days ago | 0.16 ETH | ||||
- | 14326214 | 1106 days ago | 0.5 ETH | ||||
- | 14325409 | 1107 days ago | 0.48 ETH | ||||
- | 14321678 | 1107 days ago | 0.16 ETH | ||||
- | 14299041 | 1111 days ago | 0.8 ETH | ||||
- | 14290175 | 1112 days ago | 0.16 ETH | ||||
- | 14271425 | 1115 days ago | 0.25 ETH | ||||
- | 14253955 | 1118 days ago | 0.25 ETH | ||||
- | 14195416 | 1127 days ago | 0.16 ETH | ||||
- | 14187559 | 1128 days ago | 0.25 ETH | ||||
- | 14183125 | 1129 days ago | 0.16 ETH | ||||
- | 14182755 | 1129 days ago | 0.16 ETH | ||||
- | 14180210 | 1129 days ago | 0.25 ETH | ||||
- | 14176172 | 1130 days ago | 0.25 ETH | ||||
- | 14176070 | 1130 days ago | 0.5 ETH | ||||
- | 14175989 | 1130 days ago | 1.5 ETH | ||||
- | 14175952 | 1130 days ago | 0.75 ETH | ||||
- | 14175946 | 1130 days ago | 0.25 ETH | ||||
- | 14159278 | 1132 days ago | 0.16 ETH | ||||
- | 14152274 | 1133 days ago | 0.25 ETH | ||||
- | 14152268 | 1133 days ago | 0.25 ETH | ||||
- | 14150182 | 1134 days ago | 0.16 ETH | ||||
- | 14147719 | 1134 days ago | 0.25 ETH |
Loading...
Loading
Contract Name:
S16Distributor
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 1 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/utils/Context.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; interface IS16NFT { function mintEditionsUser( address _to, uint256[] memory _tokenIds, uint256[] memory _quantity ) external returns (bool); function claimNfts( address _to, uint256[] memory tokenIds, uint256[] memory quantity) external returns (bool); function updateIdsEdition(uint256[] memory _tokenIds,uint256[] memory _quantity) external; function getmintedEditionsToken(uint256 _tokenId) external view returns (uint256); function isMinted(uint256 _tokenId) external view returns (bool); function totalSupply() external view returns (uint256); function cap() external view returns (uint256); function getEditionCap() external view returns (uint256); } interface IS16Presale { function isRegisterforPresale(address wallet) external view returns (bool); } interface IS16Token { function airdropTokenUser(address account, uint256 amount) external; } contract S16Distributor is AccessControl { struct ClaimNFTPreSale { address claimWallet; uint256[] claimedTokenIds; uint256[] claimedQuantities; uint256[] unClaimedTokenIds; uint256[] unClaimedQuantities; } struct ClaimTokenPreSale { address claimWallet; uint256 claimAmount; uint256 unClaimedAmount; } struct ClaimNFTPublicSale { address claimWallet; uint256[] tokenIds; uint256[] quantity; uint256[] unClaimedTokenIds; uint256[] unClaimedQuantities; } struct ClaimTokenPublicSale { address claimWallet; uint256 claimAmount; uint256 unClaimedAmount; } uint256 public preSaleMintPrice = 0.16 ether; uint256 public publicSaleMintPrice = 0.25 ether; uint256 public PRE_SALE_START_TIME; uint256 public PUBLIC_SALE_TIME_START; uint256 private userEditionCap = 10; uint256 public _trackerTokenId; bool public _mintingPaused = false; address public s16AdminWallet; // mapping for user in Presale and Public Sale mapping(address => uint256) public mintLimit; mapping (address => ClaimNFTPreSale) public claimS16NFTsPreSale; mapping(address => ClaimTokenPreSale) public claimTokensPreSale; mapping (address => ClaimNFTPublicSale) public claimS16NFTsPublicSale; mapping(address => ClaimTokenPublicSale) public claimTokensPublicSale; IS16NFT public s16NFT; IS16Token public s16Token; IS16Presale public s16Presale; constructor(address _s16NFT, address _s16Token, address _s16PreSale,address _s16AdminWallet) { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); s16NFT = IS16NFT(_s16NFT); s16Token = IS16Token(_s16Token); s16Presale = IS16Presale(_s16PreSale); s16AdminWallet =_s16AdminWallet; PRE_SALE_START_TIME = 1643414400; PUBLIC_SALE_TIME_START = 1643500800; } function setS16NFTAddress(address _nftAddress) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Caller is not a admin"); s16NFT = IS16NFT(_nftAddress); } function setS16TokenAddress(address _sa16Token) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Caller is not a admin"); s16Token = IS16Token(_sa16Token); } function setS16PreSaleAddress(address _preSale) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Caller is not a admin"); s16Presale = IS16Presale(_preSale); } function updateUserEditionCap(uint256 _newCap) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Caller is not a admin"); require(_newCap > 0, "S16Dist: value error"); userEditionCap = _newCap; } function setPreSaleStartTime(uint256 _PRE_SALE_START_TIME) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Caller is not a admin"); PRE_SALE_START_TIME = _PRE_SALE_START_TIME; } function setPublicSaleStartTime(uint256 _PUBLIC_SALE_TIME_START) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Caller is not a admin"); PUBLIC_SALE_TIME_START = _PUBLIC_SALE_TIME_START; } function preSaleMint(address wallet, uint256 _editionQty, bool _claimNow) public payable returns(bool) { require(s16AdminWallet != address(0x0), "S16Dist: eth to null address"); require(!_mintingPaused, "S16Dist: Minting paused"); require(s16Presale.isRegisterforPresale(wallet), "S16Dist: you are not registered for presaleMint"); require(mintLimit[wallet]+_editionQty <= userEditionCap, "S16Dist: your minting limit exceed"); require(block.timestamp >= PRE_SALE_START_TIME && block.timestamp <= PUBLIC_SALE_TIME_START, "S16Dist: presale time error"); require(msg.value >= (preSaleMintPrice * _editionQty),"S16Dist: Presale price error"); payable(s16AdminWallet).transfer(msg.value); (uint256[] memory tokenIds, uint256[] memory editionQty) = _mintTokensEditions(_editionQty); uint256 s16TokenAmount = _editionQty * 16000e18; if(_claimNow) { s16NFT.mintEditionsUser(wallet, tokenIds, editionQty); s16Token.airdropTokenUser(wallet, s16TokenAmount); mintLimit[wallet] += _editionQty; } else { uint256[] storage newClaimTokenIds = claimS16NFTsPreSale[wallet].unClaimedTokenIds; uint256[] storage newClaimTokenQty = claimS16NFTsPreSale[wallet].unClaimedQuantities; for(uint i =0; i < tokenIds.length; i++) { newClaimTokenIds.push(tokenIds[i]); newClaimTokenQty.push(editionQty[i]); } s16NFT.updateIdsEdition(tokenIds,editionQty); claimS16NFTsPreSale[wallet] = ClaimNFTPreSale(wallet,claimS16NFTsPreSale[wallet].claimedTokenIds, claimS16NFTsPreSale[wallet].claimedQuantities, newClaimTokenIds, newClaimTokenQty); uint256 prevClaimAmount = claimTokensPreSale[wallet].claimAmount; claimTokensPreSale[wallet] = ClaimTokenPreSale(wallet, prevClaimAmount, claimTokensPublicSale[wallet].unClaimedAmount+s16TokenAmount); mintLimit[wallet] += _editionQty; } return true; } function publicSaleMint(address wallet, uint256 _editionQty, bool _claimNow) public payable returns (bool) { require(!_mintingPaused, "S16Dist: Minting paused"); require(s16AdminWallet != address(0x0), "S16Dist: eth to null address"); require(block.timestamp >= PUBLIC_SALE_TIME_START, "S16Dist: Public Sale not yet started"); require(mintLimit[wallet] + _editionQty <= userEditionCap, "S16Dist: your minting limit exceed"); if(s16Presale.isRegisterforPresale(wallet)){ require(msg.value >= (preSaleMintPrice * _editionQty),"S16Dist: PublicSale price error"); }else{ require(msg.value >= (publicSaleMintPrice * _editionQty), "S16Dist: PublicSale price error"); } payable(s16AdminWallet).transfer(msg.value); (uint256[] memory tokenIds, uint256[] memory editionQty) = _mintTokensEditions(_editionQty); uint256 s16TokenAmount = _editionQty * 16000e18; if(_claimNow) { s16NFT.mintEditionsUser(wallet, tokenIds, editionQty); s16Token.airdropTokenUser(wallet, s16TokenAmount); mintLimit[wallet] += _editionQty; } else { uint256[] storage newClaimTokenIds = claimS16NFTsPublicSale[wallet].unClaimedTokenIds; uint256[] storage newClaimTokenQty = claimS16NFTsPublicSale[wallet].unClaimedQuantities; for(uint i =0; i < tokenIds.length; i++) { newClaimTokenIds.push(tokenIds[i]); newClaimTokenQty.push(editionQty[i]); } s16NFT.updateIdsEdition(tokenIds,editionQty); claimS16NFTsPublicSale[wallet] = ClaimNFTPublicSale(wallet,claimS16NFTsPublicSale[wallet].tokenIds, claimS16NFTsPublicSale[wallet].quantity, newClaimTokenIds, newClaimTokenQty); uint256 prevClaimAmount = claimTokensPublicSale[wallet].claimAmount; claimTokensPublicSale[wallet] = ClaimTokenPublicSale(wallet, prevClaimAmount, claimTokensPublicSale[wallet].unClaimedAmount+s16TokenAmount); mintLimit[wallet] += _editionQty; } return true; } function mintbyAdmin(address wallet, uint256 _editionQty) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Caller is not a admin"); (uint256[] memory tokenIds, uint256[] memory editionQty) = _mintTokensEditions(_editionQty); s16NFT.updateIdsEdition(tokenIds,editionQty); s16NFT.claimNfts(wallet, tokenIds, editionQty); } function _mintTokensEditions(uint256 _editionQty) internal returns (uint256[] memory, uint256[] memory) { uint256 totalNFTs = s16NFT.cap(); uint256[] memory newTokenIds = new uint256[](_editionQty); uint256[] memory newEditionQty = new uint256[](_editionQty); for(uint i = 0; i < _editionQty; i++) { newTokenIds[i] = _trackerTokenId + 1; require(!s16NFT.isMinted(newTokenIds[i]), "S16Dist: quantity exceed limit"); newEditionQty[i] = 1; _trackerTokenId++; if(_trackerTokenId >= totalNFTs) _trackerTokenId = 0; } return (newTokenIds, newEditionQty); } function claimPreSale() public { address _wallet = msg.sender; ClaimNFTPreSale storage preSaleData = claimS16NFTsPreSale[msg.sender]; uint unClaimedTokenlength = preSaleData.unClaimedTokenIds.length; require(block.timestamp > PRE_SALE_START_TIME, "S16DIST: claim allowed after presale start"); require(_wallet == claimS16NFTsPreSale[_wallet].claimWallet && _wallet == claimTokensPreSale[_wallet].claimWallet,"S16DIST: not claimer"); require(unClaimedTokenlength != 0, "S16DIST: you cannot claim"); uint256 unClaimedAmount = claimTokensPreSale[_wallet].unClaimedAmount; s16Token.airdropTokenUser(_wallet, unClaimedAmount); claimTokensPreSale[_wallet].claimAmount += unClaimedAmount; claimTokensPreSale[_wallet].unClaimedAmount = 0; s16NFT.claimNfts( _wallet,claimS16NFTsPreSale[_wallet].unClaimedTokenIds,claimS16NFTsPreSale[_wallet].unClaimedQuantities); // updating claimtoken array uint256[] storage newClaimedTokenIds = claimS16NFTsPreSale[_wallet].claimedTokenIds; uint256[] storage newClaimedTokenQty = claimS16NFTsPreSale[_wallet].claimedQuantities; for(uint i =0; i < unClaimedTokenlength; i++) { newClaimedTokenIds.push(preSaleData.unClaimedTokenIds[i]); newClaimedTokenQty.push(preSaleData.unClaimedQuantities[i]); } delete preSaleData.unClaimedTokenIds; delete preSaleData.unClaimedQuantities; } function claimPublicSale() public { address _wallet = msg.sender; ClaimNFTPublicSale storage publicSaleData = claimS16NFTsPublicSale[msg.sender]; require(block.timestamp > PUBLIC_SALE_TIME_START , "S16DIST: claim allowed after public start"); require(_wallet == claimTokensPublicSale[_wallet].claimWallet && _wallet == claimS16NFTsPublicSale[_wallet].claimWallet, "S16DIST: not claimer"); require(publicSaleData.unClaimedTokenIds.length != 0, "S16DIST: you cannot claim"); uint256 unClaimedAmount = claimTokensPublicSale[_wallet].unClaimedAmount; s16Token.airdropTokenUser(_wallet, unClaimedAmount); claimTokensPublicSale[_wallet].claimAmount += unClaimedAmount; claimTokensPublicSale[_wallet].unClaimedAmount = 0; s16NFT.claimNfts( _wallet, claimS16NFTsPublicSale[_wallet].unClaimedTokenIds, claimS16NFTsPublicSale[_wallet].unClaimedQuantities); // updating claimtoken array uint256[] storage newClaimedTokenIds = claimS16NFTsPublicSale[_wallet].tokenIds; uint256[] storage newClaimedTokenQty = claimS16NFTsPublicSale[_wallet].quantity; for(uint i =0; i < publicSaleData.unClaimedTokenIds.length; i++) { newClaimedTokenIds.push(publicSaleData.unClaimedTokenIds[i]); newClaimedTokenQty.push(publicSaleData.unClaimedQuantities[i]); } delete publicSaleData.unClaimedTokenIds; delete publicSaleData.unClaimedQuantities; } function togglePause(bool _pause) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "S16DIST: Caller is not a admin"); require(_mintingPaused != _pause, "S16DIST: Already in desired pause state"); _mintingPaused = _pause; } function updatePreSalePrice(uint256 _newPrice) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "S16DIST: Caller is not admin"); preSaleMintPrice = _newPrice; } function updatePublicSalePrice(uint256 _newPrice) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "S16DIST: Caller is not admin"); publicSaleMintPrice = _newPrice; } function updateAdminWallet(address _adminWallet) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "S16DIST: Caller is not admin"); require(_adminWallet != address(0x0), "S16Dist: null address error"); s16AdminWallet = _adminWallet; } function getUserClaimNFTsPreSale(address _address) public view returns(ClaimNFTPreSale memory) { return claimS16NFTsPreSale[_address]; } function getUserClaimTokensPreSale(address _address) public view returns(ClaimTokenPreSale memory) { return claimTokensPreSale[_address]; } function getUserClaimNFTsPublicSale(address _address) public view returns(ClaimNFTPublicSale memory) { return claimS16NFTsPublicSale[_address]; } function getUserClaimTokensPublicSale(address _address) public view returns(ClaimTokenPublicSale memory) { return claimTokensPublicSale[_address]; } function getUserMintedEditions(address _user) public view returns(uint256) { return mintLimit[_user]; } }
// SPDX-License-Identifier: MIT 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 pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT 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, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT 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 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 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": true, "runs": 1 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_s16NFT","type":"address"},{"internalType":"address","name":"_s16Token","type":"address"},{"internalType":"address","name":"_s16PreSale","type":"address"},{"internalType":"address","name":"_s16AdminWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_SALE_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SALE_TIME_START","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintingPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_trackerTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimS16NFTsPreSale","outputs":[{"internalType":"address","name":"claimWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimS16NFTsPublicSale","outputs":[{"internalType":"address","name":"claimWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimTokensPreSale","outputs":[{"internalType":"address","name":"claimWallet","type":"address"},{"internalType":"uint256","name":"claimAmount","type":"uint256"},{"internalType":"uint256","name":"unClaimedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimTokensPublicSale","outputs":[{"internalType":"address","name":"claimWallet","type":"address"},{"internalType":"uint256","name":"claimAmount","type":"uint256"},{"internalType":"uint256","name":"unClaimedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getUserClaimNFTsPreSale","outputs":[{"components":[{"internalType":"address","name":"claimWallet","type":"address"},{"internalType":"uint256[]","name":"claimedTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"claimedQuantities","type":"uint256[]"},{"internalType":"uint256[]","name":"unClaimedTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"unClaimedQuantities","type":"uint256[]"}],"internalType":"struct S16Distributor.ClaimNFTPreSale","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getUserClaimNFTsPublicSale","outputs":[{"components":[{"internalType":"address","name":"claimWallet","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"uint256[]","name":"unClaimedTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"unClaimedQuantities","type":"uint256[]"}],"internalType":"struct S16Distributor.ClaimNFTPublicSale","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getUserClaimTokensPreSale","outputs":[{"components":[{"internalType":"address","name":"claimWallet","type":"address"},{"internalType":"uint256","name":"claimAmount","type":"uint256"},{"internalType":"uint256","name":"unClaimedAmount","type":"uint256"}],"internalType":"struct S16Distributor.ClaimTokenPreSale","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getUserClaimTokensPublicSale","outputs":[{"components":[{"internalType":"address","name":"claimWallet","type":"address"},{"internalType":"uint256","name":"claimAmount","type":"uint256"},{"internalType":"uint256","name":"unClaimedAmount","type":"uint256"}],"internalType":"struct S16Distributor.ClaimTokenPublicSale","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserMintedEditions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"_editionQty","type":"uint256"}],"name":"mintbyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"_editionQty","type":"uint256"},{"internalType":"bool","name":"_claimNow","type":"bool"}],"name":"preSaleMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSaleMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"_editionQty","type":"uint256"},{"internalType":"bool","name":"_claimNow","type":"bool"}],"name":"publicSaleMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"s16AdminWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"s16NFT","outputs":[{"internalType":"contract IS16NFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"s16Presale","outputs":[{"internalType":"contract IS16Presale","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"s16Token","outputs":[{"internalType":"contract IS16Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PRE_SALE_START_TIME","type":"uint256"}],"name":"setPreSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PUBLIC_SALE_TIME_START","type":"uint256"}],"name":"setPublicSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftAddress","type":"address"}],"name":"setS16NFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_preSale","type":"address"}],"name":"setS16PreSaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sa16Token","type":"address"}],"name":"setS16TokenAddress","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":"_pause","type":"bool"}],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adminWallet","type":"address"}],"name":"updateAdminWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"updatePreSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"updatePublicSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"updateUserEditionCap","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526702386f26fc1000006001556703782dace9d90000600255600a6005556007805460ff191690553480156200003857600080fd5b506040516200370e3803806200370e8339810160408190526200005b91620001c0565b62000068600033620000dc565b600d80546001600160a01b039586166001600160a01b031991821617909155600e805494861694821694909417909355600f80549285169290931691909117909155600780549190921661010002610100600160a81b03199091161790556361f483806003556361f5d5006004556200021c565b620000e88282620000ec565b5050565b620000f8828262000176565b620000e8576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001326200019f565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b3390565b80516001600160a01b0381168114620001bb57600080fd5b919050565b60008060008060808587031215620001d6578384fd5b620001e185620001a3565b9350620001f160208601620001a3565b92506200020160408601620001a3565b91506200021160608601620001a3565b905092959194509250565b6134e2806200022c6000396000f3fe6080604052600436106101e15760003560e01c806301ffc9a7146101e65780630576f5c01461021c5780630e886ecf1461023e578063191cf559146102605780631a387bc31461028f57806321283032146102a4578063248a9ca3146102c65780632557181d146102e6578063256a31ed1461031357806325b249e5146103335780632c965171146103535780632f2ff15d1461036857806336568abe14610388578063480edd26146103a85780635381464c146103bb57806357d159c6146103d05780635b545a83146103f05780635eec08701461041057806365fccb52146104305780636a9bfea3146104505780636b5ecffc146104655780636bf5fee31461047a5780636d5d40c61461049a57806370f93c5d146104ba57806388bd0168146104da57806391d14854146104fa578063a1ed2f441461051a578063a217fddf1461052f578063b040533b14610544578063b73a6c8514610564578063b99b84b214610591578063c5f7653b146105b1578063ca9f3143146105c6578063d547741f146105db578063db21eef4146105fb578063dc86deb01461060e578063de6f742514610623578063ec7d099114610643578063ecc06ae614610658578063ecef9c5614610678578063f4867a5714610698578063f63efa9a146106b8575b600080fd5b3480156101f257600080fd5b50610206610201366004612c11565b6106d8565b6040516102139190612eb4565b60405180910390f35b34801561022857600080fd5b50610231610705565b6040516102139190612dcb565b34801561024a57600080fd5b50610253610714565b6040516102139190612ebf565b34801561026c57600080fd5b5061028061027b366004612b14565b61071a565b60405161021393929190612e6e565b34801561029b57600080fd5b50610253610745565b3480156102b057600080fd5b506102c46102bf366004612b14565b61074b565b005b3480156102d257600080fd5b506102536102e1366004612bce565b61079f565b3480156102f257600080fd5b50610306610301366004612b14565b6107b4565b60405161021391906133ce565b34801561031f57600080fd5b506102c461032e366004612b14565b61094d565b34801561033f57600080fd5b5061023161034e366004612b14565b610998565b34801561035f57600080fd5b506102536109b3565b34801561037457600080fd5b506102c4610383366004612be6565b6109b9565b34801561039457600080fd5b506102c46103a3366004612be6565b6109e2565b6102066103b6366004612b57565b610a28565b3480156103c757600080fd5b50610253611175565b3480156103dc57600080fd5b506102c46103eb366004612b96565b61117b565b3480156103fc57600080fd5b5061028061040b366004612b14565b6111e0565b34801561041c57600080fd5b506102c461042b366004612b14565b61120b565b34801561043c57600080fd5b506102c461044b366004612bce565b611282565b34801561045c57600080fd5b506102316112b0565b34801561047157600080fd5b506102066112bf565b34801561048657600080fd5b50610231610495366004612b14565b6112c8565b3480156104a657600080fd5b506102c46104b5366004612bce565b6112e3565b3480156104c657600080fd5b506103066104d5366004612b14565b611311565b3480156104e657600080fd5b506102c46104f5366004612bce565b6114a2565b34801561050657600080fd5b50610206610515366004612be6565b6114f0565b34801561052657600080fd5b506102c461151b565b34801561053b57600080fd5b50610253611815565b34801561055057600080fd5b506102c461055f366004612bce565b61181a565b34801561057057600080fd5b5061058461057f366004612b14565b611848565b60405161021391906133e1565b34801561059d57600080fd5b506102536105ac366004612b14565b611894565b3480156105bd57600080fd5b506102c46118af565b3480156105d257600080fd5b50610231611ba7565b3480156105e757600080fd5b506102c46105f6366004612be6565b611bbb565b610206610609366004612b57565b611bda565b34801561061a57600080fd5b5061023161221a565b34801561062f57600080fd5b506102c461063e366004612bce565b612229565b34801561064f57600080fd5b50610253612257565b34801561066457600080fd5b50610253610673366004612b14565b61225d565b34801561068457600080fd5b50610584610693366004612b14565b61226f565b3480156106a457600080fd5b506102c46106b3366004612b14565b6122bb565b3480156106c457600080fd5b506102c46106d3366004612b2e565b612306565b60006001600160e01b03198216637965db0b60e01b14806106fd57506106fd82612429565b90505b919050565b600d546001600160a01b031681565b60065481565b600a602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b60025481565b6107586000610515612442565b61077d5760405162461bcd60e51b815260040161077490612efb565b60405180910390fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526020819052604090206001015490565b6107bc612a1a565b6001600160a01b03808316600090815260096020908152604091829020825160a0810184528154909416845260018101805484518185028101850190955280855291938584019390929083018282801561083557602002820191906000526020600020905b815481526020019060010190808311610821575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561088d57602002820191906000526020600020905b815481526020019060010190808311610879575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156108e557602002820191906000526020600020905b8154815260200190600101908083116108d1575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561093d57602002820191906000526020600020905b815481526020019060010190808311610929575b5050505050815250509050919050565b61095a6000610515612442565b6109765760405162461bcd60e51b815260040161077490612efb565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600b602052600090815260409020546001600160a01b031681565b60045481565b6109c28261079f565b6109d3816109ce612442565b612446565b6109dd83836124aa565b505050565b6109ea612442565b6001600160a01b0316816001600160a01b031614610a1a5760405162461bcd60e51b81526004016107749061334e565b610a24828261252f565b5050565b60075460009060ff1615610a4e5760405162461bcd60e51b81526004016107749061339d565b60075461010090046001600160a01b0316610a7b5760405162461bcd60e51b81526004016107749061306b565b600454421015610a9d5760405162461bcd60e51b8152600401610774906131c2565b6005546001600160a01b038516600090815260086020526040902054610ac49085906133ef565b1115610ae25760405162461bcd60e51b815260040161077490612fdf565b600f54604051633728a45360e11b81526001600160a01b0390911690636e5148a690610b12908790600401612dcb565b60206040518083038186803b158015610b2a57600080fd5b505afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b629190612bb2565b15610b995782600154610b759190613407565b341015610b945760405162461bcd60e51b81526004016107749061318b565b610bc6565b82600254610ba79190613407565b341015610bc65760405162461bcd60e51b81526004016107749061318b565b6007546040516001600160a01b0361010090920491909116903480156108fc02916000818181858888f19350505050158015610c06573d6000803e3d6000fd5b50600080610c13856125b2565b90925090506000610c2e866903635c9adc5dea000000613407565b90508415610d5457600d5460405163c10f830f60e01b81526001600160a01b039091169063c10f830f90610c6a908a9087908790600401612ddf565b602060405180830381600087803b158015610c8457600080fd5b505af1158015610c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbc9190612bb2565b50600e54604051634b28929360e11b81526001600160a01b0390911690639651252690610cef908a908590600401612e55565b600060405180830381600087803b158015610d0957600080fd5b505af1158015610d1d573d6000803e3d6000fd5b505050506001600160a01b03871660009081526008602052604081208054889290610d499084906133ef565b909155506111689050565b6001600160a01b0387166000908152600b6020526040812060038101916004909101905b8551811015610e165782868281518110610da257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101518254600181018455600093845291909220015584518290869083908110610de557634e487b7160e01b600052603260045260246000fd5b6020908102919091018101518254600181018455600093845291909220015580610e0e8161346d565b915050610d78565b50600d54604051632f1f5b2760e01b81526001600160a01b0390911690632f1f5b2790610e499088908890600401612e8f565b600060405180830381600087803b158015610e6357600080fd5b505af1158015610e77573d6000803e3d6000fd5b50506040805160a0810182526001600160a01b038d168082526000908152600b602090815290839020600101805484518184028101840190955280855292955081860194509190830182828015610eed57602002820191906000526020600020905b815481526020019060010190808311610ed9575b50505091835250506001600160a01b038b166000908152600b60209081526040918290206002018054835181840281018401909452808452938201939091830182828015610f5a57602002820191906000526020600020905b815481526020019060010190808311610f46575b5050505050815260200183805480602002602001604051908101604052809291908181526020018280548015610faf57602002820191906000526020600020905b815481526020019060010190808311610f9b575b505050505081526020018280548060200260200160405190810160405280929190818152602001828054801561100457602002820191906000526020600020905b815481526020019060010190808311610ff0575b5050509190925250506001600160a01b038a81166000908152600b60209081526040909120835181546001600160a01b03191693169290921782558281015180516110559260018501920190612a52565b5060408201518051611071916002840191602090910190612a52565b506060820151805161108d916003840191602090910190612a52565b50608082015180516110a9916004840191602090910190612a52565b5050506001600160a01b0389166000818152600c60208181526040808420600181015482516060810184528781528085018290529690955292909152600290910154919291908201906110fd9087906133ef565b90526001600160a01b038b81166000908152600c60209081526040808320855181546001600160a01b031916951694909417845584820151600185015593840151600290930192909255600890915290812080548b929061115f9084906133ef565b90915550505050505b5060019695505050505050565b60035481565b6111886000610515612442565b6111a45760405162461bcd60e51b8152600401610774906130f0565b60075460ff16151581151514156111cd5760405162461bcd60e51b815260040161077490613271565b6007805460ff1916911515919091179055565b600c602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b6112186000610515612442565b6112345760405162461bcd60e51b81526004016107749061323b565b6001600160a01b03811661125a5760405162461bcd60e51b815260040161077490613206565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b61128f6000610515612442565b6112ab5760405162461bcd60e51b81526004016107749061323b565b600155565b600e546001600160a01b031681565b60075460ff1681565b6009602052600090815260409020546001600160a01b031681565b6112f06000610515612442565b61130c5760405162461bcd60e51b815260040161077490612efb565b600455565b611319612a1a565b6001600160a01b038083166000908152600b6020908152604091829020825160a08101845281549094168452600181018054845181850281018501909552808552919385840193909290830182828015610835576020028201919060005260206000209081548152602001906001019080831161082157505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561088d57602002820191906000526020600020908154815260200190600101908083116108795750505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156108e557602002820191906000526020600020908154815260200190600101908083116108d157505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561093d5760200282019190600052602060002090815481526020019060010190808311610929575050505050815250509050919050565b6114af6000610515612442565b6114cb5760405162461bcd60e51b815260040161077490612efb565b600081116114eb5760405162461bcd60e51b8152600401610774906132eb565b600555565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b336000818152600b60205260409020600454421161154b5760405162461bcd60e51b815260040161077490612f96565b6001600160a01b038083166000818152600c602052604090205490911614801561158f57506001600160a01b038083166000818152600b6020526040902054909116145b6115ab5760405162461bcd60e51b815260040161077490613127565b60038101546115cc5760405162461bcd60e51b8152600401610774906132b8565b6001600160a01b038083166000908152600c60205260409081902060020154600e549151634b28929360e11b8152909291909116906396512526906116179086908590600401612e55565b600060405180830381600087803b15801561163157600080fd5b505af1158015611645573d6000803e3d6000fd5b505050506001600160a01b0383166000908152600c6020526040812060010180548392906116749084906133ef565b90915550506001600160a01b038084166000908152600c60209081526040808320600201839055600d54600b909252918290209151632e49a2c960e21b815292169163b9268b24916116d3918791600381019160049182019101612e1f565b602060405180830381600087803b1580156116ed57600080fd5b505af1158015611701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117259190612bb2565b506001600160a01b0383166000908152600b6020526040812060018101916002909101905b60038501548110156117f1578285600301828154811061177a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548354600181018555938352912090910155600485018054839190839081106117c057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548354600181018555938352912090910155806117e98161346d565b91505061174a565b50611800600385016000612a9d565b61180e600485016000612a9d565b5050505050565b600081565b6118276000610515612442565b6118435760405162461bcd60e51b815260040161077490612efb565b600355565b611850612abe565b506001600160a01b039081166000908152600a6020908152604091829020825160608101845281549094168452600181015491840191909152600201549082015290565b6001600160a01b031660009081526008602052604090205490565b336000818152600960205260409020600380820154905442116118e45760405162461bcd60e51b815260040161077490613021565b6001600160a01b0380841660008181526009602052604090205490911614801561192857506001600160a01b038084166000818152600a6020526040902054909116145b6119445760405162461bcd60e51b815260040161077490613127565b806119615760405162461bcd60e51b8152600401610774906132b8565b6001600160a01b038084166000908152600a60205260409081902060020154600e549151634b28929360e11b8152909291909116906396512526906119ac9087908590600401612e55565b600060405180830381600087803b1580156119c657600080fd5b505af11580156119da573d6000803e3d6000fd5b505050506001600160a01b0384166000908152600a602052604081206001018054839290611a099084906133ef565b90915550506001600160a01b038085166000908152600a60209081526040808320600201839055600d546009909252918290209151632e49a2c960e21b815292169163b9268b2491611a68918891600381019160049182019101612e1f565b602060405180830381600087803b158015611a8257600080fd5b505af1158015611a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba9190612bb2565b506001600160a01b038416600090815260096020526040812060018101916002909101905b84811015611b825782866003018281548110611b0b57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154835460018101855593835291209091015560048601805483919083908110611b5157634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154835460018101855593835291209091015580611b7a8161346d565b915050611adf565b50611b91600386016000612a9d565b611b9f600486016000612a9d565b505050505050565b60075461010090046001600160a01b031681565b611bc48261079f565b611bd0816109ce612442565b6109dd838361252f565b60075460009061010090046001600160a01b0316611c0a5760405162461bcd60e51b81526004016107749061306b565b60075460ff1615611c2d5760405162461bcd60e51b81526004016107749061339d565b600f54604051633728a45360e11b81526001600160a01b0390911690636e5148a690611c5d908790600401612dcb565b60206040518083038186803b158015611c7557600080fd5b505afa158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad9190612bb2565b611cc95760405162461bcd60e51b8152600401610774906130a1565b6005546001600160a01b038516600090815260086020526040902054611cf09085906133ef565b1115611d0e5760405162461bcd60e51b815260040161077490612fdf565b6003544210158015611d2257506004544211155b611d3e5760405162461bcd60e51b815260040161077490613319565b82600154611d4c9190613407565b341015611d6b5760405162461bcd60e51b815260040161077490613155565b6007546040516001600160a01b0361010090920491909116903480156108fc02916000818181858888f19350505050158015611dab573d6000803e3d6000fd5b50600080611db8856125b2565b90925090506000611dd3866903635c9adc5dea000000613407565b90508415611e0f57600d5460405163c10f830f60e01b81526001600160a01b039091169063c10f830f90610c6a908a9087908790600401612ddf565b6001600160a01b038716600090815260096020526040812060038101916004909101905b8551811015611ed15782868281518110611e5d57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101518254600181018455600093845291909220015584518290869083908110611ea057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101518254600181018455600093845291909220015580611ec98161346d565b915050611e33565b50600d54604051632f1f5b2760e01b81526001600160a01b0390911690632f1f5b2790611f049088908890600401612e8f565b600060405180830381600087803b158015611f1e57600080fd5b505af1158015611f32573d6000803e3d6000fd5b50506040805160a0810182526001600160a01b038d1680825260009081526009602090815290839020600101805484518184028101840190955280855292955081860194509190830182828015611fa857602002820191906000526020600020905b815481526020019060010190808311611f94575b50505091835250506001600160a01b038b16600090815260096020908152604091829020600201805483518184028101840190945280845293820193909183018282801561201557602002820191906000526020600020905b815481526020019060010190808311612001575b505050505081526020018380548060200260200160405190810160405280929190818152602001828054801561206a57602002820191906000526020600020905b815481526020019060010190808311612056575b50505050508152602001828054806020026020016040519081016040528092919081815260200182805480156120bf57602002820191906000526020600020905b8154815260200190600101908083116120ab575b5050509190925250506001600160a01b038a81166000908152600960209081526040909120835181546001600160a01b03191693169290921782558281015180516121109260018501920190612a52565b506040820151805161212c916002840191602090910190612a52565b5060608201518051612148916003840191602090910190612a52565b5060808201518051612164916004840191602090910190612a52565b5050506001600160a01b0389166000818152600a60209081526040808320600101548151606081018352858152808401829052948452600c90925291829020600201549092918201906121b89087906133ef565b90526001600160a01b038b81166000908152600a60209081526040808320855181546001600160a01b031916951694909417845584820151600185015593840151600290930192909255600890915290812080548b929061115f9084906133ef565b600f546001600160a01b031681565b6122366000610515612442565b6122525760405162461bcd60e51b81526004016107749061323b565b600255565b60015481565b60086020526000908152604090205481565b612277612abe565b506001600160a01b039081166000908152600c6020908152604091829020825160608101845281549094168452600181015491840191909152600201549082015290565b6122c86000610515612442565b6122e45760405162461bcd60e51b815260040161077490612efb565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6123136000610515612442565b61232f5760405162461bcd60e51b815260040161077490612efb565b60008061233b836125b2565b600d54604051632f1f5b2760e01b81529294509092506001600160a01b031690632f1f5b27906123719085908590600401612e8f565b600060405180830381600087803b15801561238b57600080fd5b505af115801561239f573d6000803e3d6000fd5b5050600d54604051632e49a2c960e21b81526001600160a01b03909116925063b9268b2491506123d790879086908690600401612ddf565b602060405180830381600087803b1580156123f157600080fd5b505af1158015612405573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180e9190612bb2565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b61245082826114f0565b610a2457612468816001600160a01b03166014612862565b612473836020612862565b604051602001612484929190612d5c565b60408051601f198184030181529082905262461bcd60e51b825261077491600401612ec8565b6124b482826114f0565b610a24576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556124eb612442565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61253982826114f0565b15610a24576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916905561256e612442565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6060806000600d60009054906101000a90046001600160a01b03166001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b15801561260557600080fd5b505afa158015612619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263d9190612c39565b90506000846001600160401b0381111561266757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612690578160200160208202803683370190505b5090506000856001600160401b038111156126bb57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156126e4578160200160208202803683370190505b50905060005b86811015612856576006546127009060016133ef565b83828151811061272057634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600d5483516001600160a01b03909116906333c41a909085908490811061276257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016127869190612ebf565b60206040518083038186803b15801561279e57600080fd5b505afa1580156127b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d69190612bb2565b156127f35760405162461bcd60e51b815260040161077490612f5f565b600182828151811061281557634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600680549060006128308361346d565b919050555083600654106128445760006006555b8061284e8161346d565b9150506126ea565b50909350915050915091565b60606000612871836002613407565b61287c9060026133ef565b6001600160401b038111156128a157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128cb576020820181803683370190505b509050600360fc1b816000815181106128f457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061293157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000612955846002613407565b6129609060016133ef565b90505b60018111156129f4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106129a257634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106129c657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936129ed81613456565b9050612963565b508315612a135760405162461bcd60e51b815260040161077490612f2a565b9392505050565b6040518060a0016040528060006001600160a01b03168152602001606081526020016060815260200160608152602001606081525090565b828054828255906000526020600020908101928215612a8d579160200282015b82811115612a8d578251825591602001919060010190612a72565b50612a99929150612ae8565b5090565b5080546000825590600052602060002090810190612abb9190612ae8565b50565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b5b80821115612a995760008155600101612ae9565b80356001600160a01b038116811461070057600080fd5b600060208284031215612b25578081fd5b612a1382612afd565b60008060408385031215612b40578081fd5b612b4983612afd565b946020939093013593505050565b600080600060608486031215612b6b578081fd5b612b7484612afd565b9250602084013591506040840135612b8b8161349e565b809150509250925092565b600060208284031215612ba7578081fd5b8135612a138161349e565b600060208284031215612bc3578081fd5b8151612a138161349e565b600060208284031215612bdf578081fd5b5035919050565b60008060408385031215612bf8578182fd5b82359150612c0860208401612afd565b90509250929050565b600060208284031215612c22578081fd5b81356001600160e01b031981168114612a13578182fd5b600060208284031215612c4a578081fd5b5051919050565b6000815180845260208085019450808401835b83811015612c8057815187529582019590820190600101612c64565b509495945050505050565b6000815480845260208085019450838352808320835b83811015612c8057815487529582019560019182019101612ca1565b600060018060a01b038251168352602082015160a06020850152612ce460a0850182612c51565b905060408301518482036040860152612cfd8282612c51565b91505060608301518482036060860152612d178282612c51565b91505060808301518482036080860152612d318282612c51565b95945050505050565b80516001600160a01b0316825260208082015190830152604090810151910152565b600076020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b82528351612d8e816017850160208801613426565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612dbf816028840160208801613426565b01602801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090612e0390830185612c51565b8281036040840152612e158185612c51565b9695505050505050565b6001600160a01b0384168152606060208201819052600090612e4390830185612c8b565b8281036040840152612e158185612c8b565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b600060408252612ea26040830185612c51565b8281036020840152612d318185612c51565b901515815260200190565b90815260200190565b6000602082528251806020840152612ee7816040850160208701613426565b601f01601f19169190910160400192915050565b60208082526015908201527421b0b63632b91034b9903737ba10309030b236b4b760591b604082015260600190565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b6020808252601e908201527f533136446973743a207175616e7469747920657863656564206c696d69740000604082015260600190565b60208082526029908201527f533136444953543a20636c61696d20616c6c6f776564206166746572207075626040820152681b1a58c81cdd185c9d60ba1b606082015260800190565b60208082526022908201527f533136446973743a20796f7572206d696e74696e67206c696d69742065786365604082015261195960f21b606082015260800190565b6020808252602a908201527f533136444953543a20636c61696d20616c6c6f776564206166746572207072656040820152691cd85b19481cdd185c9d60b21b606082015260800190565b6020808252601c908201527b533136446973743a2065746820746f206e756c6c206164647265737360201b604082015260600190565b6020808252602f908201527f533136446973743a20796f7520617265206e6f7420726567697374657265642060408201526e199bdc881c1c995cd85b19535a5b9d608a1b606082015260800190565b6020808252601e908201527f533136444953543a2043616c6c6572206973206e6f7420612061646d696e0000604082015260600190565b60208082526014908201527329989b2224a9aa1d103737ba1031b630b4b6b2b960611b604082015260600190565b6020808252601c908201527b29989b2234b9ba1d10283932b9b0b63290383934b1b29032b93937b960211b604082015260600190565b6020808252601f908201527f533136446973743a205075626c696353616c65207072696365206572726f7200604082015260600190565b60208082526024908201527f533136446973743a205075626c69632053616c65206e6f7420796574207374616040820152631c9d195960e21b606082015260800190565b6020808252601b908201527a29989b2234b9ba1d10373ab6361030b2323932b9b99032b93937b960291b604082015260600190565b6020808252601c908201527b29989b2224a9aa1d1021b0b63632b91034b9903737ba1030b236b4b760211b604082015260600190565b60208082526027908201527f533136444953543a20416c726561647920696e206465736972656420706175736040820152666520737461746560c81b606082015260800190565b602080825260199082015278533136444953543a20796f752063616e6e6f7420636c61696d60381b604082015260600190565b60208082526014908201527329989b2234b9ba1d103b30b63ab29032b93937b960611b604082015260600190565b6020808252601b908201527a29989b2234b9ba1d10383932b9b0b632903a34b6b29032b93937b960291b604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b60208082526017908201527614cc4d911a5cdd0e88135a5b9d1a5b99c81c185d5cd959604a1b604082015260600190565b600060208252612a136020830184612cbd565b606081016115158284612d3a565b6000821982111561340257613402613488565b500190565b600081600019048311821515161561342157613421613488565b500290565b60005b83811015613441578181015183820152602001613429565b83811115613450576000848401525b50505050565b60008161346557613465613488565b506000190190565b600060001982141561348157613481613488565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114612abb57600080fdfea2646970667358221220f1cdc241a3628198e6b613e0c86113246450c1467220edb22251fc70045d238d64736f6c63430008000033000000000000000000000000c749fd3ed702c67134c640e0929e95f1c55f4a1a000000000000000000000000a828b9eb0826dd5c1744a62d7428d98637d1da3b0000000000000000000000009a03cb0a561bf8b3e3b0a92ef5e2e09db92b5d4b0000000000000000000000008918d26c976de761cf110950035a57558490e289
Deployed Bytecode
0x6080604052600436106101e15760003560e01c806301ffc9a7146101e65780630576f5c01461021c5780630e886ecf1461023e578063191cf559146102605780631a387bc31461028f57806321283032146102a4578063248a9ca3146102c65780632557181d146102e6578063256a31ed1461031357806325b249e5146103335780632c965171146103535780632f2ff15d1461036857806336568abe14610388578063480edd26146103a85780635381464c146103bb57806357d159c6146103d05780635b545a83146103f05780635eec08701461041057806365fccb52146104305780636a9bfea3146104505780636b5ecffc146104655780636bf5fee31461047a5780636d5d40c61461049a57806370f93c5d146104ba57806388bd0168146104da57806391d14854146104fa578063a1ed2f441461051a578063a217fddf1461052f578063b040533b14610544578063b73a6c8514610564578063b99b84b214610591578063c5f7653b146105b1578063ca9f3143146105c6578063d547741f146105db578063db21eef4146105fb578063dc86deb01461060e578063de6f742514610623578063ec7d099114610643578063ecc06ae614610658578063ecef9c5614610678578063f4867a5714610698578063f63efa9a146106b8575b600080fd5b3480156101f257600080fd5b50610206610201366004612c11565b6106d8565b6040516102139190612eb4565b60405180910390f35b34801561022857600080fd5b50610231610705565b6040516102139190612dcb565b34801561024a57600080fd5b50610253610714565b6040516102139190612ebf565b34801561026c57600080fd5b5061028061027b366004612b14565b61071a565b60405161021393929190612e6e565b34801561029b57600080fd5b50610253610745565b3480156102b057600080fd5b506102c46102bf366004612b14565b61074b565b005b3480156102d257600080fd5b506102536102e1366004612bce565b61079f565b3480156102f257600080fd5b50610306610301366004612b14565b6107b4565b60405161021391906133ce565b34801561031f57600080fd5b506102c461032e366004612b14565b61094d565b34801561033f57600080fd5b5061023161034e366004612b14565b610998565b34801561035f57600080fd5b506102536109b3565b34801561037457600080fd5b506102c4610383366004612be6565b6109b9565b34801561039457600080fd5b506102c46103a3366004612be6565b6109e2565b6102066103b6366004612b57565b610a28565b3480156103c757600080fd5b50610253611175565b3480156103dc57600080fd5b506102c46103eb366004612b96565b61117b565b3480156103fc57600080fd5b5061028061040b366004612b14565b6111e0565b34801561041c57600080fd5b506102c461042b366004612b14565b61120b565b34801561043c57600080fd5b506102c461044b366004612bce565b611282565b34801561045c57600080fd5b506102316112b0565b34801561047157600080fd5b506102066112bf565b34801561048657600080fd5b50610231610495366004612b14565b6112c8565b3480156104a657600080fd5b506102c46104b5366004612bce565b6112e3565b3480156104c657600080fd5b506103066104d5366004612b14565b611311565b3480156104e657600080fd5b506102c46104f5366004612bce565b6114a2565b34801561050657600080fd5b50610206610515366004612be6565b6114f0565b34801561052657600080fd5b506102c461151b565b34801561053b57600080fd5b50610253611815565b34801561055057600080fd5b506102c461055f366004612bce565b61181a565b34801561057057600080fd5b5061058461057f366004612b14565b611848565b60405161021391906133e1565b34801561059d57600080fd5b506102536105ac366004612b14565b611894565b3480156105bd57600080fd5b506102c46118af565b3480156105d257600080fd5b50610231611ba7565b3480156105e757600080fd5b506102c46105f6366004612be6565b611bbb565b610206610609366004612b57565b611bda565b34801561061a57600080fd5b5061023161221a565b34801561062f57600080fd5b506102c461063e366004612bce565b612229565b34801561064f57600080fd5b50610253612257565b34801561066457600080fd5b50610253610673366004612b14565b61225d565b34801561068457600080fd5b50610584610693366004612b14565b61226f565b3480156106a457600080fd5b506102c46106b3366004612b14565b6122bb565b3480156106c457600080fd5b506102c46106d3366004612b2e565b612306565b60006001600160e01b03198216637965db0b60e01b14806106fd57506106fd82612429565b90505b919050565b600d546001600160a01b031681565b60065481565b600a602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b60025481565b6107586000610515612442565b61077d5760405162461bcd60e51b815260040161077490612efb565b60405180910390fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526020819052604090206001015490565b6107bc612a1a565b6001600160a01b03808316600090815260096020908152604091829020825160a0810184528154909416845260018101805484518185028101850190955280855291938584019390929083018282801561083557602002820191906000526020600020905b815481526020019060010190808311610821575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561088d57602002820191906000526020600020905b815481526020019060010190808311610879575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156108e557602002820191906000526020600020905b8154815260200190600101908083116108d1575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561093d57602002820191906000526020600020905b815481526020019060010190808311610929575b5050505050815250509050919050565b61095a6000610515612442565b6109765760405162461bcd60e51b815260040161077490612efb565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600b602052600090815260409020546001600160a01b031681565b60045481565b6109c28261079f565b6109d3816109ce612442565b612446565b6109dd83836124aa565b505050565b6109ea612442565b6001600160a01b0316816001600160a01b031614610a1a5760405162461bcd60e51b81526004016107749061334e565b610a24828261252f565b5050565b60075460009060ff1615610a4e5760405162461bcd60e51b81526004016107749061339d565b60075461010090046001600160a01b0316610a7b5760405162461bcd60e51b81526004016107749061306b565b600454421015610a9d5760405162461bcd60e51b8152600401610774906131c2565b6005546001600160a01b038516600090815260086020526040902054610ac49085906133ef565b1115610ae25760405162461bcd60e51b815260040161077490612fdf565b600f54604051633728a45360e11b81526001600160a01b0390911690636e5148a690610b12908790600401612dcb565b60206040518083038186803b158015610b2a57600080fd5b505afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b629190612bb2565b15610b995782600154610b759190613407565b341015610b945760405162461bcd60e51b81526004016107749061318b565b610bc6565b82600254610ba79190613407565b341015610bc65760405162461bcd60e51b81526004016107749061318b565b6007546040516001600160a01b0361010090920491909116903480156108fc02916000818181858888f19350505050158015610c06573d6000803e3d6000fd5b50600080610c13856125b2565b90925090506000610c2e866903635c9adc5dea000000613407565b90508415610d5457600d5460405163c10f830f60e01b81526001600160a01b039091169063c10f830f90610c6a908a9087908790600401612ddf565b602060405180830381600087803b158015610c8457600080fd5b505af1158015610c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbc9190612bb2565b50600e54604051634b28929360e11b81526001600160a01b0390911690639651252690610cef908a908590600401612e55565b600060405180830381600087803b158015610d0957600080fd5b505af1158015610d1d573d6000803e3d6000fd5b505050506001600160a01b03871660009081526008602052604081208054889290610d499084906133ef565b909155506111689050565b6001600160a01b0387166000908152600b6020526040812060038101916004909101905b8551811015610e165782868281518110610da257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101518254600181018455600093845291909220015584518290869083908110610de557634e487b7160e01b600052603260045260246000fd5b6020908102919091018101518254600181018455600093845291909220015580610e0e8161346d565b915050610d78565b50600d54604051632f1f5b2760e01b81526001600160a01b0390911690632f1f5b2790610e499088908890600401612e8f565b600060405180830381600087803b158015610e6357600080fd5b505af1158015610e77573d6000803e3d6000fd5b50506040805160a0810182526001600160a01b038d168082526000908152600b602090815290839020600101805484518184028101840190955280855292955081860194509190830182828015610eed57602002820191906000526020600020905b815481526020019060010190808311610ed9575b50505091835250506001600160a01b038b166000908152600b60209081526040918290206002018054835181840281018401909452808452938201939091830182828015610f5a57602002820191906000526020600020905b815481526020019060010190808311610f46575b5050505050815260200183805480602002602001604051908101604052809291908181526020018280548015610faf57602002820191906000526020600020905b815481526020019060010190808311610f9b575b505050505081526020018280548060200260200160405190810160405280929190818152602001828054801561100457602002820191906000526020600020905b815481526020019060010190808311610ff0575b5050509190925250506001600160a01b038a81166000908152600b60209081526040909120835181546001600160a01b03191693169290921782558281015180516110559260018501920190612a52565b5060408201518051611071916002840191602090910190612a52565b506060820151805161108d916003840191602090910190612a52565b50608082015180516110a9916004840191602090910190612a52565b5050506001600160a01b0389166000818152600c60208181526040808420600181015482516060810184528781528085018290529690955292909152600290910154919291908201906110fd9087906133ef565b90526001600160a01b038b81166000908152600c60209081526040808320855181546001600160a01b031916951694909417845584820151600185015593840151600290930192909255600890915290812080548b929061115f9084906133ef565b90915550505050505b5060019695505050505050565b60035481565b6111886000610515612442565b6111a45760405162461bcd60e51b8152600401610774906130f0565b60075460ff16151581151514156111cd5760405162461bcd60e51b815260040161077490613271565b6007805460ff1916911515919091179055565b600c602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b6112186000610515612442565b6112345760405162461bcd60e51b81526004016107749061323b565b6001600160a01b03811661125a5760405162461bcd60e51b815260040161077490613206565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b61128f6000610515612442565b6112ab5760405162461bcd60e51b81526004016107749061323b565b600155565b600e546001600160a01b031681565b60075460ff1681565b6009602052600090815260409020546001600160a01b031681565b6112f06000610515612442565b61130c5760405162461bcd60e51b815260040161077490612efb565b600455565b611319612a1a565b6001600160a01b038083166000908152600b6020908152604091829020825160a08101845281549094168452600181018054845181850281018501909552808552919385840193909290830182828015610835576020028201919060005260206000209081548152602001906001019080831161082157505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561088d57602002820191906000526020600020908154815260200190600101908083116108795750505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156108e557602002820191906000526020600020908154815260200190600101908083116108d157505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561093d5760200282019190600052602060002090815481526020019060010190808311610929575050505050815250509050919050565b6114af6000610515612442565b6114cb5760405162461bcd60e51b815260040161077490612efb565b600081116114eb5760405162461bcd60e51b8152600401610774906132eb565b600555565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b336000818152600b60205260409020600454421161154b5760405162461bcd60e51b815260040161077490612f96565b6001600160a01b038083166000818152600c602052604090205490911614801561158f57506001600160a01b038083166000818152600b6020526040902054909116145b6115ab5760405162461bcd60e51b815260040161077490613127565b60038101546115cc5760405162461bcd60e51b8152600401610774906132b8565b6001600160a01b038083166000908152600c60205260409081902060020154600e549151634b28929360e11b8152909291909116906396512526906116179086908590600401612e55565b600060405180830381600087803b15801561163157600080fd5b505af1158015611645573d6000803e3d6000fd5b505050506001600160a01b0383166000908152600c6020526040812060010180548392906116749084906133ef565b90915550506001600160a01b038084166000908152600c60209081526040808320600201839055600d54600b909252918290209151632e49a2c960e21b815292169163b9268b24916116d3918791600381019160049182019101612e1f565b602060405180830381600087803b1580156116ed57600080fd5b505af1158015611701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117259190612bb2565b506001600160a01b0383166000908152600b6020526040812060018101916002909101905b60038501548110156117f1578285600301828154811061177a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548354600181018555938352912090910155600485018054839190839081106117c057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548354600181018555938352912090910155806117e98161346d565b91505061174a565b50611800600385016000612a9d565b61180e600485016000612a9d565b5050505050565b600081565b6118276000610515612442565b6118435760405162461bcd60e51b815260040161077490612efb565b600355565b611850612abe565b506001600160a01b039081166000908152600a6020908152604091829020825160608101845281549094168452600181015491840191909152600201549082015290565b6001600160a01b031660009081526008602052604090205490565b336000818152600960205260409020600380820154905442116118e45760405162461bcd60e51b815260040161077490613021565b6001600160a01b0380841660008181526009602052604090205490911614801561192857506001600160a01b038084166000818152600a6020526040902054909116145b6119445760405162461bcd60e51b815260040161077490613127565b806119615760405162461bcd60e51b8152600401610774906132b8565b6001600160a01b038084166000908152600a60205260409081902060020154600e549151634b28929360e11b8152909291909116906396512526906119ac9087908590600401612e55565b600060405180830381600087803b1580156119c657600080fd5b505af11580156119da573d6000803e3d6000fd5b505050506001600160a01b0384166000908152600a602052604081206001018054839290611a099084906133ef565b90915550506001600160a01b038085166000908152600a60209081526040808320600201839055600d546009909252918290209151632e49a2c960e21b815292169163b9268b2491611a68918891600381019160049182019101612e1f565b602060405180830381600087803b158015611a8257600080fd5b505af1158015611a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba9190612bb2565b506001600160a01b038416600090815260096020526040812060018101916002909101905b84811015611b825782866003018281548110611b0b57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154835460018101855593835291209091015560048601805483919083908110611b5157634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154835460018101855593835291209091015580611b7a8161346d565b915050611adf565b50611b91600386016000612a9d565b611b9f600486016000612a9d565b505050505050565b60075461010090046001600160a01b031681565b611bc48261079f565b611bd0816109ce612442565b6109dd838361252f565b60075460009061010090046001600160a01b0316611c0a5760405162461bcd60e51b81526004016107749061306b565b60075460ff1615611c2d5760405162461bcd60e51b81526004016107749061339d565b600f54604051633728a45360e11b81526001600160a01b0390911690636e5148a690611c5d908790600401612dcb565b60206040518083038186803b158015611c7557600080fd5b505afa158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad9190612bb2565b611cc95760405162461bcd60e51b8152600401610774906130a1565b6005546001600160a01b038516600090815260086020526040902054611cf09085906133ef565b1115611d0e5760405162461bcd60e51b815260040161077490612fdf565b6003544210158015611d2257506004544211155b611d3e5760405162461bcd60e51b815260040161077490613319565b82600154611d4c9190613407565b341015611d6b5760405162461bcd60e51b815260040161077490613155565b6007546040516001600160a01b0361010090920491909116903480156108fc02916000818181858888f19350505050158015611dab573d6000803e3d6000fd5b50600080611db8856125b2565b90925090506000611dd3866903635c9adc5dea000000613407565b90508415611e0f57600d5460405163c10f830f60e01b81526001600160a01b039091169063c10f830f90610c6a908a9087908790600401612ddf565b6001600160a01b038716600090815260096020526040812060038101916004909101905b8551811015611ed15782868281518110611e5d57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101518254600181018455600093845291909220015584518290869083908110611ea057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101518254600181018455600093845291909220015580611ec98161346d565b915050611e33565b50600d54604051632f1f5b2760e01b81526001600160a01b0390911690632f1f5b2790611f049088908890600401612e8f565b600060405180830381600087803b158015611f1e57600080fd5b505af1158015611f32573d6000803e3d6000fd5b50506040805160a0810182526001600160a01b038d1680825260009081526009602090815290839020600101805484518184028101840190955280855292955081860194509190830182828015611fa857602002820191906000526020600020905b815481526020019060010190808311611f94575b50505091835250506001600160a01b038b16600090815260096020908152604091829020600201805483518184028101840190945280845293820193909183018282801561201557602002820191906000526020600020905b815481526020019060010190808311612001575b505050505081526020018380548060200260200160405190810160405280929190818152602001828054801561206a57602002820191906000526020600020905b815481526020019060010190808311612056575b50505050508152602001828054806020026020016040519081016040528092919081815260200182805480156120bf57602002820191906000526020600020905b8154815260200190600101908083116120ab575b5050509190925250506001600160a01b038a81166000908152600960209081526040909120835181546001600160a01b03191693169290921782558281015180516121109260018501920190612a52565b506040820151805161212c916002840191602090910190612a52565b5060608201518051612148916003840191602090910190612a52565b5060808201518051612164916004840191602090910190612a52565b5050506001600160a01b0389166000818152600a60209081526040808320600101548151606081018352858152808401829052948452600c90925291829020600201549092918201906121b89087906133ef565b90526001600160a01b038b81166000908152600a60209081526040808320855181546001600160a01b031916951694909417845584820151600185015593840151600290930192909255600890915290812080548b929061115f9084906133ef565b600f546001600160a01b031681565b6122366000610515612442565b6122525760405162461bcd60e51b81526004016107749061323b565b600255565b60015481565b60086020526000908152604090205481565b612277612abe565b506001600160a01b039081166000908152600c6020908152604091829020825160608101845281549094168452600181015491840191909152600201549082015290565b6122c86000610515612442565b6122e45760405162461bcd60e51b815260040161077490612efb565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6123136000610515612442565b61232f5760405162461bcd60e51b815260040161077490612efb565b60008061233b836125b2565b600d54604051632f1f5b2760e01b81529294509092506001600160a01b031690632f1f5b27906123719085908590600401612e8f565b600060405180830381600087803b15801561238b57600080fd5b505af115801561239f573d6000803e3d6000fd5b5050600d54604051632e49a2c960e21b81526001600160a01b03909116925063b9268b2491506123d790879086908690600401612ddf565b602060405180830381600087803b1580156123f157600080fd5b505af1158015612405573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180e9190612bb2565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b61245082826114f0565b610a2457612468816001600160a01b03166014612862565b612473836020612862565b604051602001612484929190612d5c565b60408051601f198184030181529082905262461bcd60e51b825261077491600401612ec8565b6124b482826114f0565b610a24576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556124eb612442565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61253982826114f0565b15610a24576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916905561256e612442565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6060806000600d60009054906101000a90046001600160a01b03166001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b15801561260557600080fd5b505afa158015612619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263d9190612c39565b90506000846001600160401b0381111561266757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612690578160200160208202803683370190505b5090506000856001600160401b038111156126bb57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156126e4578160200160208202803683370190505b50905060005b86811015612856576006546127009060016133ef565b83828151811061272057634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600d5483516001600160a01b03909116906333c41a909085908490811061276257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016127869190612ebf565b60206040518083038186803b15801561279e57600080fd5b505afa1580156127b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d69190612bb2565b156127f35760405162461bcd60e51b815260040161077490612f5f565b600182828151811061281557634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600680549060006128308361346d565b919050555083600654106128445760006006555b8061284e8161346d565b9150506126ea565b50909350915050915091565b60606000612871836002613407565b61287c9060026133ef565b6001600160401b038111156128a157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128cb576020820181803683370190505b509050600360fc1b816000815181106128f457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061293157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000612955846002613407565b6129609060016133ef565b90505b60018111156129f4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106129a257634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106129c657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936129ed81613456565b9050612963565b508315612a135760405162461bcd60e51b815260040161077490612f2a565b9392505050565b6040518060a0016040528060006001600160a01b03168152602001606081526020016060815260200160608152602001606081525090565b828054828255906000526020600020908101928215612a8d579160200282015b82811115612a8d578251825591602001919060010190612a72565b50612a99929150612ae8565b5090565b5080546000825590600052602060002090810190612abb9190612ae8565b50565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b5b80821115612a995760008155600101612ae9565b80356001600160a01b038116811461070057600080fd5b600060208284031215612b25578081fd5b612a1382612afd565b60008060408385031215612b40578081fd5b612b4983612afd565b946020939093013593505050565b600080600060608486031215612b6b578081fd5b612b7484612afd565b9250602084013591506040840135612b8b8161349e565b809150509250925092565b600060208284031215612ba7578081fd5b8135612a138161349e565b600060208284031215612bc3578081fd5b8151612a138161349e565b600060208284031215612bdf578081fd5b5035919050565b60008060408385031215612bf8578182fd5b82359150612c0860208401612afd565b90509250929050565b600060208284031215612c22578081fd5b81356001600160e01b031981168114612a13578182fd5b600060208284031215612c4a578081fd5b5051919050565b6000815180845260208085019450808401835b83811015612c8057815187529582019590820190600101612c64565b509495945050505050565b6000815480845260208085019450838352808320835b83811015612c8057815487529582019560019182019101612ca1565b600060018060a01b038251168352602082015160a06020850152612ce460a0850182612c51565b905060408301518482036040860152612cfd8282612c51565b91505060608301518482036060860152612d178282612c51565b91505060808301518482036080860152612d318282612c51565b95945050505050565b80516001600160a01b0316825260208082015190830152604090810151910152565b600076020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b82528351612d8e816017850160208801613426565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612dbf816028840160208801613426565b01602801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090612e0390830185612c51565b8281036040840152612e158185612c51565b9695505050505050565b6001600160a01b0384168152606060208201819052600090612e4390830185612c8b565b8281036040840152612e158185612c8b565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b600060408252612ea26040830185612c51565b8281036020840152612d318185612c51565b901515815260200190565b90815260200190565b6000602082528251806020840152612ee7816040850160208701613426565b601f01601f19169190910160400192915050565b60208082526015908201527421b0b63632b91034b9903737ba10309030b236b4b760591b604082015260600190565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b6020808252601e908201527f533136446973743a207175616e7469747920657863656564206c696d69740000604082015260600190565b60208082526029908201527f533136444953543a20636c61696d20616c6c6f776564206166746572207075626040820152681b1a58c81cdd185c9d60ba1b606082015260800190565b60208082526022908201527f533136446973743a20796f7572206d696e74696e67206c696d69742065786365604082015261195960f21b606082015260800190565b6020808252602a908201527f533136444953543a20636c61696d20616c6c6f776564206166746572207072656040820152691cd85b19481cdd185c9d60b21b606082015260800190565b6020808252601c908201527b533136446973743a2065746820746f206e756c6c206164647265737360201b604082015260600190565b6020808252602f908201527f533136446973743a20796f7520617265206e6f7420726567697374657265642060408201526e199bdc881c1c995cd85b19535a5b9d608a1b606082015260800190565b6020808252601e908201527f533136444953543a2043616c6c6572206973206e6f7420612061646d696e0000604082015260600190565b60208082526014908201527329989b2224a9aa1d103737ba1031b630b4b6b2b960611b604082015260600190565b6020808252601c908201527b29989b2234b9ba1d10283932b9b0b63290383934b1b29032b93937b960211b604082015260600190565b6020808252601f908201527f533136446973743a205075626c696353616c65207072696365206572726f7200604082015260600190565b60208082526024908201527f533136446973743a205075626c69632053616c65206e6f7420796574207374616040820152631c9d195960e21b606082015260800190565b6020808252601b908201527a29989b2234b9ba1d10373ab6361030b2323932b9b99032b93937b960291b604082015260600190565b6020808252601c908201527b29989b2224a9aa1d1021b0b63632b91034b9903737ba1030b236b4b760211b604082015260600190565b60208082526027908201527f533136444953543a20416c726561647920696e206465736972656420706175736040820152666520737461746560c81b606082015260800190565b602080825260199082015278533136444953543a20796f752063616e6e6f7420636c61696d60381b604082015260600190565b60208082526014908201527329989b2234b9ba1d103b30b63ab29032b93937b960611b604082015260600190565b6020808252601b908201527a29989b2234b9ba1d10383932b9b0b632903a34b6b29032b93937b960291b604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b60208082526017908201527614cc4d911a5cdd0e88135a5b9d1a5b99c81c185d5cd959604a1b604082015260600190565b600060208252612a136020830184612cbd565b606081016115158284612d3a565b6000821982111561340257613402613488565b500190565b600081600019048311821515161561342157613421613488565b500290565b60005b83811015613441578181015183820152602001613429565b83811115613450576000848401525b50505050565b60008161346557613465613488565b506000190190565b600060001982141561348157613481613488565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114612abb57600080fdfea2646970667358221220f1cdc241a3628198e6b613e0c86113246450c1467220edb22251fc70045d238d64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c749fd3ed702c67134c640e0929e95f1c55f4a1a000000000000000000000000a828b9eb0826dd5c1744a62d7428d98637d1da3b0000000000000000000000009a03cb0a561bf8b3e3b0a92ef5e2e09db92b5d4b0000000000000000000000008918d26c976de761cf110950035a57558490e289
-----Decoded View---------------
Arg [0] : _s16NFT (address): 0xC749Fd3eD702C67134C640E0929e95F1c55f4a1a
Arg [1] : _s16Token (address): 0xa828B9eB0826DD5c1744A62d7428d98637D1dA3b
Arg [2] : _s16PreSale (address): 0x9a03cb0A561bF8b3e3b0a92eF5E2e09DB92B5D4B
Arg [3] : _s16AdminWallet (address): 0x8918D26C976dE761Cf110950035A57558490e289
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000c749fd3ed702c67134c640e0929e95f1c55f4a1a
Arg [1] : 000000000000000000000000a828b9eb0826dd5c1744a62d7428d98637d1da3b
Arg [2] : 0000000000000000000000009a03cb0a561bf8b3e3b0a92ef5e2e09db92b5d4b
Arg [3] : 0000000000000000000000008918d26c976de761cf110950035a57558490e289
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.