More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 16,670 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Calculate My Res... | 14287197 | 1060 days ago | IN | 0 ETH | 0.00215677 | ||||
Taking Tickets | 14178426 | 1077 days ago | IN | 0.16 ETH | 0.00152623 | ||||
Taking Tickets | 14178426 | 1077 days ago | IN | 0.16 ETH | 0.00152623 | ||||
Taking Tickets | 14178426 | 1077 days ago | IN | 0.16 ETH | 0.00152623 | ||||
Taking Tickets | 14178426 | 1077 days ago | IN | 0.16 ETH | 0.00152623 | ||||
Taking Tickets | 14178426 | 1077 days ago | IN | 0.16 ETH | 0.00152623 | ||||
Taking Tickets | 14178426 | 1077 days ago | IN | 0.16 ETH | 0.00152623 | ||||
Taking Tickets | 14178424 | 1077 days ago | IN | 0.16 ETH | 0.0017429 | ||||
Taking Tickets | 14178424 | 1077 days ago | IN | 0.16 ETH | 0.0017429 | ||||
Taking Tickets | 14178424 | 1077 days ago | IN | 0.16 ETH | 0.0017429 | ||||
Calculate My Res... | 14039601 | 1098 days ago | IN | 0 ETH | 0.00264351 | ||||
Taking Tickets | 13478495 | 1186 days ago | IN | 0.08 ETH | 0.00082811 | ||||
Taking Tickets | 13478495 | 1186 days ago | IN | 0.08 ETH | 0.00082811 | ||||
Calculate My Res... | 13408086 | 1197 days ago | IN | 0 ETH | 0.00733602 | ||||
Calculate My Res... | 13399666 | 1199 days ago | IN | 0 ETH | 0.00263833 | ||||
Calculate My Res... | 13372164 | 1203 days ago | IN | 0 ETH | 0.00423203 | ||||
Calculate My Res... | 13372164 | 1203 days ago | IN | 0 ETH | 0.00328135 | ||||
Calculate My Res... | 13372164 | 1203 days ago | IN | 0 ETH | 0.00804632 | ||||
Taking Tickets | 13371980 | 1203 days ago | IN | 0.16 ETH | 0.00209337 | ||||
Calculate My Res... | 13296602 | 1215 days ago | IN | 0 ETH | 0.00528099 | ||||
Calculate My Res... | 13277255 | 1218 days ago | IN | 0 ETH | 0.00569877 | ||||
Calculate My Res... | 13272710 | 1218 days ago | IN | 0 ETH | 0.00477399 | ||||
Calculate My Res... | 13264152 | 1220 days ago | IN | 0 ETH | 0.00680623 | ||||
Calculate My Res... | 13263682 | 1220 days ago | IN | 0 ETH | 0.01240393 | ||||
Calculate My Res... | 13258702 | 1221 days ago | IN | 0 ETH | 0.00582727 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14287197 | 1060 days ago | 0.08 ETH | ||||
13408086 | 1197 days ago | 0.08 ETH | ||||
13372164 | 1203 days ago | 0.08 ETH | ||||
13296602 | 1215 days ago | 1.2 ETH | ||||
13277255 | 1218 days ago | 0.08 ETH | ||||
13264152 | 1220 days ago | 0.24 ETH | ||||
13263682 | 1220 days ago | 0.08 ETH | ||||
13258702 | 1221 days ago | 0.08 ETH | ||||
13257827 | 1221 days ago | 0.08 ETH | ||||
13256809 | 1221 days ago | 0.08 ETH | ||||
13255435 | 1221 days ago | 0.08 ETH | ||||
13253364 | 1221 days ago | 0.08 ETH | ||||
13249424 | 1222 days ago | 0.08 ETH | ||||
13248582 | 1222 days ago | 0.24 ETH | ||||
13247537 | 1222 days ago | 0.08 ETH | ||||
13247413 | 1222 days ago | 0.16 ETH | ||||
13246907 | 1222 days ago | 0.4 ETH | ||||
13244499 | 1223 days ago | 0.08 ETH | ||||
13244277 | 1223 days ago | 0.08 ETH | ||||
13243254 | 1223 days ago | 0.16 ETH | ||||
13240942 | 1223 days ago | 0.08 ETH | ||||
13238195 | 1224 days ago | 0.08 ETH | ||||
13237374 | 1224 days ago | 0.08 ETH | ||||
13237356 | 1224 days ago | 0.08 ETH | ||||
13236141 | 1224 days ago | 0.08 ETH |
Loading...
Loading
Contract Name:
URSStore
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; interface Factory { function mint(address) external; } interface Pass { function balanceOf(address) external view returns (uint256); } contract URSStore is Ownable { Pass public constant pass = Pass(0xe0e19Aa07cb819664001adFFeA6a176A75897899); Factory public constant ursFactory = Factory(0x08f0B2A4351514E63E9E03A661aDFe58D463CfBc); /** Numbers for URS Factory */ uint256 public constant maxURS = 10000; /** Team withdraw fund */ // claimed bool internal claimed = false; /** Team allocated URS */ // URS which is minted by the owner uint256 public preMintedURS = 0; // MAX URS which owner can mint uint256 public constant maxPreMintURS = 50; /** Mint Pass */ uint256 public newlyMintedURSWithPass = 0; uint256 public constant maxURSPerPass = 5; mapping(address => uint256) public mintedURSOf; /** Scheduling */ uint256 public openingHours = 1631318400; // Sat Sep 11 2021 00:00:00 GMT+0000 uint256 public constant operationSecondsForVIP = 3600 * 9; // 9 hours uint256 public constant operationSeconds = 3600 * 24; // 24 hours /** Ticket */ uint256 public constant ticketPrice = 0.08 ether; uint256 public totalTickets = 0; mapping(address => ticket) public ticketsOf; struct ticket { uint256 index; // Incl uint256 amount; } /** Security */ uint256 public constant maxMintPerTx = 30; /** Raffle */ uint256 public raffleNumber; uint256 public offsetInSlot; uint256 public slotSize; uint256 public lastTargetIndex; // index greater than this is dis-regarded mapping(address => result) public resultOf; struct result { bool executed; uint256 validTicketAmount; } // event SetPass(address pass); // event SetURSFactory(address ursFactory); event SetOpeningHours(uint256 openingHours); event MintWithPass(address account, uint256 amount, uint256 changes); event TakingTickets(address account, uint256 amount, uint256 changes); event RunRaffle(uint256 raffleNumber); event SetResult( address account, uint256 validTicketAmount, uint256 changes ); event MintURS(address account, uint256 mintRequestAmount); event Withdraw(address to); constructor() {} modifier whenOpened() { require( block.timestamp >= openingHours + operationSecondsForVIP, "Store is not opened" ); require( block.timestamp < openingHours + operationSecondsForVIP + operationSeconds, "Store is closed" ); _; } modifier whenVIPOpened() { require(block.timestamp >= openingHours, "Store is not opened for VIP"); require( block.timestamp < openingHours + operationSecondsForVIP, "Store is closed for VIP" ); _; } // function setPass(Pass _pass) external onlyOwner { // pass = _pass; // emit SetPass(address(_pass)); // } // function setURSFactory(Factory _ursFactory) external onlyOwner { // ursFactory = _ursFactory; // emit SetURSFactory(address(_ursFactory)); // } function setOpeningHours(uint256 _openingHours) external onlyOwner { openingHours = _openingHours; emit SetOpeningHours(_openingHours); } // Do not update newlyMintedURS to prevent withdrawal function preMintURS(address[] memory recipients) external onlyOwner { require( block.timestamp < openingHours + operationSecondsForVIP + operationSeconds, "Not available after ticketing period" ); uint256 totalRecipients = recipients.length; require( totalRecipients > 0, "Number of recipients must be greater than 0" ); require( preMintedURS + totalRecipients <= maxPreMintURS, "Exceeds max pre-mint URS" ); for (uint256 i = 0; i < totalRecipients; i++) { address to = recipients[i]; require(to != address(0), "receiver can not be empty address"); ursFactory.mint(to); } preMintedURS += totalRecipients; } function mintWithPass(uint256 _amount) external payable whenVIPOpened { require(_amount <= maxMintPerTx, "mint amount exceeds maximum"); require(_amount > 0, "Need to mint more than 0"); uint256 mintedURS = mintedURSOf[msg.sender]; uint256 passAmount = pass.balanceOf(msg.sender); require( passAmount * maxURSPerPass - mintedURS >= _amount, "Not enough Pass" ); uint256 totalPrice = ticketPrice * _amount; require(totalPrice <= msg.value, "Not enough money"); for (uint256 i = 0; i < _amount; i += 1) { ursFactory.mint(msg.sender); } mintedURSOf[msg.sender] = mintedURS + _amount; newlyMintedURSWithPass += _amount; // Refund changes uint256 changes = msg.value - totalPrice; emit MintWithPass(msg.sender, _amount, changes); if (changes > 0) { payable(msg.sender).transfer(changes); } } function takingTickets(uint256 _amount) external payable whenOpened { require(_amount > 0, "Need to take ticket more than 0"); ticket storage myTicket = ticketsOf[msg.sender]; require(myTicket.amount == 0, "Already registered"); uint256 totalPrice = ticketPrice * _amount; require(totalPrice <= msg.value, "Not enough money"); myTicket.index = totalTickets; myTicket.amount = _amount; totalTickets = totalTickets + _amount; // Refund changes uint256 changes = msg.value - totalPrice; emit TakingTickets(msg.sender, _amount, changes); if (changes > 0) { payable(msg.sender).transfer(changes); } } function runRaffle(uint256 _raffleNumber) external onlyOwner { require(raffleNumber == 0, "raffle number is already set"); raffleNumber = _raffleNumber; uint256 remainingURS = maxURS - preMintedURS - newlyMintedURSWithPass; // Hopefully consider that totalTickets number is more than remainingURS // Actually this number can be controlled from team by taking tickets slotSize = totalTickets / remainingURS; offsetInSlot = _raffleNumber % slotSize; lastTargetIndex = slotSize * remainingURS - 1; emit RunRaffle(_raffleNumber); } function calculateValidTicketAmount( uint256 index, uint256 amount, uint256 _slotSize, uint256 _offsetInSlot, uint256 _lastTargetIndex ) internal pure returns (uint256 validTicketAmount) { /** /_____fio___\___________________________________/lio\___________ v f | v | v | l v | ______slot #n__|___slot #n+1___|____slot #n+2__|____slot #n+3__| f : first index (incl.) l : last index (incl.) v : win ticket fio : first index offset lio : last index offset n, n+1,... : slot index v in (slot #n+1) is ths firstWinIndex v in (slot #n+2) is ths lastWinIndex */ uint256 lastIndex = index + amount - 1; // incl. if (lastIndex > _lastTargetIndex) { lastIndex = _lastTargetIndex; } uint256 firstIndexOffset = index % _slotSize; uint256 lastIndexOffset = lastIndex % _slotSize; uint256 firstWinIndex; if (firstIndexOffset <= _offsetInSlot) { firstWinIndex = index + _offsetInSlot - firstIndexOffset; } else { firstWinIndex = index + _slotSize + _offsetInSlot - firstIndexOffset; } // Nothing is selected if (firstWinIndex > _lastTargetIndex) { validTicketAmount = 0; } else { uint256 lastWinIndex; if (lastIndexOffset >= _offsetInSlot) { lastWinIndex = lastIndex + _offsetInSlot - lastIndexOffset; } else if (lastIndex < _slotSize) { lastWinIndex = 0; } else { lastWinIndex = lastIndex + _offsetInSlot - lastIndexOffset - _slotSize; } if (firstWinIndex > lastWinIndex) { validTicketAmount = 0; } else { validTicketAmount = (lastWinIndex - firstWinIndex) / _slotSize + 1; } } } function calculateMyResult() external { require(raffleNumber > 0, "raffle number is not set yet"); ticket storage myTicket = ticketsOf[msg.sender]; require(myTicket.amount > 0, "No available ticket"); result storage myResult = resultOf[msg.sender]; require(!myResult.executed, "Already checked"); uint256 validTicketAmount = calculateValidTicketAmount( myTicket.index, myTicket.amount, slotSize, offsetInSlot, lastTargetIndex ); myResult.validTicketAmount = validTicketAmount; myResult.executed = true; uint256 remainingTickets = myTicket.amount - validTicketAmount; uint256 changes = remainingTickets * ticketPrice; emit SetResult(msg.sender, validTicketAmount, changes); if (changes > 0) { payable(msg.sender).transfer(changes); } } function mintURS() external { result storage myResult = resultOf[msg.sender]; require(myResult.executed, "result is not calculated yet"); require(myResult.validTicketAmount > 0, "No valid tickets"); uint256 mintRequestAmount = 0; if (myResult.validTicketAmount > maxMintPerTx) { mintRequestAmount = maxMintPerTx; myResult.validTicketAmount -= maxMintPerTx; } else { mintRequestAmount = myResult.validTicketAmount; myResult.validTicketAmount = 0; } for (uint256 i = 0; i < mintRequestAmount; i += 1) { ursFactory.mint(msg.sender); } emit MintURS(msg.sender, mintRequestAmount); } // withdraw eth for sold URS function withdraw(address payable _to) external onlyOwner { require(_to != address(0), "receiver can not be empty address"); require(!claimed, "Already claimed"); require( maxURS - maxPreMintURS <= totalTickets + newlyMintedURSWithPass, "Not enough ethers are collected" ); uint256 withdrawalAmount = ticketPrice * (maxURS - maxPreMintURS); // Send eth to designated receiver emit Withdraw(_to); claimed = true; _to.transfer(withdrawalAmount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// 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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintRequestAmount","type":"uint256"}],"name":"MintURS","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"changes","type":"uint256"}],"name":"MintWithPass","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"raffleNumber","type":"uint256"}],"name":"RunRaffle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"openingHours","type":"uint256"}],"name":"SetOpeningHours","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"validTicketAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"changes","type":"uint256"}],"name":"SetResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"changes","type":"uint256"}],"name":"TakingTickets","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"calculateMyResult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastTargetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPreMintURS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxURS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxURSPerPass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintURS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintWithPass","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedURSOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newlyMintedURSWithPass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"offsetInSlot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openingHours","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationSecondsForVIP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pass","outputs":[{"internalType":"contract Pass","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"preMintURS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"preMintedURS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"resultOf","outputs":[{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"validTicketAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleNumber","type":"uint256"}],"name":"runRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_openingHours","type":"uint256"}],"name":"setOpeningHours","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slotSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"takingTickets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ticketPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ticketsOf","outputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTickets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ursFactory","outputs":[{"internalType":"contract Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000805460ff60a01b191681556001819055600281905563613bf18060045560055534801561003257600080fd5b5061003c33610041565b610091565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6119ad806100a06000396000f3fe6080604052600436106101d85760003560e01c8063969f017211610102578063e56d3db811610095578063f23e1fd211610064578063f23e1fd21461052d578063f26d311714610542578063f2fde38b14610557578063fd23492a1461057757600080fd5b8063e56d3db8146104c4578063ee69ef92146104d9578063f09703ca14610501578063f1dbc1c61461051757600080fd5b8063dd11247e116100d1578063dd11247e1461046d578063de7fcb1d14610483578063e01dca9c14610498578063e06699ad146104ae57600080fd5b8063969f0172146103fc578063a7a1ed7214610412578063c041de1f1461043a578063d17aade41461044d57600080fd5b80634fdecd251161017a578063628a0cf811610149578063628a0cf814610372578063715018a614610388578063857b79161461039d5780638da5cb5b146103ca57600080fd5b80634fdecd25146102d557806351cff8d9146102eb5780635609cc4c1461030b578063623c40471461032157600080fd5b80631d527dc3116101b65780631d527dc3146102375780631f322afe14610257578063316579261461026c5780633f91da31146102b557600080fd5b80630e696ece146101dd5780631209b1f6146101f257806313b228ec14610221575b600080fd5b6101f06101eb3660046117e9565b61058e565b005b3480156101fe57600080fd5b5061020e67011c37937e08000081565b6040519081526020015b60405180910390f35b34801561022d57600080fd5b5061020e60045481565b34801561024357600080fd5b506101f06102523660046117e9565b6107ec565b34801561026357600080fd5b5061020e603281565b34801561027857600080fd5b506102a06102873660046116ff565b6006602052600090815260409020805460019091015482565b60408051928352602083019190915201610218565b3480156102c157600080fd5b506101f06102d03660046117e9565b610903565b3480156102e157600080fd5b5061020e61271081565b3480156102f757600080fd5b506101f06103063660046116ff565b610968565b34801561031757600080fd5b5061020e60025481565b34801561032d57600080fd5b5061035b61033c3660046116ff565b600b602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610218565b34801561037e57600080fd5b5061020e60095481565b34801561039457600080fd5b506101f0610b1b565b3480156103a957600080fd5b5061020e6103b83660046116ff565b60036020526000908152604090205481565b3480156103d657600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610218565b34801561040857600080fd5b5061020e617e9081565b34801561041e57600080fd5b506103e473e0e19aa07cb819664001adffea6a176a7589789981565b6101f06104483660046117e9565b610b51565b34801561045957600080fd5b506101f0610468366004611722565b610f2e565b34801561047957600080fd5b5061020e60055481565b34801561048f57600080fd5b5061020e601e81565b3480156104a457600080fd5b5061020e60085481565b3480156104ba57600080fd5b5061020e60015481565b3480156104d057600080fd5b506101f0611198565b3480156104e557600080fd5b506103e47308f0b2a4351514e63e9e03a661adfe58d463cfbc81565b34801561050d57600080fd5b5061020e60075481565b34801561052357600080fd5b5061020e600a5481565b34801561053957600080fd5b506101f0611339565b34801561054e57600080fd5b5061020e600581565b34801561056357600080fd5b506101f06105723660046116ff565b6114ce565b34801561058357600080fd5b5061020e6201518081565b617e9060045461059e919061188f565b4210156105e85760405162461bcd60e51b815260206004820152601360248201527214dd1bdc99481a5cc81b9bdd081bdc195b9959606a1b60448201526064015b60405180910390fd5b62015180617e906004546105fc919061188f565b610606919061188f565b42106106465760405162461bcd60e51b815260206004820152600f60248201526e14dd1bdc99481a5cc818db1bdcd959608a1b60448201526064016105df565b600081116106965760405162461bcd60e51b815260206004820152601f60248201527f4e65656420746f2074616b65207469636b6574206d6f7265207468616e20300060448201526064016105df565b3360009081526006602052604090206001810154156106ec5760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064016105df565b60006107008367011c37937e0800006118bb565b9050348111156107455760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f756768206d6f6e657960801b60448201526064016105df565b600580548355600183018490555461075e90849061188f565b600555600061076d82346118da565b60408051338152602081018790529081018290529091507f6192e5b79064affb67b5a129ebac18695dbad1247983304d927ebc3800ffe8959060600160405180910390a180156107e657604051339082156108fc029083906000818181858888f193505050501580156107e4573d6000803e3d6000fd5b505b50505050565b6000546001600160a01b031633146108165760405162461bcd60e51b81526004016105df90611819565b600754156108665760405162461bcd60e51b815260206004820152601c60248201527f726166666c65206e756d62657220697320616c7265616479207365740000000060448201526064016105df565b600781905560025460015460009190610881906127106118da565b61088b91906118da565b90508060055461089b91906118a7565b60098190556108aa908361190c565b6008556009546001906108be9083906118bb565b6108c891906118da565b600a556040518281527ff4293f5394ce7317abe45cfb7dae5a7e2f8c7efeaae1022b2667da672a88708a906020015b60405180910390a15050565b6000546001600160a01b0316331461092d5760405162461bcd60e51b81526004016105df90611819565b60048190556040518181527f370ed5694aff8260b2113acb4c27c8f7e4e4576e89d9dc173a696c70228eda579060200160405180910390a150565b6000546001600160a01b031633146109925760405162461bcd60e51b81526004016105df90611819565b6001600160a01b0381166109b85760405162461bcd60e51b81526004016105df9061184e565b600054600160a01b900460ff1615610a045760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b60448201526064016105df565b600254600554610a14919061188f565b610a2160326127106118da565b1115610a6f5760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f756768206574686572732061726520636f6c6c65637465640060448201526064016105df565b6000610a7e60326127106118da565b610a909067011c37937e0800006118bb565b6040516001600160a01b03841681529091507ff67611512e0a2d90c96fd3f08dca4971bc45fba9dc679eabe839a32abbe58a8e9060200160405180910390a16000805460ff60a01b1916600160a01b1781556040516001600160a01b0384169183156108fc02918491818181858888f19350505050158015610b16573d6000803e3d6000fd5b505050565b6000546001600160a01b03163314610b455760405162461bcd60e51b81526004016105df90611819565b610b4f6000611569565b565b600454421015610ba35760405162461bcd60e51b815260206004820152601b60248201527f53746f7265206973206e6f74206f70656e656420666f7220564950000000000060448201526064016105df565b617e90600454610bb3919061188f565b4210610c015760405162461bcd60e51b815260206004820152601760248201527f53746f726520697320636c6f73656420666f722056495000000000000000000060448201526064016105df565b601e811115610c525760405162461bcd60e51b815260206004820152601b60248201527f6d696e7420616d6f756e742065786365656473206d6178696d756d000000000060448201526064016105df565b60008111610ca25760405162461bcd60e51b815260206004820152601860248201527f4e65656420746f206d696e74206d6f7265207468616e2030000000000000000060448201526064016105df565b336000818152600360205260408082205490516370a0823160e01b815260048101939093529173e0e19aa07cb819664001adffea6a176a75897899906370a082319060240160206040518083038186803b158015610cff57600080fd5b505afa158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d379190611801565b90508282610d466005846118bb565b610d5091906118da565b1015610d905760405162461bcd60e51b815260206004820152600f60248201526e4e6f7420656e6f756768205061737360881b60448201526064016105df565b6000610da48467011c37937e0800006118bb565b905034811115610de95760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f756768206d6f6e657960801b60448201526064016105df565b60005b84811015610e6c576040516335313c2160e11b81523360048201527308f0b2a4351514e63e9e03a661adfe58d463cfbc90636a62784290602401600060405180830381600087803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b50505050600181610e65919061188f565b9050610dec565b50610e77848461188f565b3360009081526003602052604081209190915560028054869290610e9c90849061188f565b9091555060009050610eae82346118da565b60408051338152602081018890529081018290529091507f3fb7239d51fdc92f75bd949133afbe9bd5bce32e3b263c054fd238ef0f9a229f906060015b60405180910390a180156107e457604051339082156108fc029083906000818181858888f19350505050158015610f26573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f585760405162461bcd60e51b81526004016105df90611819565b62015180617e90600454610f6c919061188f565b610f76919061188f565b4210610fd05760405162461bcd60e51b8152602060048201526024808201527f4e6f7420617661696c61626c65206166746572207469636b6574696e672070656044820152631c9a5bd960e21b60648201526084016105df565b8051806110335760405162461bcd60e51b815260206004820152602b60248201527f4e756d626572206f6620726563697069656e7473206d7573742062652067726560448201526a061746572207468616e20360ac1b60648201526084016105df565b603281600154611043919061188f565b11156110915760405162461bcd60e51b815260206004820152601860248201527f45786365656473206d6178207072652d6d696e7420555253000000000000000060448201526064016105df565b60005b8181101561117c5760008382815181106110be57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006001600160a01b0316816001600160a01b031614156110fb5760405162461bcd60e51b81526004016105df9061184e565b6040516335313c2160e11b81526001600160a01b03821660048201527308f0b2a4351514e63e9e03a661adfe58d463cfbc90636a62784290602401600060405180830381600087803b15801561115057600080fd5b505af1158015611164573d6000803e3d6000fd5b50505050508080611174906118f1565b915050611094565b50806001600082825461118f919061188f565b90915550505050565b336000908152600b60205260409020805460ff166111f85760405162461bcd60e51b815260206004820152601c60248201527f726573756c74206973206e6f742063616c63756c61746564207965740000000060448201526064016105df565b600081600101541161123f5760405162461bcd60e51b815260206004820152601060248201526f4e6f2076616c6964207469636b65747360801b60448201526064016105df565b6000601e8260010154111561127257601e9050601e82600101600082825461126791906118da565b9091555061127f9050565b5060018101805460009091555b60005b81811015611302576040516335313c2160e11b81523360048201527308f0b2a4351514e63e9e03a661adfe58d463cfbc90636a62784290602401600060405180830381600087803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b505050506001816112fb919061188f565b9050611282565b5060408051338152602081018390527f5406fee47ca53ab04296dd8fe26d8ad9e7fd708c0d92db6f68d01664f264d84e91016108f7565b60006007541161138b5760405162461bcd60e51b815260206004820152601c60248201527f726166666c65206e756d626572206973206e6f7420736574207965740000000060448201526064016105df565b33600090815260066020526040902060018101546113e15760405162461bcd60e51b8152602060048201526013602482015272139bc8185d985a5b18589b19481d1a58dad95d606a1b60448201526064016105df565b336000908152600b60205260409020805460ff16156114345760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818da1958dad959608a1b60448201526064016105df565b600061145183600001548460010154600954600854600a546115b9565b6001808401829055835460ff1916811784558401549091506000906114779083906118da565b9050600061148d67011c37937e080000836118bb565b60408051338152602081018690529081018290529091507f99257e7b73feb32ca1b0836474e4150fd92fa32d0ec98657c263864188e42bb490606001610eeb565b6000546001600160a01b031633146114f85760405162461bcd60e51b81526004016105df90611819565b6001600160a01b03811661155d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105df565b61156681611569565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060016115c8878961188f565b6115d291906118da565b9050828111156115df5750815b60006115eb868961190c565b905060006115f9878461190c565b90506000868311611620578261160f888c61188f565b61161991906118da565b9050611643565b828761162c8a8d61188f565b611636919061188f565b61164091906118da565b90505b8581111561165457600094506116e2565b60008783106116795782611668898761188f565b61167291906118da565b90506116ac565b88851015611689575060006116ac565b88836116958a8861188f565b61169f91906118da565b6116a991906118da565b90505b808211156116bd57600095506116e0565b886116c883836118da565b6116d291906118a7565b6116dd90600161188f565b95505b505b5050505095945050505050565b80356116fa81611962565b919050565b600060208284031215611710578081fd5b813561171b81611962565b9392505050565b60006020808385031215611734578182fd5b823567ffffffffffffffff8082111561174b578384fd5b818501915085601f83011261175e578384fd5b8135818111156117705761177061194c565b8060051b604051601f19603f830116810181811085821117156117955761179561194c565b604052828152858101935084860182860187018a10156117b3578788fd5b8795505b838610156117dc576117c8816116ef565b8552600195909501949386019386016117b7565b5098975050505050505050565b6000602082840312156117fa578081fd5b5035919050565b600060208284031215611812578081fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f72656365697665722063616e206e6f7420626520656d707479206164647265736040820152607360f81b606082015260800190565b600082198211156118a2576118a2611920565b500190565b6000826118b6576118b6611936565b500490565b60008160001904831182151516156118d5576118d5611920565b500290565b6000828210156118ec576118ec611920565b500390565b600060001982141561190557611905611920565b5060010190565b60008261191b5761191b611936565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461156657600080fdfea2646970667358221220f7c9aa7913f9f613382ab4e3dca873a1a41f766c96b4c5433b9d5893f6bffe2064736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101d85760003560e01c8063969f017211610102578063e56d3db811610095578063f23e1fd211610064578063f23e1fd21461052d578063f26d311714610542578063f2fde38b14610557578063fd23492a1461057757600080fd5b8063e56d3db8146104c4578063ee69ef92146104d9578063f09703ca14610501578063f1dbc1c61461051757600080fd5b8063dd11247e116100d1578063dd11247e1461046d578063de7fcb1d14610483578063e01dca9c14610498578063e06699ad146104ae57600080fd5b8063969f0172146103fc578063a7a1ed7214610412578063c041de1f1461043a578063d17aade41461044d57600080fd5b80634fdecd251161017a578063628a0cf811610149578063628a0cf814610372578063715018a614610388578063857b79161461039d5780638da5cb5b146103ca57600080fd5b80634fdecd25146102d557806351cff8d9146102eb5780635609cc4c1461030b578063623c40471461032157600080fd5b80631d527dc3116101b65780631d527dc3146102375780631f322afe14610257578063316579261461026c5780633f91da31146102b557600080fd5b80630e696ece146101dd5780631209b1f6146101f257806313b228ec14610221575b600080fd5b6101f06101eb3660046117e9565b61058e565b005b3480156101fe57600080fd5b5061020e67011c37937e08000081565b6040519081526020015b60405180910390f35b34801561022d57600080fd5b5061020e60045481565b34801561024357600080fd5b506101f06102523660046117e9565b6107ec565b34801561026357600080fd5b5061020e603281565b34801561027857600080fd5b506102a06102873660046116ff565b6006602052600090815260409020805460019091015482565b60408051928352602083019190915201610218565b3480156102c157600080fd5b506101f06102d03660046117e9565b610903565b3480156102e157600080fd5b5061020e61271081565b3480156102f757600080fd5b506101f06103063660046116ff565b610968565b34801561031757600080fd5b5061020e60025481565b34801561032d57600080fd5b5061035b61033c3660046116ff565b600b602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610218565b34801561037e57600080fd5b5061020e60095481565b34801561039457600080fd5b506101f0610b1b565b3480156103a957600080fd5b5061020e6103b83660046116ff565b60036020526000908152604090205481565b3480156103d657600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610218565b34801561040857600080fd5b5061020e617e9081565b34801561041e57600080fd5b506103e473e0e19aa07cb819664001adffea6a176a7589789981565b6101f06104483660046117e9565b610b51565b34801561045957600080fd5b506101f0610468366004611722565b610f2e565b34801561047957600080fd5b5061020e60055481565b34801561048f57600080fd5b5061020e601e81565b3480156104a457600080fd5b5061020e60085481565b3480156104ba57600080fd5b5061020e60015481565b3480156104d057600080fd5b506101f0611198565b3480156104e557600080fd5b506103e47308f0b2a4351514e63e9e03a661adfe58d463cfbc81565b34801561050d57600080fd5b5061020e60075481565b34801561052357600080fd5b5061020e600a5481565b34801561053957600080fd5b506101f0611339565b34801561054e57600080fd5b5061020e600581565b34801561056357600080fd5b506101f06105723660046116ff565b6114ce565b34801561058357600080fd5b5061020e6201518081565b617e9060045461059e919061188f565b4210156105e85760405162461bcd60e51b815260206004820152601360248201527214dd1bdc99481a5cc81b9bdd081bdc195b9959606a1b60448201526064015b60405180910390fd5b62015180617e906004546105fc919061188f565b610606919061188f565b42106106465760405162461bcd60e51b815260206004820152600f60248201526e14dd1bdc99481a5cc818db1bdcd959608a1b60448201526064016105df565b600081116106965760405162461bcd60e51b815260206004820152601f60248201527f4e65656420746f2074616b65207469636b6574206d6f7265207468616e20300060448201526064016105df565b3360009081526006602052604090206001810154156106ec5760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064016105df565b60006107008367011c37937e0800006118bb565b9050348111156107455760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f756768206d6f6e657960801b60448201526064016105df565b600580548355600183018490555461075e90849061188f565b600555600061076d82346118da565b60408051338152602081018790529081018290529091507f6192e5b79064affb67b5a129ebac18695dbad1247983304d927ebc3800ffe8959060600160405180910390a180156107e657604051339082156108fc029083906000818181858888f193505050501580156107e4573d6000803e3d6000fd5b505b50505050565b6000546001600160a01b031633146108165760405162461bcd60e51b81526004016105df90611819565b600754156108665760405162461bcd60e51b815260206004820152601c60248201527f726166666c65206e756d62657220697320616c7265616479207365740000000060448201526064016105df565b600781905560025460015460009190610881906127106118da565b61088b91906118da565b90508060055461089b91906118a7565b60098190556108aa908361190c565b6008556009546001906108be9083906118bb565b6108c891906118da565b600a556040518281527ff4293f5394ce7317abe45cfb7dae5a7e2f8c7efeaae1022b2667da672a88708a906020015b60405180910390a15050565b6000546001600160a01b0316331461092d5760405162461bcd60e51b81526004016105df90611819565b60048190556040518181527f370ed5694aff8260b2113acb4c27c8f7e4e4576e89d9dc173a696c70228eda579060200160405180910390a150565b6000546001600160a01b031633146109925760405162461bcd60e51b81526004016105df90611819565b6001600160a01b0381166109b85760405162461bcd60e51b81526004016105df9061184e565b600054600160a01b900460ff1615610a045760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b60448201526064016105df565b600254600554610a14919061188f565b610a2160326127106118da565b1115610a6f5760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f756768206574686572732061726520636f6c6c65637465640060448201526064016105df565b6000610a7e60326127106118da565b610a909067011c37937e0800006118bb565b6040516001600160a01b03841681529091507ff67611512e0a2d90c96fd3f08dca4971bc45fba9dc679eabe839a32abbe58a8e9060200160405180910390a16000805460ff60a01b1916600160a01b1781556040516001600160a01b0384169183156108fc02918491818181858888f19350505050158015610b16573d6000803e3d6000fd5b505050565b6000546001600160a01b03163314610b455760405162461bcd60e51b81526004016105df90611819565b610b4f6000611569565b565b600454421015610ba35760405162461bcd60e51b815260206004820152601b60248201527f53746f7265206973206e6f74206f70656e656420666f7220564950000000000060448201526064016105df565b617e90600454610bb3919061188f565b4210610c015760405162461bcd60e51b815260206004820152601760248201527f53746f726520697320636c6f73656420666f722056495000000000000000000060448201526064016105df565b601e811115610c525760405162461bcd60e51b815260206004820152601b60248201527f6d696e7420616d6f756e742065786365656473206d6178696d756d000000000060448201526064016105df565b60008111610ca25760405162461bcd60e51b815260206004820152601860248201527f4e65656420746f206d696e74206d6f7265207468616e2030000000000000000060448201526064016105df565b336000818152600360205260408082205490516370a0823160e01b815260048101939093529173e0e19aa07cb819664001adffea6a176a75897899906370a082319060240160206040518083038186803b158015610cff57600080fd5b505afa158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d379190611801565b90508282610d466005846118bb565b610d5091906118da565b1015610d905760405162461bcd60e51b815260206004820152600f60248201526e4e6f7420656e6f756768205061737360881b60448201526064016105df565b6000610da48467011c37937e0800006118bb565b905034811115610de95760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f756768206d6f6e657960801b60448201526064016105df565b60005b84811015610e6c576040516335313c2160e11b81523360048201527308f0b2a4351514e63e9e03a661adfe58d463cfbc90636a62784290602401600060405180830381600087803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b50505050600181610e65919061188f565b9050610dec565b50610e77848461188f565b3360009081526003602052604081209190915560028054869290610e9c90849061188f565b9091555060009050610eae82346118da565b60408051338152602081018890529081018290529091507f3fb7239d51fdc92f75bd949133afbe9bd5bce32e3b263c054fd238ef0f9a229f906060015b60405180910390a180156107e457604051339082156108fc029083906000818181858888f19350505050158015610f26573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f585760405162461bcd60e51b81526004016105df90611819565b62015180617e90600454610f6c919061188f565b610f76919061188f565b4210610fd05760405162461bcd60e51b8152602060048201526024808201527f4e6f7420617661696c61626c65206166746572207469636b6574696e672070656044820152631c9a5bd960e21b60648201526084016105df565b8051806110335760405162461bcd60e51b815260206004820152602b60248201527f4e756d626572206f6620726563697069656e7473206d7573742062652067726560448201526a061746572207468616e20360ac1b60648201526084016105df565b603281600154611043919061188f565b11156110915760405162461bcd60e51b815260206004820152601860248201527f45786365656473206d6178207072652d6d696e7420555253000000000000000060448201526064016105df565b60005b8181101561117c5760008382815181106110be57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006001600160a01b0316816001600160a01b031614156110fb5760405162461bcd60e51b81526004016105df9061184e565b6040516335313c2160e11b81526001600160a01b03821660048201527308f0b2a4351514e63e9e03a661adfe58d463cfbc90636a62784290602401600060405180830381600087803b15801561115057600080fd5b505af1158015611164573d6000803e3d6000fd5b50505050508080611174906118f1565b915050611094565b50806001600082825461118f919061188f565b90915550505050565b336000908152600b60205260409020805460ff166111f85760405162461bcd60e51b815260206004820152601c60248201527f726573756c74206973206e6f742063616c63756c61746564207965740000000060448201526064016105df565b600081600101541161123f5760405162461bcd60e51b815260206004820152601060248201526f4e6f2076616c6964207469636b65747360801b60448201526064016105df565b6000601e8260010154111561127257601e9050601e82600101600082825461126791906118da565b9091555061127f9050565b5060018101805460009091555b60005b81811015611302576040516335313c2160e11b81523360048201527308f0b2a4351514e63e9e03a661adfe58d463cfbc90636a62784290602401600060405180830381600087803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b505050506001816112fb919061188f565b9050611282565b5060408051338152602081018390527f5406fee47ca53ab04296dd8fe26d8ad9e7fd708c0d92db6f68d01664f264d84e91016108f7565b60006007541161138b5760405162461bcd60e51b815260206004820152601c60248201527f726166666c65206e756d626572206973206e6f7420736574207965740000000060448201526064016105df565b33600090815260066020526040902060018101546113e15760405162461bcd60e51b8152602060048201526013602482015272139bc8185d985a5b18589b19481d1a58dad95d606a1b60448201526064016105df565b336000908152600b60205260409020805460ff16156114345760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818da1958dad959608a1b60448201526064016105df565b600061145183600001548460010154600954600854600a546115b9565b6001808401829055835460ff1916811784558401549091506000906114779083906118da565b9050600061148d67011c37937e080000836118bb565b60408051338152602081018690529081018290529091507f99257e7b73feb32ca1b0836474e4150fd92fa32d0ec98657c263864188e42bb490606001610eeb565b6000546001600160a01b031633146114f85760405162461bcd60e51b81526004016105df90611819565b6001600160a01b03811661155d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105df565b61156681611569565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060016115c8878961188f565b6115d291906118da565b9050828111156115df5750815b60006115eb868961190c565b905060006115f9878461190c565b90506000868311611620578261160f888c61188f565b61161991906118da565b9050611643565b828761162c8a8d61188f565b611636919061188f565b61164091906118da565b90505b8581111561165457600094506116e2565b60008783106116795782611668898761188f565b61167291906118da565b90506116ac565b88851015611689575060006116ac565b88836116958a8861188f565b61169f91906118da565b6116a991906118da565b90505b808211156116bd57600095506116e0565b886116c883836118da565b6116d291906118a7565b6116dd90600161188f565b95505b505b5050505095945050505050565b80356116fa81611962565b919050565b600060208284031215611710578081fd5b813561171b81611962565b9392505050565b60006020808385031215611734578182fd5b823567ffffffffffffffff8082111561174b578384fd5b818501915085601f83011261175e578384fd5b8135818111156117705761177061194c565b8060051b604051601f19603f830116810181811085821117156117955761179561194c565b604052828152858101935084860182860187018a10156117b3578788fd5b8795505b838610156117dc576117c8816116ef565b8552600195909501949386019386016117b7565b5098975050505050505050565b6000602082840312156117fa578081fd5b5035919050565b600060208284031215611812578081fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f72656365697665722063616e206e6f7420626520656d707479206164647265736040820152607360f81b606082015260800190565b600082198211156118a2576118a2611920565b500190565b6000826118b6576118b6611936565b500490565b60008160001904831182151516156118d5576118d5611920565b500290565b6000828210156118ec576118ec611920565b500390565b600060001982141561190557611905611920565b5060010190565b60008261191b5761191b611936565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461156657600080fdfea2646970667358221220f7c9aa7913f9f613382ab4e3dca873a1a41f766c96b4c5433b9d5893f6bffe2064736f6c63430008040033
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.