More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 243 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Paused | 15582621 | 776 days ago | IN | 0 ETH | 0.0005286 | ||||
Create Listing | 15582570 | 776 days ago | IN | 0 ETH | 0.00329012 | ||||
Create Listing | 15582485 | 776 days ago | IN | 0 ETH | 0.00155074 | ||||
Create Listing | 15582472 | 776 days ago | IN | 0 ETH | 0.001795 | ||||
Claim Refund On ... | 15582330 | 776 days ago | IN | 0 ETH | 0.0012709 | ||||
Create Listing | 15582284 | 776 days ago | IN | 0 ETH | 0.00125092 | ||||
Claim Refund On ... | 15582116 | 776 days ago | IN | 0 ETH | 0.00085571 | ||||
Create Listing | 15582097 | 776 days ago | IN | 0 ETH | 0.00119802 | ||||
Create Listing | 15582095 | 776 days ago | IN | 0 ETH | 0.00142295 | ||||
Claim Refund On ... | 15582077 | 776 days ago | IN | 0 ETH | 0.00070918 | ||||
Claim Refund On ... | 15582069 | 776 days ago | IN | 0 ETH | 0.00077552 | ||||
Claim Refund On ... | 15582063 | 776 days ago | IN | 0 ETH | 0.00071633 | ||||
Claim Refund On ... | 15582035 | 776 days ago | IN | 0 ETH | 0.00084049 | ||||
Create Listing | 15581809 | 776 days ago | IN | 0 ETH | 0.00104514 | ||||
Claim Refund On ... | 15581772 | 776 days ago | IN | 0 ETH | 0.00046918 | ||||
Create Listing | 15581686 | 776 days ago | IN | 0 ETH | 0.00125434 | ||||
Create Listing | 15581400 | 776 days ago | IN | 0 ETH | 0.00089556 | ||||
Claim Refund On ... | 15581389 | 776 days ago | IN | 0 ETH | 0.00063894 | ||||
Accept Offer | 15581371 | 776 days ago | IN | 0 ETH | 0.00086178 | ||||
Create Offer | 15581368 | 776 days ago | IN | 0.03 ETH | 0.00132114 | ||||
Create Listing | 15581339 | 776 days ago | IN | 0 ETH | 0.00064365 | ||||
Accept Offer | 15581332 | 776 days ago | IN | 0 ETH | 0.00050145 | ||||
Claim Refund On ... | 15581325 | 776 days ago | IN | 0 ETH | 0.0004165 | ||||
Claim Refund On ... | 15581324 | 776 days ago | IN | 0 ETH | 0.00040511 | ||||
Create Offer | 15581321 | 776 days ago | IN | 0.03 ETH | 0.00089142 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15581371 | 776 days ago | 0.0285 ETH | ||||
15581371 | 776 days ago | 0.0015 ETH | ||||
15581332 | 776 days ago | 0.0285 ETH | ||||
15581332 | 776 days ago | 0.0015 ETH | ||||
15581262 | 776 days ago | 0.0285 ETH | ||||
15581262 | 776 days ago | 0.0015 ETH | ||||
15581185 | 776 days ago | 0.0285 ETH | ||||
15581185 | 776 days ago | 0.0015 ETH | ||||
15581130 | 776 days ago | 0.0285 ETH | ||||
15581130 | 776 days ago | 0.0015 ETH | ||||
15581109 | 776 days ago | 0.0285 ETH | ||||
15581109 | 776 days ago | 0.0015 ETH | ||||
15581050 | 776 days ago | 0.0285 ETH | ||||
15581050 | 776 days ago | 0.0015 ETH | ||||
15581025 | 776 days ago | 0.0285 ETH | ||||
15581025 | 776 days ago | 0.0015 ETH | ||||
15581003 | 776 days ago | 0.0285 ETH | ||||
15581003 | 776 days ago | 0.0015 ETH | ||||
15580957 | 776 days ago | 0.0285 ETH | ||||
15580957 | 776 days ago | 0.0015 ETH | ||||
15580941 | 776 days ago | 0.0285 ETH | ||||
15580941 | 776 days ago | 0.0015 ETH | ||||
15580929 | 776 days ago | 0.0285 ETH | ||||
15580929 | 776 days ago | 0.0015 ETH | ||||
15580903 | 776 days ago | 0.0285 ETH |
Loading...
Loading
Contract Name:
TopiaPeerExchange
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.16; import '@openzeppelin/contracts/security/ReentrancyGuard.sol'; import '@openzeppelin/contracts/access/Ownable.sol'; import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; import './interfaces/INFT.sol'; import './interfaces/IHUB.sol'; import './interfaces/IWETH.sol'; import './interfaces/IPYESwapRouter.sol'; contract TopiaPeerExchange is ReentrancyGuard, Ownable { using SafeERC20 for IERC20; // The Metatopia ERC721 token contracts INFT public GENESIS; INFT public ALPHA; INFT public RATS; // The address of the HUB contract IHUB public HUB; // The address of the WETH contract address public WETH; // The address of the TOPIA contract IERC20 public TOPIA; IPYESwapRouter public pyeSwapRouter; // The minimum percentage difference between the last offer amount and the current offer uint16 public minOfferIncrementPercentage; // The minimum listing and offer variables uint256 private manualMinListPrice; bool private useManualMinListPrice; uint16 private minListPercent; uint16 public minOfferPercent; // Restriction Bools bool public isPaused; bool public allListersAllowed = true; bool public allBuyersAllowed = true; bool public allOfferersAllowed = true; // The listing info struct Listing { // The address of the Lister address payable lister; // The time that the listing started uint32 startTime; // The time that the listing is scheduled to end uint32 endTime; // The current highest offer amount uint256 topiaAmount; // The Requested ETH for the listing uint256 requestedEth; // The current offer below the requested ETH amount uint256 currentOffer; // The previous offer uint256 previousOffer; // The active offerId uint32 activeOfferId; // The address of the current highest offer address payable offerer; // The number of offers placed uint16 numberOffers; // The statuses of the listing bool settled; bool canceled; bool failed; } mapping(uint32 => Listing) public listingId; uint32 private currentId = 1; uint32 private currentOfferId = 1; mapping(uint32 => uint32[]) public allListingOfferIds; struct Offers { address offerer; uint8 offerStatus; // 1 = active, 2 = outoffer, 3 = canceled, 4 = accepted uint32 listingId; uint256 offerAmount; } mapping(uint32 => Offers) public offerId; mapping(address => uint32[]) userOffers; uint32 public activeListingCount; uint16 public tax; address payable public taxWallet; modifier holdsNFTLister() { require(allListersAllowed || HUB.balanceOf(msg.sender) > 0 || GENESIS.balanceOf(msg.sender) > 0 || ALPHA.balanceOf(msg.sender) > 0 || RATS.balanceOf(msg.sender) > 0, "Must hold a Metatopia NFT"); _; } modifier holdsNFTBuyer() { require(allBuyersAllowed || HUB.balanceOf(msg.sender) > 0 || GENESIS.balanceOf(msg.sender) > 0 || ALPHA.balanceOf(msg.sender) > 0 || RATS.balanceOf(msg.sender) > 0, "Must hold a Metatopia NFT"); _; } modifier holdsNFTOfferer() { require(allOfferersAllowed || HUB.balanceOf(msg.sender) > 0 || GENESIS.balanceOf(msg.sender) > 0 || ALPHA.balanceOf(msg.sender) > 0 || RATS.balanceOf(msg.sender) > 0, "Must hold a Metatopia NFT"); _; } modifier notPaused() { require(!isPaused, "Contract is Paused to new listings"); _; } event ListingCreated(uint256 indexed ListingId, uint256 startTime, uint256 endTime, uint256 TopiaAmount, uint256 EthPrice); event ListingEdited(uint256 indexed ListingId, uint256 EthPrice, uint256 endTime); event OfferPlaced(uint256 indexed OfferId, uint256 indexed ListingId, address sender, uint256 value); event OfferCanceled(uint256 indexed OfferId, uint256 indexed ListingId, uint256 TimeStamp); event ListingSettled(uint256 indexed ListingId, address Buyer, address Seller, uint256 FinalAmount, uint256 TaxAmount, bool wasOffer, uint256 listedAmount); event ListingTimeBufferUpdated(uint256 timeBuffer); event ListingMinOfferIncrementPercentageUpdated(uint256 minOfferIncrementPercentage); event ListingRefunded(uint256 indexed ListingId, address Lister, uint256 TopiaRefundAmount, address Offerer, uint256 OffererRefundAmount, address Caller); event ListingCanceled(uint256 indexed ListingId, address Lister, uint256 TopiaAmount, uint256 TimeStamp); event Received(address indexed From, uint256 Amount); /** * @notice Initialize the listing house and base contracts, * populate configuration values, and pause the contract. * @dev This function can only be called once. */ constructor( address _topia, address _weth, address _genesis, address _alpha, address _rats, address _hub, address _router, uint16 _minOfferIncrementPercentage, uint256 _minListPrice, uint16 _minListPercent, uint16 _minOfferPercent, address payable _taxWallet, uint16 _tax ) { TOPIA = IERC20(_topia); WETH = _weth; GENESIS = INFT(_genesis); ALPHA = INFT(_alpha); RATS = INFT(_rats); HUB = IHUB(_hub); pyeSwapRouter = IPYESwapRouter(_router); minOfferIncrementPercentage = _minOfferIncrementPercentage; manualMinListPrice = _minListPrice; useManualMinListPrice = true; minListPercent = _minListPercent; minOfferPercent = _minOfferPercent; taxWallet = _taxWallet; tax = _tax; } /** * @notice Set the listing minimum offer increment percentage. * @dev Only callable by the owner. */ function setMinOfferIncrementPercentage(uint16 _minOfferIncrementPercentage) external onlyOwner { minOfferIncrementPercentage = _minOfferIncrementPercentage; emit ListingMinOfferIncrementPercentageUpdated(_minOfferIncrementPercentage); } function setPaused(bool _flag) external onlyOwner { isPaused = _flag; } function setListersAllowed(bool _flag) external onlyOwner { allListersAllowed = _flag; } function setBuyersAllowed(bool _flag) external onlyOwner { allBuyersAllowed = _flag; } function setOfferersAllowed(bool _flag) external onlyOwner { allOfferersAllowed = _flag; } function setRatsContract(address _rats) external onlyOwner { RATS = INFT(_rats); } function setHubContract(address _hub) external onlyOwner { HUB = IHUB(_hub); } function setTax(address payable _taxWallet, uint16 _tax) external onlyOwner { taxWallet = _taxWallet; tax = _tax; } function setMinListPrice(uint256 _minListPrice) external onlyOwner { manualMinListPrice = _minListPrice; } function setUseManualMinListPrice(bool _flag) external onlyOwner { useManualMinListPrice = _flag; } function setMinListPercent(uint16 _percent) external onlyOwner { minListPercent = _percent; } function setMinOfferPercent(uint16 _percent) external onlyOwner { minOfferPercent = _percent; } function createListing(uint256 _topiaAmount, uint256 _requestedEth, uint32 _endTime) external notPaused holdsNFTLister nonReentrant { require((_requestedEth * 10**9) / _topiaAmount >= minListPrice(), "Listing Price too low"); uint32 startTime = uint32(block.timestamp); uint32 _listingId = currentId++; listingId[_listingId].lister = payable(msg.sender); listingId[_listingId].topiaAmount = _topiaAmount; listingId[_listingId].requestedEth = _requestedEth; listingId[_listingId].startTime = startTime; listingId[_listingId].endTime = _endTime; activeListingCount++; TOPIA.safeTransferFrom(msg.sender, address(this), _topiaAmount); emit ListingCreated(_listingId, startTime, _endTime, _topiaAmount, _requestedEth); } function cancelListing(uint32 _id) external nonReentrant { require(msg.sender == listingId[_id].lister, "Only Lister can cancel"); require(listingStatus(_id) == 1, "Listing is not active"); listingId[_id].canceled = true; if(listingId[_id].offerer != address(0) && listingId[_id].currentOffer > 0) { _safeTransferETHWithFallback(listingId[_id].offerer, listingId[_id].currentOffer); listingId[_id].offerer = payable(address(0)); listingId[_id].currentOffer = 0; offerId[listingId[_id].activeOfferId].offerStatus = 3; } activeListingCount--; TOPIA.safeTransfer(listingId[_id].lister, listingId[_id].topiaAmount); emit ListingCanceled(_id, listingId[_id].lister, listingId[_id].topiaAmount, block.timestamp); emit ListingRefunded(_id, listingId[_id].lister, listingId[_id].topiaAmount, listingId[_id].offerer, listingId[_id].currentOffer, msg.sender); } function editListingPrice(uint32 _id, uint256 _requestedEth) external notPaused nonReentrant { require(msg.sender == listingId[_id].lister, "Only Lister can edit"); require(listingStatus(_id) == 1, "Listing is not active"); require((_requestedEth * 10**9) / listingId[_id].topiaAmount >= minListPrice(), "Listing Price too low"); require(_requestedEth > listingId[_id].currentOffer, "Has offer higher than new price"); listingId[_id].requestedEth = _requestedEth; emit ListingEdited(_id, _requestedEth, listingId[_id].endTime); } function editListingEndTime(uint32 _id, uint32 _newEndTime) external notPaused nonReentrant { require(msg.sender == listingId[_id].lister, "Only Lister can edit"); require(listingStatus(_id) == 1, "Listing is not active"); require(_newEndTime > block.timestamp, "End time already passed"); listingId[_id].endTime = _newEndTime; emit ListingEdited(_id, listingId[_id].requestedEth, _newEndTime); } /** * @notice Create a offer for TOPIA, with a given ETH amount. * @dev This contract only accepts payment in ETH. */ function createOffer(uint32 _id) external payable holdsNFTOfferer nonReentrant { require(listingStatus(_id) == 1, 'Topia Listing is not Active'); require(block.timestamp < listingId[_id].endTime, 'Listing expired'); require(msg.value <= listingId[_id].requestedEth, 'Must offer less than requestedEth'); require(msg.value >= listingId[_id].requestedEth * minOfferPercent / 10000, 'Must offer more than minimum offer amount'); require( msg.value >= listingId[_id].currentOffer + ((listingId[_id].currentOffer * minOfferIncrementPercentage) / 10000), 'Must send more than last offer by minOfferIncrementPercentage amount' ); require(msg.sender != listingId[_id].lister, 'Lister not allowed to Offer'); address payable lastOfferer = listingId[_id].offerer; uint32 _offerId = currentOfferId++; // Refund the last offerer, if applicable if (lastOfferer != address(0)) { _safeTransferETHWithFallback(lastOfferer, listingId[_id].currentOffer); offerId[listingId[_id].activeOfferId].offerStatus = 2; listingId[_id].previousOffer = listingId[_id].currentOffer; } listingId[_id].currentOffer = msg.value; listingId[_id].offerer = payable(msg.sender); listingId[_id].activeOfferId = _offerId; listingId[_id].numberOffers++; allListingOfferIds[_id].push(_offerId); offerId[_offerId].offerer = msg.sender; offerId[_offerId].offerAmount = msg.value; offerId[_offerId].listingId = _id; offerId[_offerId].offerStatus = 1; userOffers[msg.sender].push(_offerId); emit OfferPlaced(_offerId, _id, msg.sender, msg.value); } function cancelOffer(uint32 _id, uint32 _offerId) external nonReentrant { require(offerId[_offerId].offerer == msg.sender, "Caller is not Offerer"); require(offerId[_offerId].listingId == _id && listingId[_id].activeOfferId == _offerId, "IDs do not match"); require(listingStatus(_id) == 1, "Topia Listing is not Active"); require(offerId[_offerId].offerStatus == 1, "Offer is not active"); _safeTransferETHWithFallback(payable(msg.sender), offerId[_offerId].offerAmount); offerId[listingId[_id].activeOfferId].offerStatus = 3; listingId[_id].currentOffer = listingId[_id].previousOffer; listingId[_id].offerer = payable(address(0)); listingId[_id].activeOfferId = 0; emit OfferCanceled(_offerId, _id, block.timestamp); } /** * @notice Settle a listing to high offerer and paying out to the lister. */ function acceptOffer(uint32 _id) external nonReentrant { require(msg.sender == listingId[_id].lister, "Only Lister can accept offer"); require(listingStatus(_id) == 1, "Listing has already been settled or canceled"); require(block.timestamp <= listingId[_id].endTime, "Listing has expired"); require(listingId[_id].offerer != address(0), "No active Offerer"); require(offerId[listingId[_id].activeOfferId].offerStatus == 1, "Offer is not active"); listingId[_id].settled = true; activeListingCount--; uint256 taxAmount = listingId[_id].currentOffer * tax / 10000; uint256 finalEthAmount = listingId[_id].currentOffer - taxAmount; TOPIA.safeTransfer(listingId[_id].offerer, listingId[_id].topiaAmount); _safeTransferETHWithFallback(taxWallet, taxAmount); _safeTransferETHWithFallback(listingId[_id].lister, finalEthAmount); offerId[listingId[_id].activeOfferId].offerStatus = 4; emit ListingSettled(_id, listingId[_id].offerer, listingId[_id].lister, listingId[_id].currentOffer, taxAmount, true, listingId[_id].requestedEth); } function buyNow(uint32 _id) external payable holdsNFTBuyer nonReentrant { require(listingStatus(_id) == 1, 'Listing has already been settled or canceled'); require(block.timestamp <= listingId[_id].endTime, 'Listing has expired'); require(msg.value == listingId[_id].requestedEth, 'ETH Value must be equal to listing price'); listingId[_id].settled = true; activeListingCount--; if(listingId[_id].offerer != address(0) && listingId[_id].currentOffer > 0) { _safeTransferETHWithFallback(listingId[_id].offerer, listingId[_id].currentOffer); offerId[listingId[_id].activeOfferId].offerStatus = 2; } uint256 taxAmount = listingId[_id].requestedEth * tax / 10000; uint256 finalEthAmount = listingId[_id].requestedEth - taxAmount; TOPIA.safeTransfer(msg.sender, listingId[_id].topiaAmount); _safeTransferETHWithFallback(taxWallet, taxAmount); _safeTransferETHWithFallback(listingId[_id].lister, finalEthAmount); emit ListingSettled(_id, listingId[_id].offerer, listingId[_id].lister, listingId[_id].requestedEth, taxAmount, false, listingId[_id].requestedEth); } function claimRefundOnExpire(uint32 _id) external nonReentrant { require(msg.sender == listingId[_id].lister || msg.sender == listingId[_id].offerer, 'Only Lister can accept offer'); require(listingStatus(_id) == 3, 'Listing has not expired'); listingId[_id].failed = true; activeListingCount--; if(listingId[_id].offerer != address(0) && listingId[_id].currentOffer > 0) { _safeTransferETHWithFallback(listingId[_id].offerer, listingId[_id].currentOffer); listingId[_id].offerer = payable(address(0)); listingId[_id].currentOffer = 0; } TOPIA.safeTransfer(listingId[_id].lister, listingId[_id].topiaAmount); emit ListingRefunded(_id, listingId[_id].lister, listingId[_id].topiaAmount, listingId[_id].offerer, listingId[_id].currentOffer, msg.sender); } function emergencyCancelListing(uint32 _id) external nonReentrant onlyOwner { require(listingStatus(_id) == 1, "Listing is not active"); listingId[_id].canceled = true; if(listingId[_id].offerer != address(0) && listingId[_id].currentOffer > 0) { _safeTransferETHWithFallback(listingId[_id].offerer, listingId[_id].currentOffer); listingId[_id].offerer = payable(address(0)); listingId[_id].currentOffer = 0; offerId[listingId[_id].activeOfferId].offerStatus = 3; } activeListingCount--; TOPIA.safeTransfer(listingId[_id].lister, listingId[_id].topiaAmount); emit ListingCanceled(_id, listingId[_id].lister, listingId[_id].topiaAmount, block.timestamp); emit ListingRefunded(_id, listingId[_id].lister, listingId[_id].topiaAmount, listingId[_id].offerer, listingId[_id].currentOffer, msg.sender); } function listingStatus(uint32 _id) public view returns (uint8) { if (listingId[_id].canceled) { return 3; // CANCELED - Lister canceled } if ((block.timestamp > listingId[_id].endTime) && !listingId[_id].settled) { return 3; // FAILED - not sold by end time } if (listingId[_id].settled) { return 2; // SUCCESS - hardcap met } if ((block.timestamp <= listingId[_id].endTime) && !listingId[_id].settled) { return 1; // ACTIVE - deposits enabled } return 0; // QUEUED - awaiting start time } function getOffersByListingId(uint32 _id) external view returns (uint32[] memory offerIds) { uint256 length = allListingOfferIds[_id].length; offerIds = new uint32[](length); for(uint i = 0; i < length; i++) { offerIds[i] = allListingOfferIds[_id][i]; } } function getOffersByUser(address _user) external view returns (uint32[] memory offerIds) { uint256 length = userOffers[_user].length; offerIds = new uint32[](length); for(uint i = 0; i < length; i++) { offerIds[i] = userOffers[_user][i]; } } function getTotalOffersLength() external view returns (uint32) { return currentOfferId; } function getOffersLengthForListing(uint32 _id) external view returns (uint256) { return allListingOfferIds[_id].length; } function getOffersLengthForUser(address _user) external view returns (uint256) { return userOffers[_user].length; } function getOfferInfoByIndex(uint32 _offerId) external view returns (address _offerer, uint256 _offerAmount, uint32 _listingId, string memory _offerStatus) { _offerer = offerId[_offerId].offerer; _offerAmount = offerId[_offerId].offerAmount; _listingId = offerId[_offerId].listingId; if(offerId[_offerId].offerStatus == 1) { _offerStatus = 'active'; } else if(offerId[_offerId].offerStatus == 2) { _offerStatus = 'outOffered'; } else if(offerId[_offerId].offerStatus == 3) { _offerStatus = 'canceled'; } else if(offerId[_offerId].offerStatus == 4) { _offerStatus = 'accepted'; } else { _offerStatus = 'invalid OfferID'; } } function getOfferStatus(uint32 _offerId) external view returns (string memory _offerStatus) { if(offerId[_offerId].offerStatus == 1) { _offerStatus = 'active'; } else if(offerId[_offerId].offerStatus == 2) { _offerStatus = 'outoffer'; } else if(offerId[_offerId].offerStatus == 3) { _offerStatus = 'canceled'; } else if(offerId[_offerId].offerStatus == 4) { _offerStatus = 'accepted'; } else { _offerStatus = 'invalid OfferID'; } } function getAllActiveListings() external view returns (uint32[] memory _activeListings) { uint256 length = activeListingCount; _activeListings = new uint32[](length); uint32 z = 0; for(uint32 i = 1; i <= currentId; i++) { if(listingStatus(i) == 1) { _activeListings[z] = i; z++; } else { continue; } } } function getAllListings() external view returns (uint32[] memory listings, uint8[] memory status) { listings = new uint32[](currentId); status = new uint8[](currentId); for(uint32 i = 1; i < currentId; i++) { listings[i - 1] = i; status[i - 1] = listingStatus(i); } } function minListPrice() public view returns (uint256) { if(useManualMinListPrice) { return manualMinListPrice; } else { address[] memory path = new address[](2); path[0] = address(TOPIA); path[1] = WETH; uint256 amountOut = 1 * 10**16; uint256[] memory amounts = pyeSwapRouter.getAmountsIn(1 * 10**16, path, 0); uint256 ethPerToken = (amountOut * 10**9) / amounts[0]; return ethPerToken * minListPercent / 10000; } } /** * @notice Transfer ETH. If the ETH transfer fails, wrap the ETH and try send it as WETH. */ function _safeTransferETHWithFallback(address to, uint256 amount) internal { if (!_safeTransferETH(to, amount)) { IWETH(WETH).deposit{ value: amount }(); IERC20(WETH).transfer(to, amount); } } /** * @notice Transfer ETH and return the success status. * @dev This function only forwards 30,000 gas to the callee. */ function _safeTransferETH(address to, uint256 value) internal returns (bool) { (bool success, ) = to.call{ value: value, gas: 30_000 }(new bytes(0)); return success; } receive() external payable { emit Received(msg.sender, msg.value); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface IPYESwapRouter { function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path, uint totalFee) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path, uint totalFee) external view returns (uint[] memory amounts); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.6; interface IWETH { function deposit() external payable; function withdraw(uint256 wad) external; function transfer(address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IHUB { function emitGenesisStaked(address owner, uint16[] calldata tokenIds, uint8 gameId) external; function emitAlphaStaked(address owner, uint16[] calldata tokenIds, uint8 gameId) external; function emitGenesisUnstaked(address owner, uint16[] calldata tokenIds) external; function emitAlphaUnstaked(address owner, uint16[] calldata tokenIds) external; function emitTopiaClaimed(address owner, uint256 amount) external; function balanceOf(address owner) external view returns (uint256); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; interface INFT is IERC721Enumerable { }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../extensions/draft-IERC20Permit.sol"; import "../../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 999999 }, "evmVersion": "istanbul", "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_topia","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_genesis","type":"address"},{"internalType":"address","name":"_alpha","type":"address"},{"internalType":"address","name":"_rats","type":"address"},{"internalType":"address","name":"_hub","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"uint16","name":"_minOfferIncrementPercentage","type":"uint16"},{"internalType":"uint256","name":"_minListPrice","type":"uint256"},{"internalType":"uint16","name":"_minListPercent","type":"uint16"},{"internalType":"uint16","name":"_minOfferPercent","type":"uint16"},{"internalType":"address payable","name":"_taxWallet","type":"address"},{"internalType":"uint16","name":"_tax","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"Lister","type":"address"},{"indexed":false,"internalType":"uint256","name":"TopiaAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TimeStamp","type":"uint256"}],"name":"ListingCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TopiaAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"EthPrice","type":"uint256"}],"name":"ListingCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"EthPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"ListingEdited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minOfferIncrementPercentage","type":"uint256"}],"name":"ListingMinOfferIncrementPercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"Lister","type":"address"},{"indexed":false,"internalType":"uint256","name":"TopiaRefundAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"Offerer","type":"address"},{"indexed":false,"internalType":"uint256","name":"OffererRefundAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"Caller","type":"address"}],"name":"ListingRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"Buyer","type":"address"},{"indexed":false,"internalType":"address","name":"Seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"FinalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TaxAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"wasOffer","type":"bool"},{"indexed":false,"internalType":"uint256","name":"listedAmount","type":"uint256"}],"name":"ListingSettled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timeBuffer","type":"uint256"}],"name":"ListingTimeBufferUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"OfferId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TimeStamp","type":"uint256"}],"name":"OfferCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"OfferId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"OfferPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"From","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"Received","type":"event"},{"inputs":[],"name":"ALPHA","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GENESIS","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HUB","outputs":[{"internalType":"contract IHUB","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RATS","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOPIA","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"acceptOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeListingCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allBuyersAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allListersAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"allListingOfferIds","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allOfferersAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"buyNow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"cancelListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"},{"internalType":"uint32","name":"_offerId","type":"uint32"}],"name":"cancelOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"claimRefundOnExpire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_topiaAmount","type":"uint256"},{"internalType":"uint256","name":"_requestedEth","type":"uint256"},{"internalType":"uint32","name":"_endTime","type":"uint32"}],"name":"createListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"createOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"},{"internalType":"uint32","name":"_newEndTime","type":"uint32"}],"name":"editListingEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"},{"internalType":"uint256","name":"_requestedEth","type":"uint256"}],"name":"editListingPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"emergencyCancelListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllActiveListings","outputs":[{"internalType":"uint32[]","name":"_activeListings","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllListings","outputs":[{"internalType":"uint32[]","name":"listings","type":"uint32[]"},{"internalType":"uint8[]","name":"status","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_offerId","type":"uint32"}],"name":"getOfferInfoByIndex","outputs":[{"internalType":"address","name":"_offerer","type":"address"},{"internalType":"uint256","name":"_offerAmount","type":"uint256"},{"internalType":"uint32","name":"_listingId","type":"uint32"},{"internalType":"string","name":"_offerStatus","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_offerId","type":"uint32"}],"name":"getOfferStatus","outputs":[{"internalType":"string","name":"_offerStatus","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"getOffersByListingId","outputs":[{"internalType":"uint32[]","name":"offerIds","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getOffersByUser","outputs":[{"internalType":"uint32[]","name":"offerIds","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"getOffersLengthForListing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getOffersLengthForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalOffersLength","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"listingId","outputs":[{"internalType":"address payable","name":"lister","type":"address"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"topiaAmount","type":"uint256"},{"internalType":"uint256","name":"requestedEth","type":"uint256"},{"internalType":"uint256","name":"currentOffer","type":"uint256"},{"internalType":"uint256","name":"previousOffer","type":"uint256"},{"internalType":"uint32","name":"activeOfferId","type":"uint32"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"uint16","name":"numberOffers","type":"uint16"},{"internalType":"bool","name":"settled","type":"bool"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"failed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"listingStatus","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minListPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minOfferIncrementPercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minOfferPercent","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"offerId","outputs":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"uint8","name":"offerStatus","type":"uint8"},{"internalType":"uint32","name":"listingId","type":"uint32"},{"internalType":"uint256","name":"offerAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pyeSwapRouter","outputs":[{"internalType":"contract IPYESwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBuyersAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_hub","type":"address"}],"name":"setHubContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setListersAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_percent","type":"uint16"}],"name":"setMinListPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minListPrice","type":"uint256"}],"name":"setMinListPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_minOfferIncrementPercentage","type":"uint16"}],"name":"setMinOfferIncrementPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_percent","type":"uint16"}],"name":"setMinOfferPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setOfferersAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rats","type":"address"}],"name":"setRatsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_taxWallet","type":"address"},{"internalType":"uint16","name":"_tax","type":"uint16"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setUseManualMinListPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080346200029957601f620053b638819003918201601f19168301916001600160401b038311848410176200029e578084926101a09460405283398101031262000299576200004e81620002b4565b906200005d60208201620002b4565b916200006c60408301620002b4565b906200007b60608401620002b4565b906200008a60808501620002b4565b916200009960a08601620002b4565b620000a760c08701620002b4565b620000b560e08801620002c9565b61010088015192620000cb6101208a01620002c9565b96620000db6101408b01620002c9565b6101608b01519a9096906001600160a01b038c168c036200029957610180016200010590620002c9565b600160008181558154336001600160a01b0319821681179093556040519f939d9392916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600a8054600c80546401000000016001600160401b031991909116179055600780546001600160a01b03199081166001600160a01b039e8f1617909155600680548216948e1694909417909355600280548416948d1694909417909355600380548316948c1694909417909355600480548216948b16949094179093556005805490931693891693909317909155600880546001600160b01b031916949097169390931760a09290921b61ffff60a01b169190911785556009929092556801010100000000000168ffffff00ffffffffff1990921662ffff009590941b949094169290921764ffff00000060189290921b919091161717905560108054600160201b600160d01b03191660309390931b600160301b600160d01b03169290921765ffff0000000060209290921b919091161790556150dc9081620002da8239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200029957565b519061ffff82168203620002995756fe608060409080825260048036101561004b575b5050361561001f57600080fd5b513481527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460203392a2005b600091823560e01c90816302e8e85f14613f82575080630737b90e14613f39578063166b253d14613ebb57806316c38b3c14613e3f5780631777244a14613dcb5780631bf7265c14613d885780631da68baf14613d465780631ea7762f14613d0157806321ec19f914613c445780632a19a40614613c005780632c7cd95714613a585780632dc0562d14613a025780633822d30d1461398a5780633cbaf215146136be5780634280aa63146135be57806344155829146135595780634681a7c61461351657806353880249146133d1578063588fa0c614612e1857806358f3d88114612dc55780636bf24a0914612d725780636cbde20614612c665780636f36004114612c27578063701e508414612b66578063715018a614612ac85780637274e4ff1461281e57806377c729841461264f57806379f8524a146125cd57806382d225b31461254d578063837b263514611fcf57806385d930ae14611ca957806389a8f23d14611c265780638da5cb5b14611bd357806390337f2a14611b8f57806392dbd5e714611b4b5780639618b33314611aa557806398a650f0146117bf57806399c8d5561461177d5780639a9b84e0146116c5578063a18072ca14611617578063a4c52b86146115c4578063a92d730f1461157f578063ad5c46481461152c578063ae733a0f146114b3578063ae73ccec14611356578063afbd4f3f14611304578063b0ba8b0c14611291578063b0bb1c5a1461123e578063b187bd26146111f9578063b7dec1b7146111a6578063c9419fe314610e46578063e37c7d8314610db9578063e3a76f7914610473578063e59e9743146103f25763f2fde38b036100125782346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5781359173ffffffffffffffffffffffffffffffffffffffff918284168094036103ea5761030c6140f8565b8315610367575050600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b90602060849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8480fd5b8280fd5b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573580151580910361046f576104356140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff66ff000000000000600a549260301b16911617600a5580f35b5080fd5b5082602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db5576104a9613fd2565b91600a549260ff84841c168015610d25575b8015610c95575b8015610c05575b8015610b66575b6104d99061428e565b6104e76002875414156142f3565b60028655610502600160ff6104fb84614a71565b1614614802565b63ffffffff9384821695868852600b80855286868a205460c01c16421015610b0a578789528085526002868a2001543411610a885787895280855261055c6002878b20015461271091829161ffff809760181c1690614358565b043410610a0657888a52818652868a20600301546008549091906105859060a01c861683614358565b0481018091116109da5734106109325787895280855273ffffffffffffffffffffffffffffffffffffffff80878b20541633146108d657888a528186526005878b200154861c1696600c54978189881c16987fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff67ffffffff0000000061060a8c614438565b8a1b16911617600c5580610853575b50508789528452346003868a20015560058589200180547fffffffffffffffff0000000000000000000000000000000000000000ffffffff77ffffffffffffffffffffffffffffffffffffffff0000000033881b169116179055600585892001867fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082541617905560058589200191825491818360c01c16918214610827575091600f93917fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff79ffff00000000000000000000000000000000000000000000000060017f3f7c2cdea5021ba3a44bd1f2eb0670e2c25f5ee8f4f44abfcb0564a28bdfb3429998960160c01b169116179055868852600d825261073d86858a20614867565b858852600e8252838820337fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055346001858a200155838820907fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff78ffffffff00000000000000000000000000000000000000000083549260a81b169116179055828720740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8254161790553387525261081283828720614867565b51338152346020820152604090a36001815580f35b8960116024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b898b52828752878b206003015461086991614ed0565b888a52818652868a2060050154168952600e855285892080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790558789528085528589206003810154908301558980610619565b606483878951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601b60248201527f4c6973746572206e6f7420616c6c6f77656420746f204f6666657200000000006044820152fd5b60a482868851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152604460248201527f4d7573742073656e64206d6f7265207468616e206c617374206f66666572206260448201527f79206d696e4f66666572496e6372656d656e7450657263656e7461676520616d60648201527f6f756e74000000000000000000000000000000000000000000000000000000006084820152fd5b60248a6011857f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b608483878951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602960248201527f4d757374206f66666572206d6f7265207468616e206d696e696d756d206f666660448201527f657220616d6f756e7400000000000000000000000000000000000000000000006064820152fd5b608482868851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602160248201527f4d757374206f66666572206c657373207468616e20726571756573746564457460448201527f68000000000000000000000000000000000000000000000000000000000000006064820152fd5b606482868851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4c697374696e67206578706972656400000000000000000000000000000000006044820152fd5b5060248273ffffffffffffffffffffffffffffffffffffffff8754168551928380927f70a08231000000000000000000000000000000000000000000000000000000008252338b8301525afa8015610bfb578790610bc8575b151590506104d0565b508281813d8311610bf4575b610bde818361424d565b81010312610bf0576104d99051610bbf565b8680fd5b503d610bd4565b84513d89823e3d90fd5b5060248273ffffffffffffffffffffffffffffffffffffffff600354168551928380927f70a08231000000000000000000000000000000000000000000000000000000008252338b8301525afa908115610bfb578791610c68575b5015156104c9565b90508281813d8311610c8e575b610c7f818361424d565b81010312610bf0575187610c60565b503d610c75565b5060248273ffffffffffffffffffffffffffffffffffffffff600254168551928380927f70a08231000000000000000000000000000000000000000000000000000000008252338b8301525afa908115610bfb578791610cf8575b5015156104c2565b90508281813d8311610d1e575b610d0f818361424d565b81010312610bf0575187610cf0565b503d610d05565b5060248273ffffffffffffffffffffffffffffffffffffffff600554168551928380927f70a08231000000000000000000000000000000000000000000000000000000008252338b8301525afa908115610bfb578791610d88575b5015156104bb565b90508281813d8311610dae575b610d9f818361424d565b81010312610bf0575187610d80565b503d610d95565b8380fd5b82843461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f576080918163ffffffff9182610dfd613fd2565b168152600e6020522091600183549301549181519373ffffffffffffffffffffffffffffffffffffffff8116855260ff8160a01c16602086015260a81c16908301526060820152f35b503461046f57602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee57610e80613fd2565b91610e8f6002855414156142f3565b6002845563ffffffff9081841693848652600b9081885273ffffffffffffffffffffffffffffffffffffffff92838689205416330361114a5750917fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff95969791610f09600160ff610f0261108b97614a71565b161461469e565b87895280835260059485878b20017b010000000000000000000000000000000000000000000000000000007fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff8254161790558286888c200154851c1615158061113b575b611095575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060105491610fa2818416614703565b16911617601055610fca8260075416898b5282855283888c2054166001898d20015491614734565b8789528083528589208054600190910154875191841673ffffffffffffffffffffffffffffffffffffffff168252602082015242604082015288907f08e1c3692993684b95c785b759d11ce9cbcf361a6a39ffaa4d9f1d4df29db89490606090a287895282528488208054600182015495820154600390920154965173ffffffffffffffffffffffffffffffffffffffff918416821681526020810196909652921c16166040830152606082019290925233608082015290819060a0820190565b0390a26001815580f35b6110af8387898d200154861c166003898d20015490614ed0565b888a5281845285878b20017fffffffffffffffff0000000000000000000000000000000000000000ffffffff815416905589600388822001558086888c200154168a52600e8452868a20740300000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff825416179055610f72565b506003878b2001541515610f6d565b606490898751917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601660248201527f4f6e6c79204c69737465722063616e2063616e63656c000000000000000000006044820152fd5b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209060ff600a5460281c1690519015158152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573580151580910361046f576112d46140f8565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600a5416911617600a5580f35b82843461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f578060209263ffffffff611346613fd2565b168152600d845220549051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5763ffffffff80600c54169261139a84614b2d565b936113a481614b15565b906113b18551928361424d565b8082526113bd81614b15565b956020917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838501980136893760019586805b61143f575b50505061140b82918751978089528801906140be565b928684038288015251928381520195925b8281106114295785870386f35b835160ff1687529581019592810192840161141c565b908181899b9993989697981687858210156114a45750906114979161146e8461146784614cae565b1688614bb6565b5261147881614a71565b60ff61148e8561148785614cae565b168c614bb6565b91169052614438565b90919799969594966113f0565b505050989698959493956113f5565b82346115295760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611529576114eb61404f565b6114f36140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff62ffff00600a549260081b16911617600a5580f35b80fd5b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600654169051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209060ff600a5460381c1690519015158152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600554169051908152f35b82843461046f576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5763ffffffff9182611658613fd2565b1692838552600d90818452828620549161167183614b2d565b95875b8481106116915785518781528061168d818a018b6140be565b0390f35b6116c090828a52838852846116a882898d20613ffd565b90549060031b1c166116ba828b614bb6565b52614b7c565b611674565b82843461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760207f422c80ee4bc9013fbd94d768bd52864c5def5975108e758ce1694107dc88dd869161ffff61172561404f565b9161172e6140f8565b6008547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff00000000000000000000000000000000000000008560a01b169116176008555191168152a180f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f576010549051602091821c61ffff168152f35b82843461046f57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee577fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff9061181c613fd2565b61182a6002865414156142f3565b600285556118366140f8565b611846600160ff610f0284614a71565b61108b63ffffffff80921694858752600b815260059283858920017b010000000000000000000000000000000000000000000000000000007fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff82541617905573ffffffffffffffffffffffffffffffffffffffff908185878b200154841c16151580611a96575b6119ef575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060105491611902818416614703565b1691161760105561192b8160075416888a52600b845282878b2054166001888c20015491614734565b868852600b82528488208054600190910154865191831673ffffffffffffffffffffffffffffffffffffffff168252602082015242604082015287907f08e1c3692993684b95c785b759d11ce9cbcf361a6a39ffaa4d9f1d4df29db89490606090a2868852600b82528488208054600182015495820154600390920154965173ffffffffffffffffffffffffffffffffffffffff918416821681526020810196909652921c16166040830152606082019290925233608082015290819060a0820190565b611a098286888c200154851c166003888c20015490614ed0565b878952600b835284868a20017fffffffffffffffff0000000000000000000000000000000000000000ffffffff815416905588600387822001558085878b200154168952600e8352858920740300000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8254161790556118d2565b506003868a20015415156118cd565b5082346103ee57602091827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db557359273ffffffffffffffffffffffffffffffffffffffff841680940361152957838152600f908184528281205491611b0f83614b2d565b95825b848110611b2b5785518781528061168d818a018b6140be565b611b469082855283885263ffffffff6116a882898820613ffd565b611b12565b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57600c549051602091821c63ffffffff168152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209061ffff60085460a01c169051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573573ffffffffffffffffffffffffffffffffffffffff811680910361046f57611c7d6140f8565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600554161760055580f35b5082346103ee576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db55781611ce4613fd2565b93611cf36002875414156142f3565b6002865563ffffffff9485811695868852611d46600160ff611d3f600b95868a52611d3a8d73ffffffffffffffffffffffffffffffffffffffff9c8d91205416331461490f565b614a71565b1614614974565b868852818552611d6081858a205460c01c164211156149ff565b8688528185526005928684868b200154871c1615611f735750928560c0959389937fd972ee7b1a13e217eb515ce7f71416b4a86b4f52c0f446d5327b3a160810b16398968a865281875280838688200154168652600e8752611dcd600160ff8789205460a01c16146148aa565b8a865281875282858720017a0100000000000000000000000000000000000000000000000000007fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff825416179055611ed88b8587612710611e7a8c61ffff8d6003866010547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008d611e5f818416614703565b1691161792836010558a81528d8652200154921c1690614358565b0499838152868c52611e928b60038484200154614a64565b93611eba8d858060075416918486528b81528c8787200154901c166001868620015491614734565b611ecb8c8560105460301c16614ed0565b8152868c52205416614ed0565b8a8c5281875282858d200154168b52600e8652838b20740400000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff825416179055898b528552828a200154841c16938189205416906003818a200154916002828b20015494825196875286015284015260608301526001608083015260a0820152a26001815580f35b606490868651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601160248201527f4e6f20616374697665204f6666657265720000000000000000000000000000006044820152fd5b50913461046f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f578235906024918235916044359563ffffffff94858816918289036125495760ff600a54612032828260281c1615614177565b60301c1680156124b5575b8015612421575b801561238d575b80156122ea575b61205b9061428e565b6120696002895414156142f3565b60028855633b9aca008087029087820414871517156122bf57976121bb819a6120a5612096898c9d61439a565b61209e614ce2565b11156143d3565b88600288600c54958d87169e8f906120bc82614438565b167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000080991617600c558152600b602052818120337fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558b60018383200155200155868c2080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff00000000000000000000000000000000000000004260a01b169116179055868c20907fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff7bffffffff00000000000000000000000000000000000000000000000083549260c01b169116179055565b60105490886121cb818416614438565b1691161760105573ffffffffffffffffffffffffffffffffffffffff60075416908451927f23b872dd00000000000000000000000000000000000000000000000000000000602085015233818501523060448501528660648501526064845260a084019184831067ffffffffffffffff84111761229557505084927fb87af400f8510716c8da0bd7992d41218e2f0cd4d129f5d1427b13ead04935d698969492612279926080999752614465565b8151944216855260208501528301526060820152a26001815580f35b60418c917f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b50601188917f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5081602073ffffffffffffffffffffffffffffffffffffffff8354168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa801561238357899061234c575b15159050612052565b506020813d821161237b575b816123656020938361424d565b810103126123775761205b9051612343565b8880fd5b3d9150612358565b85513d8b823e3d90fd5b5081602073ffffffffffffffffffffffffffffffffffffffff600354168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa9081156123835789916123f0575b50151561204b565b90506020813d8211612419575b8161240a6020938361424d565b810103126123775751386123e8565b3d91506123fd565b5081602073ffffffffffffffffffffffffffffffffffffffff600254168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa908115612383578991612484575b501515612044565b90506020813d82116124ad575b8161249e6020938361424d565b8101031261237757513861247c565b3d9150612491565b5081602073ffffffffffffffffffffffffffffffffffffffff600554168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa908115612383578991612518575b50151561203d565b90506020813d8211612541575b816125326020938361424d565b81010312612377575138612510565b3d9150612525565b8780fd5b508290346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee57358015158091036103ee5768ff00000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff916125be6140f8565b600a54931b16911617600a5580f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57803573ffffffffffffffffffffffffffffffffffffffff81168091036103ee576126256140f8565b7fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905580f35b5082346103ee57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee57612687613fd2565b916024359061269e60ff600a5460281c1615614177565b6126ac6002865414156142f3565b6002855563ffffffff906126f0600160ff610f0285891698898b52600b602052611d3a73ffffffffffffffffffffffffffffffffffffffff8a8d205416331461479d565b633b9aca008084029084820414841517156127f25761209661272191878952600b6020526001878a2001549061439a565b848652600b6020526003848720015483111561279557509061108b7fd943474c63c070d3b7d0ed9a3046d9ac93b895196392744b4df78c5a6bd0b2249392858752600b60205282600285892001558387205460c01c1692519283928390929163ffffffff6020916040840195845216910152565b60649060208551917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601f60248201527f486173206f6666657220686967686572207468616e206e6577207072696365006044820152fd5b6024876011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b503461046f57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57612855613fd2565b9261285e613fea565b9161286d6002855414156142f3565b6002845563ffffffff80931691828552602091600e835273ffffffffffffffffffffffffffffffffffffffff82872054163303612a6d57838652600e8352848287205460a81c169480881680961480612a55575b156129f9576128fa600160ff6104fb7f249b2345400f7e0ba24bddfab725b2c04e94901fd6e0215688cd135f10e79ce998999a9b614a71565b858852600e8452612916600160ff858b205460a01c16146148aa565b858852600e845261292d6001848a20015433614ed0565b868852600b845260058389200154168752600e8352818720740300000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff825416179055858752600b83528187200154600382882001556005818720017fffffffffffffffff0000000000000000000000000000000000000000ffffffff81541690556005818720017fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000815416905551428152a36001815580f35b508260649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601060248201527f49447320646f206e6f74206d61746368000000000000000000000000000000006044820152fd5b50858752600b845284816005858a20015416146128c1565b8260649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f43616c6c6572206973206e6f74204f66666572657200000000000000000000006044820152fd5b823461152957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261152957612aff6140f8565b8073ffffffffffffffffffffffffffffffffffffffff6001547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50503461152957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126115295763ffffffff612ba88160105416614b2d565b9160018092819281600c5416925b612bd0575b86516020808252819061168d908201896140be565b818416838111612c21579085918260ff612be988614a71565b1603612c165781612c0991612c0386612c0f95168b614bb6565b52614438565b94614438565b9390612bb6565b5093612c0f90614438565b50612bbb565b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57612c5f6140f8565b3560095580f35b508290346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5761168d9263ffffffff612ca9613fd2565b168152600e6020528281205460a01c60ff16600103612ce0575050612ccc614c75565b905b51918291602083526020830190614060565b8281205460a01c60ff16600203612d2e5750508051612cfe81614202565b600881527f6f75746f66666572000000000000000000000000000000000000000000000000602082015290612cce565b82600360ff8284205460a01c1614600014612d5457505050612d4e614c3c565b90612cce565b90205460a01c60ff1603612d6a57612d4e614c03565b612d4e614bca565b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600754169051908152f35b5091903461152957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611529575073ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b5082906020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db557612e4e613fd2565b9160ff600a5460381c168015613341575b80156132b1575b8015613221575b8015613182575b612e7d9061428e565b6002612e8c81875414156142f3565b808655612e9f600160ff611d3f87614a71565b63ffffffff80941694858752600b92838552612ec586838a205460c01c164211156149ff565b868852838552828289200154340361310157509160c093917fd972ee7b1a13e217eb515ce7f71416b4a86b4f52c0f446d5327b3a160810b16395938789528284526005818a20017a0100000000000000000000000000000000000000000000000000007fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff8254161790556010547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000086612f7f818416614703565b1691161760105587895282845273ffffffffffffffffffffffffffffffffffffffff94856005838c200154861c161515806130f2575b61307d575b50878952828452612710612fdc83838c20015461ffff601054881c1690614358565b0492888a528085526130378a6130158b600186612ffe8a8a8388200154614a64565b948c60075416938152878c52200154903390614734565b613026868960105460301c16614ed0565b8a8c5282875287848d205416614ed0565b888a528452846005828b200154851c1694818a20541682828b20015492828b200154948251968752860152840152606083015285608083015260a0820152a26001815580f35b613098866005848d200154871c166003848d20015490614ed0565b888a528385526005828b200154168952600e8452808920740200000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff82541617905589612fba565b506003828b2001541515612fb5565b8460849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602860248201527f4554482056616c7565206d75737420626520657175616c20746f206c6973746960448201527f6e672070726963650000000000000000000000000000000000000000000000006064820152fd5b5060248273ffffffffffffffffffffffffffffffffffffffff8354168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa80156132175786906131e4575b15159050612e74565b508281813d8311613210575b6131fa818361424d565b8101031261320c57612e7d90516131db565b8580fd5b503d6131f0565b85513d88823e3d90fd5b5060248273ffffffffffffffffffffffffffffffffffffffff600354168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa908115613217578691613284575b501515612e6d565b90508281813d83116132aa575b61329b818361424d565b8101031261320c57518661327c565b503d613291565b5060248273ffffffffffffffffffffffffffffffffffffffff600254168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa908115613217578691613314575b501515612e66565b90508281813d831161333a575b61332b818361424d565b8101031261320c57518661330c565b503d613321565b5060248273ffffffffffffffffffffffffffffffffffffffff600554168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa9081156132175786916133a4575b501515612e5f565b90508281813d83116133ca575b6133bb818361424d565b8101031261320c57518661339c565b503d6133b1565b5082346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5761168d9061340e613fd2565b63ffffffff9081168552600e60205281852080546001918201549673ffffffffffffffffffffffffffffffffffffffff82169660a883901c9094169392909160a01c60ff1603613484575050613462614c75565b915b805195869586526020860152840152608060608401526080830190614060565b8381205460a01c60ff166002036134d257505081516134a281614202565b600a81527f6f75744f66666572656400000000000000000000000000000000000000000000602082015291613464565b83600360ff8284205460a01c16146000146134f8575050506134f2614c3c565b91613464565b90205460a01c60ff160361350e576134f2614c03565b6134f2614bca565b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209063ffffffff601054169051908152f35b508290346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee573573ffffffffffffffffffffffffffffffffffffffff81168091036103ee5782829160209452600f845220549051908152f35b508290346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5760ff906101a0938363ffffffff9182613607613fd2565b168152600b602052209081549160018101549360028201546005600384015492840154930154958851988573ffffffffffffffffffffffffffffffffffffffff978881168c52818160a01c1660208d015260c01c16908a01526060890152608088015260a087015260c0860152821660e08501528160201c1661010084015261ffff8160c01c16610120840152818160d01c161515610140840152818160d81c16151561016084015260e01c161515610180820152f35b5082346103ee576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db5576136f8613fd2565b6137066002865414156142f3565b6002855563ffffffff80821694858752600b8452600360ff61375573ffffffffffffffffffffffffffffffffffffffff95611d3a8b888b8181842054163314928315613975575b50505061490f565b160361391957507fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff93929161108b91868852600b84526005858920017c01000000000000000000000000000000000000000000000000000000007fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8254161790557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060105491613806818416614703565b16911617601055858752600b83528060058589200154841c1615158061390a575b6138af575b613847816007541682868a2054166001878b20015491614734565b858752600b8352838720805460018201546005830154600390930154965191841673ffffffffffffffffffffffffffffffffffffffff908116835260208301919091529190941c909116166040830152606082019290925233608082015290819060a0820190565b6138ca816005868a200154851c166003868a20015490614ed0565b858752600b83526005848820017fffffffffffffffff0000000000000000000000000000000000000000ffffffff8154169055866003858220015561382c565b50600384882001541515613827565b606490848651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601760248201527f4c697374696e6720686173206e6f7420657870697265640000000000000000006044820152fd5b60059293502001548a1c163314888b8e61374d565b82346115295760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611529576139c261404f565b6139ca6140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff64ffff000000600a549260181b16911617600a5580f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff60105460301c169051908152f35b508290346103ee57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee57613a91613fd2565b91613a9a613fea565b91613aad60ff600a5460281c1615614177565b613abb6002865414156142f3565b6002855563ffffffff613afe600160ff610f0284891698898b52600b602052611d3a73ffffffffffffffffffffffffffffffffffffffff898d205416331461479d565b429084161115613ba45750828452600b60205280842080547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c084901b7bffffffff000000000000000000000000000000000000000000000000161790557fd943474c63c070d3b7d0ed9a3046d9ac93b895196392744b4df78c5a6bd0b224919080852060020154905190815263ffffffff9091166020820152806040810161108b565b602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601760248201527f456e642074696d6520616c7265616479207061737365640000000000000000006044820152fd5b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209061ffff600a5460181c169051908152f35b5082346103ee577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573573ffffffffffffffffffffffffffffffffffffffff8116810361046f5760243561ffff811681036103ee57613ca76140f8565b7fffffffffffff00000000000000000000000000000000000000000000ffffffff79ffffffffffffffffffffffffffffffffffffffff00000000000065ffff000000006010549360201b169360301b169116171760105580f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209060ff600a5460301c1690519015158152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57602090613d81614ce2565b9051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57600a548151911c60ff1615158152602090f35b82843461046f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57613e03613fd2565b6024359263ffffffff8092168152600d6020528281209081548510156115295750602093613e3091613ffd565b92905490519260031b1c168152f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573580151580910361046f57613e826140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff65ff0000000000600a549260281b16911617600a5580f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573580151580910361046f57613efe6140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff67ff00000000000000600a549260381b16911617600a5580f35b82843461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209060ff613f7a611d3a613fd2565b915191168152f35b83903461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600854168152f35b6004359063ffffffff82168203613fe557565b600080fd5b6024359063ffffffff82168203613fe557565b919091805483101561402057600052601c60206000208360031c019260021b1690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6004359061ffff82168203613fe557565b919082519283825260005b8481106140aa5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b60208183018101518483018201520161406b565b90815180825260208080930193019160005b8281106140de575050505090565b835163ffffffff16855293810193928101926001016140d0565b73ffffffffffffffffffffffffffffffffffffffff60015416330361411957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b1561417e57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f436f6e74726163742069732050617573656420746f206e6577206c697374696e60448201527f67730000000000000000000000000000000000000000000000000000000000006064820152fd5b6040810190811067ffffffffffffffff82111761421e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761421e57604052565b1561429557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d75737420686f6c642061204d657461746f706961204e4654000000000000006044820152fd5b156142fa57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b8181029291811591840414171561436b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81156143a4570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b156143da57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e6720507269636520746f6f206c6f7700000000000000000000006044820152fd5b63ffffffff80911690811461436b5760010190565b90816020910312613fe557518015158103613fe55790565b73ffffffffffffffffffffffffffffffffffffffff16906040519061448982614202565b6020928383527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656484840152803b1561458457600082819282876144db9796519301915af16144d56145e2565b90614640565b805190816144e857505050565b82806144f893830101910161444d565b156145005750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b606484604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b3d1561463b573d9067ffffffffffffffff821161421e576040519161462f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461424d565b82523d6000602084013e565b606090565b9091901561464c575090565b81511561465c5750805190602001fd5b61469a906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190614060565b0390fd5b156146a557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e67206973206e6f742061637469766500000000000000000000006044820152fd5b63ffffffff16801561436b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448083019390935291815261479b9161479660648361424d565b614465565b565b156147a457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4f6e6c79204c69737465722063616e20656469740000000000000000000000006044820152fd5b1561480957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f546f706961204c697374696e67206973206e6f742041637469766500000000006044820152fd5b80546801000000000000000081101561421e5761488991600182018155613ffd565b819291549060031b9163ffffffff9283811b93849216901b16911916179055565b156148b157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f66666572206973206e6f7420616374697665000000000000000000000000006044820152fd5b1561491657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f6e6c79204c69737465722063616e20616363657074206f66666572000000006044820152fd5b1561497b57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c697374696e672068617320616c7265616479206265656e20736574746c656460448201527f206f722063616e63656c656400000000000000000000000000000000000000006064820152fd5b15614a0657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c697374696e67206861732065787069726564000000000000000000000000006044820152fd5b9190820391821161436b57565b63ffffffff80600092168252600b60205260409060ff6005838520015460d81c16614af957808284205460c01c16421180614b01575b614af95760ff6005838520015460d01c16614af1578183205460c01c164211159081614adc575b50614ad65790565b50600190565b82206005015460d01c60ff1615905038614ace565b505050600290565b505050600390565b5060ff6005838520015460d01c1615614aa7565b67ffffffffffffffff811161421e5760051b60200190565b90614b3782614b15565b614b44604051918261424d565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0614b728294614b15565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461436b5760010190565b8051156140205760200190565b80518210156140205760209160051b010190565b60405190614bd782614202565b600f82527f696e76616c6964204f66666572494400000000000000000000000000000000006020830152565b60405190614c1082614202565b600882527f61636365707465640000000000000000000000000000000000000000000000006020830152565b60405190614c4982614202565b600882527f63616e63656c65640000000000000000000000000000000000000000000000006020830152565b60405190614c8282614202565b600682527f61637469766500000000000000000000000000000000000000000000000000006020830152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff8093160191821161436b57565b600a5460ff811615614cf5575060095490565b6040805167ffffffffffffffff90606081018281118282101761421e57835260028152602090818101908436833773ffffffffffffffffffffffffffffffffffffffff918260075416614d4783614ba9565b52826006541682519060019182101561402057878493929594015282600854169287519485937fe815c4660000000000000000000000000000000000000000000000000000000085526064850190662386f26fc10000600487015260606024870152518091526084850193926000905b89838310614eb65750505050505091818060009485604483015203915afa928315614eab57600093614e1f575b505050614df19150614ba9565b519081156143a4576127109161ffff614e1b9260081c16906a084595161401484a00000004614358565b0490565b929091923d8083853e614e32818561424d565b83019284818503126103ee5780519182116103ee570182601f8201121561046f57805191614e6b614e6284614b15565b9651968761424d565b828652848087019360051b83010193841161152957508301905b828210614e9c5750505050614df190388080614de4565b81518152908301908301614e85565b84513d6000823e3d90fd5b855182168752899750958601959094019390830190614db7565b91906000604091825194602086019567ffffffffffffffff9681811088821117615079578552839052828080808585617530f1614f0b6145e2565b5015614f1a575b505050509050565b73ffffffffffffffffffffffffffffffffffffffff958660065416803b156103ea579084849260048851809581937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1801561506f5761502b575b505060065484517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201929092529394602091859116818481604481015b03925af1918215615021575050614ff3575b8080808493614f12565b6150139060203d811161501a575b61500b818361424d565b81019061444d565b5038614fe9565b503d615001565b51903d90823e3d90fd5b819794971161504257845291949180614fd7614f78565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b86513d87823e3d90fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fdfea2646970667358221220605e04b7c58f08105bbaed13c13a4847db33f592ff86bd0096dae537f6d8043964736f6c6343000811003300000000000000000000000041473032b82a4205ddde155cc7ed210b000b014d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000810fedb4a6927d02a6427f7441f6110d7a1096d500000000000000000000000096af517c414b3726c1b2ecc744ebf9d292dcbf600000000000000000000000000b21144dbf11feb286d24cd42a7c3b0f90c32ac800000000000000000000000069fde1a7d6837cd7e82b0bbedcbad40f487fdb050000000000000000000000003b505af97031b75e2be39e7f8fa1fa634857f29d00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000090ad10000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001388000000000000000000000000ca87b367554b1a92b41923f789d1ffc9dc2cca3d00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x608060409080825260048036101561004b575b5050361561001f57600080fd5b513481527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460203392a2005b600091823560e01c90816302e8e85f14613f82575080630737b90e14613f39578063166b253d14613ebb57806316c38b3c14613e3f5780631777244a14613dcb5780631bf7265c14613d885780631da68baf14613d465780631ea7762f14613d0157806321ec19f914613c445780632a19a40614613c005780632c7cd95714613a585780632dc0562d14613a025780633822d30d1461398a5780633cbaf215146136be5780634280aa63146135be57806344155829146135595780634681a7c61461351657806353880249146133d1578063588fa0c614612e1857806358f3d88114612dc55780636bf24a0914612d725780636cbde20614612c665780636f36004114612c27578063701e508414612b66578063715018a614612ac85780637274e4ff1461281e57806377c729841461264f57806379f8524a146125cd57806382d225b31461254d578063837b263514611fcf57806385d930ae14611ca957806389a8f23d14611c265780638da5cb5b14611bd357806390337f2a14611b8f57806392dbd5e714611b4b5780639618b33314611aa557806398a650f0146117bf57806399c8d5561461177d5780639a9b84e0146116c5578063a18072ca14611617578063a4c52b86146115c4578063a92d730f1461157f578063ad5c46481461152c578063ae733a0f146114b3578063ae73ccec14611356578063afbd4f3f14611304578063b0ba8b0c14611291578063b0bb1c5a1461123e578063b187bd26146111f9578063b7dec1b7146111a6578063c9419fe314610e46578063e37c7d8314610db9578063e3a76f7914610473578063e59e9743146103f25763f2fde38b036100125782346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5781359173ffffffffffffffffffffffffffffffffffffffff918284168094036103ea5761030c6140f8565b8315610367575050600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b90602060849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8480fd5b8280fd5b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573580151580910361046f576104356140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff66ff000000000000600a549260301b16911617600a5580f35b5080fd5b5082602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db5576104a9613fd2565b91600a549260ff84841c168015610d25575b8015610c95575b8015610c05575b8015610b66575b6104d99061428e565b6104e76002875414156142f3565b60028655610502600160ff6104fb84614a71565b1614614802565b63ffffffff9384821695868852600b80855286868a205460c01c16421015610b0a578789528085526002868a2001543411610a885787895280855261055c6002878b20015461271091829161ffff809760181c1690614358565b043410610a0657888a52818652868a20600301546008549091906105859060a01c861683614358565b0481018091116109da5734106109325787895280855273ffffffffffffffffffffffffffffffffffffffff80878b20541633146108d657888a528186526005878b200154861c1696600c54978189881c16987fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff67ffffffff0000000061060a8c614438565b8a1b16911617600c5580610853575b50508789528452346003868a20015560058589200180547fffffffffffffffff0000000000000000000000000000000000000000ffffffff77ffffffffffffffffffffffffffffffffffffffff0000000033881b169116179055600585892001867fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082541617905560058589200191825491818360c01c16918214610827575091600f93917fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff79ffff00000000000000000000000000000000000000000000000060017f3f7c2cdea5021ba3a44bd1f2eb0670e2c25f5ee8f4f44abfcb0564a28bdfb3429998960160c01b169116179055868852600d825261073d86858a20614867565b858852600e8252838820337fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055346001858a200155838820907fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff78ffffffff00000000000000000000000000000000000000000083549260a81b169116179055828720740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8254161790553387525261081283828720614867565b51338152346020820152604090a36001815580f35b8960116024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b898b52828752878b206003015461086991614ed0565b888a52818652868a2060050154168952600e855285892080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790558789528085528589206003810154908301558980610619565b606483878951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601b60248201527f4c6973746572206e6f7420616c6c6f77656420746f204f6666657200000000006044820152fd5b60a482868851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152604460248201527f4d7573742073656e64206d6f7265207468616e206c617374206f66666572206260448201527f79206d696e4f66666572496e6372656d656e7450657263656e7461676520616d60648201527f6f756e74000000000000000000000000000000000000000000000000000000006084820152fd5b60248a6011857f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b608483878951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602960248201527f4d757374206f66666572206d6f7265207468616e206d696e696d756d206f666660448201527f657220616d6f756e7400000000000000000000000000000000000000000000006064820152fd5b608482868851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602160248201527f4d757374206f66666572206c657373207468616e20726571756573746564457460448201527f68000000000000000000000000000000000000000000000000000000000000006064820152fd5b606482868851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4c697374696e67206578706972656400000000000000000000000000000000006044820152fd5b5060248273ffffffffffffffffffffffffffffffffffffffff8754168551928380927f70a08231000000000000000000000000000000000000000000000000000000008252338b8301525afa8015610bfb578790610bc8575b151590506104d0565b508281813d8311610bf4575b610bde818361424d565b81010312610bf0576104d99051610bbf565b8680fd5b503d610bd4565b84513d89823e3d90fd5b5060248273ffffffffffffffffffffffffffffffffffffffff600354168551928380927f70a08231000000000000000000000000000000000000000000000000000000008252338b8301525afa908115610bfb578791610c68575b5015156104c9565b90508281813d8311610c8e575b610c7f818361424d565b81010312610bf0575187610c60565b503d610c75565b5060248273ffffffffffffffffffffffffffffffffffffffff600254168551928380927f70a08231000000000000000000000000000000000000000000000000000000008252338b8301525afa908115610bfb578791610cf8575b5015156104c2565b90508281813d8311610d1e575b610d0f818361424d565b81010312610bf0575187610cf0565b503d610d05565b5060248273ffffffffffffffffffffffffffffffffffffffff600554168551928380927f70a08231000000000000000000000000000000000000000000000000000000008252338b8301525afa908115610bfb578791610d88575b5015156104bb565b90508281813d8311610dae575b610d9f818361424d565b81010312610bf0575187610d80565b503d610d95565b8380fd5b82843461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f576080918163ffffffff9182610dfd613fd2565b168152600e6020522091600183549301549181519373ffffffffffffffffffffffffffffffffffffffff8116855260ff8160a01c16602086015260a81c16908301526060820152f35b503461046f57602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee57610e80613fd2565b91610e8f6002855414156142f3565b6002845563ffffffff9081841693848652600b9081885273ffffffffffffffffffffffffffffffffffffffff92838689205416330361114a5750917fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff95969791610f09600160ff610f0261108b97614a71565b161461469e565b87895280835260059485878b20017b010000000000000000000000000000000000000000000000000000007fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff8254161790558286888c200154851c1615158061113b575b611095575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060105491610fa2818416614703565b16911617601055610fca8260075416898b5282855283888c2054166001898d20015491614734565b8789528083528589208054600190910154875191841673ffffffffffffffffffffffffffffffffffffffff168252602082015242604082015288907f08e1c3692993684b95c785b759d11ce9cbcf361a6a39ffaa4d9f1d4df29db89490606090a287895282528488208054600182015495820154600390920154965173ffffffffffffffffffffffffffffffffffffffff918416821681526020810196909652921c16166040830152606082019290925233608082015290819060a0820190565b0390a26001815580f35b6110af8387898d200154861c166003898d20015490614ed0565b888a5281845285878b20017fffffffffffffffff0000000000000000000000000000000000000000ffffffff815416905589600388822001558086888c200154168a52600e8452868a20740300000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff825416179055610f72565b506003878b2001541515610f6d565b606490898751917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601660248201527f4f6e6c79204c69737465722063616e2063616e63656c000000000000000000006044820152fd5b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209060ff600a5460281c1690519015158152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573580151580910361046f576112d46140f8565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600a5416911617600a5580f35b82843461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f578060209263ffffffff611346613fd2565b168152600d845220549051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5763ffffffff80600c54169261139a84614b2d565b936113a481614b15565b906113b18551928361424d565b8082526113bd81614b15565b956020917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838501980136893760019586805b61143f575b50505061140b82918751978089528801906140be565b928684038288015251928381520195925b8281106114295785870386f35b835160ff1687529581019592810192840161141c565b908181899b9993989697981687858210156114a45750906114979161146e8461146784614cae565b1688614bb6565b5261147881614a71565b60ff61148e8561148785614cae565b168c614bb6565b91169052614438565b90919799969594966113f0565b505050989698959493956113f5565b82346115295760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611529576114eb61404f565b6114f36140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff62ffff00600a549260081b16911617600a5580f35b80fd5b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600654169051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209060ff600a5460381c1690519015158152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600554169051908152f35b82843461046f576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5763ffffffff9182611658613fd2565b1692838552600d90818452828620549161167183614b2d565b95875b8481106116915785518781528061168d818a018b6140be565b0390f35b6116c090828a52838852846116a882898d20613ffd565b90549060031b1c166116ba828b614bb6565b52614b7c565b611674565b82843461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760207f422c80ee4bc9013fbd94d768bd52864c5def5975108e758ce1694107dc88dd869161ffff61172561404f565b9161172e6140f8565b6008547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff00000000000000000000000000000000000000008560a01b169116176008555191168152a180f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f576010549051602091821c61ffff168152f35b82843461046f57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee577fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff9061181c613fd2565b61182a6002865414156142f3565b600285556118366140f8565b611846600160ff610f0284614a71565b61108b63ffffffff80921694858752600b815260059283858920017b010000000000000000000000000000000000000000000000000000007fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff82541617905573ffffffffffffffffffffffffffffffffffffffff908185878b200154841c16151580611a96575b6119ef575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060105491611902818416614703565b1691161760105561192b8160075416888a52600b845282878b2054166001888c20015491614734565b868852600b82528488208054600190910154865191831673ffffffffffffffffffffffffffffffffffffffff168252602082015242604082015287907f08e1c3692993684b95c785b759d11ce9cbcf361a6a39ffaa4d9f1d4df29db89490606090a2868852600b82528488208054600182015495820154600390920154965173ffffffffffffffffffffffffffffffffffffffff918416821681526020810196909652921c16166040830152606082019290925233608082015290819060a0820190565b611a098286888c200154851c166003888c20015490614ed0565b878952600b835284868a20017fffffffffffffffff0000000000000000000000000000000000000000ffffffff815416905588600387822001558085878b200154168952600e8352858920740300000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8254161790556118d2565b506003868a20015415156118cd565b5082346103ee57602091827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db557359273ffffffffffffffffffffffffffffffffffffffff841680940361152957838152600f908184528281205491611b0f83614b2d565b95825b848110611b2b5785518781528061168d818a018b6140be565b611b469082855283885263ffffffff6116a882898820613ffd565b611b12565b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57600c549051602091821c63ffffffff168152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209061ffff60085460a01c169051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573573ffffffffffffffffffffffffffffffffffffffff811680910361046f57611c7d6140f8565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600554161760055580f35b5082346103ee576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db55781611ce4613fd2565b93611cf36002875414156142f3565b6002865563ffffffff9485811695868852611d46600160ff611d3f600b95868a52611d3a8d73ffffffffffffffffffffffffffffffffffffffff9c8d91205416331461490f565b614a71565b1614614974565b868852818552611d6081858a205460c01c164211156149ff565b8688528185526005928684868b200154871c1615611f735750928560c0959389937fd972ee7b1a13e217eb515ce7f71416b4a86b4f52c0f446d5327b3a160810b16398968a865281875280838688200154168652600e8752611dcd600160ff8789205460a01c16146148aa565b8a865281875282858720017a0100000000000000000000000000000000000000000000000000007fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff825416179055611ed88b8587612710611e7a8c61ffff8d6003866010547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008d611e5f818416614703565b1691161792836010558a81528d8652200154921c1690614358565b0499838152868c52611e928b60038484200154614a64565b93611eba8d858060075416918486528b81528c8787200154901c166001868620015491614734565b611ecb8c8560105460301c16614ed0565b8152868c52205416614ed0565b8a8c5281875282858d200154168b52600e8652838b20740400000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff825416179055898b528552828a200154841c16938189205416906003818a200154916002828b20015494825196875286015284015260608301526001608083015260a0820152a26001815580f35b606490868651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601160248201527f4e6f20616374697665204f6666657265720000000000000000000000000000006044820152fd5b50913461046f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f578235906024918235916044359563ffffffff94858816918289036125495760ff600a54612032828260281c1615614177565b60301c1680156124b5575b8015612421575b801561238d575b80156122ea575b61205b9061428e565b6120696002895414156142f3565b60028855633b9aca008087029087820414871517156122bf57976121bb819a6120a5612096898c9d61439a565b61209e614ce2565b11156143d3565b88600288600c54958d87169e8f906120bc82614438565b167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000080991617600c558152600b602052818120337fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558b60018383200155200155868c2080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff00000000000000000000000000000000000000004260a01b169116179055868c20907fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff7bffffffff00000000000000000000000000000000000000000000000083549260c01b169116179055565b60105490886121cb818416614438565b1691161760105573ffffffffffffffffffffffffffffffffffffffff60075416908451927f23b872dd00000000000000000000000000000000000000000000000000000000602085015233818501523060448501528660648501526064845260a084019184831067ffffffffffffffff84111761229557505084927fb87af400f8510716c8da0bd7992d41218e2f0cd4d129f5d1427b13ead04935d698969492612279926080999752614465565b8151944216855260208501528301526060820152a26001815580f35b60418c917f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b50601188917f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5081602073ffffffffffffffffffffffffffffffffffffffff8354168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa801561238357899061234c575b15159050612052565b506020813d821161237b575b816123656020938361424d565b810103126123775761205b9051612343565b8880fd5b3d9150612358565b85513d8b823e3d90fd5b5081602073ffffffffffffffffffffffffffffffffffffffff600354168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa9081156123835789916123f0575b50151561204b565b90506020813d8211612419575b8161240a6020938361424d565b810103126123775751386123e8565b3d91506123fd565b5081602073ffffffffffffffffffffffffffffffffffffffff600254168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa908115612383578991612484575b501515612044565b90506020813d82116124ad575b8161249e6020938361424d565b8101031261237757513861247c565b3d9150612491565b5081602073ffffffffffffffffffffffffffffffffffffffff600554168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa908115612383578991612518575b50151561203d565b90506020813d8211612541575b816125326020938361424d565b81010312612377575138612510565b3d9150612525565b8780fd5b508290346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee57358015158091036103ee5768ff00000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff916125be6140f8565b600a54931b16911617600a5580f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57803573ffffffffffffffffffffffffffffffffffffffff81168091036103ee576126256140f8565b7fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905580f35b5082346103ee57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee57612687613fd2565b916024359061269e60ff600a5460281c1615614177565b6126ac6002865414156142f3565b6002855563ffffffff906126f0600160ff610f0285891698898b52600b602052611d3a73ffffffffffffffffffffffffffffffffffffffff8a8d205416331461479d565b633b9aca008084029084820414841517156127f25761209661272191878952600b6020526001878a2001549061439a565b848652600b6020526003848720015483111561279557509061108b7fd943474c63c070d3b7d0ed9a3046d9ac93b895196392744b4df78c5a6bd0b2249392858752600b60205282600285892001558387205460c01c1692519283928390929163ffffffff6020916040840195845216910152565b60649060208551917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601f60248201527f486173206f6666657220686967686572207468616e206e6577207072696365006044820152fd5b6024876011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b503461046f57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57612855613fd2565b9261285e613fea565b9161286d6002855414156142f3565b6002845563ffffffff80931691828552602091600e835273ffffffffffffffffffffffffffffffffffffffff82872054163303612a6d57838652600e8352848287205460a81c169480881680961480612a55575b156129f9576128fa600160ff6104fb7f249b2345400f7e0ba24bddfab725b2c04e94901fd6e0215688cd135f10e79ce998999a9b614a71565b858852600e8452612916600160ff858b205460a01c16146148aa565b858852600e845261292d6001848a20015433614ed0565b868852600b845260058389200154168752600e8352818720740300000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff825416179055858752600b83528187200154600382882001556005818720017fffffffffffffffff0000000000000000000000000000000000000000ffffffff81541690556005818720017fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000815416905551428152a36001815580f35b508260649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601060248201527f49447320646f206e6f74206d61746368000000000000000000000000000000006044820152fd5b50858752600b845284816005858a20015416146128c1565b8260649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f43616c6c6572206973206e6f74204f66666572657200000000000000000000006044820152fd5b823461152957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261152957612aff6140f8565b8073ffffffffffffffffffffffffffffffffffffffff6001547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50503461152957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126115295763ffffffff612ba88160105416614b2d565b9160018092819281600c5416925b612bd0575b86516020808252819061168d908201896140be565b818416838111612c21579085918260ff612be988614a71565b1603612c165781612c0991612c0386612c0f95168b614bb6565b52614438565b94614438565b9390612bb6565b5093612c0f90614438565b50612bbb565b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57612c5f6140f8565b3560095580f35b508290346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5761168d9263ffffffff612ca9613fd2565b168152600e6020528281205460a01c60ff16600103612ce0575050612ccc614c75565b905b51918291602083526020830190614060565b8281205460a01c60ff16600203612d2e5750508051612cfe81614202565b600881527f6f75746f66666572000000000000000000000000000000000000000000000000602082015290612cce565b82600360ff8284205460a01c1614600014612d5457505050612d4e614c3c565b90612cce565b90205460a01c60ff1603612d6a57612d4e614c03565b612d4e614bca565b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600754169051908152f35b5091903461152957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611529575073ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b5082906020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db557612e4e613fd2565b9160ff600a5460381c168015613341575b80156132b1575b8015613221575b8015613182575b612e7d9061428e565b6002612e8c81875414156142f3565b808655612e9f600160ff611d3f87614a71565b63ffffffff80941694858752600b92838552612ec586838a205460c01c164211156149ff565b868852838552828289200154340361310157509160c093917fd972ee7b1a13e217eb515ce7f71416b4a86b4f52c0f446d5327b3a160810b16395938789528284526005818a20017a0100000000000000000000000000000000000000000000000000007fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff8254161790556010547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000086612f7f818416614703565b1691161760105587895282845273ffffffffffffffffffffffffffffffffffffffff94856005838c200154861c161515806130f2575b61307d575b50878952828452612710612fdc83838c20015461ffff601054881c1690614358565b0492888a528085526130378a6130158b600186612ffe8a8a8388200154614a64565b948c60075416938152878c52200154903390614734565b613026868960105460301c16614ed0565b8a8c5282875287848d205416614ed0565b888a528452846005828b200154851c1694818a20541682828b20015492828b200154948251968752860152840152606083015285608083015260a0820152a26001815580f35b613098866005848d200154871c166003848d20015490614ed0565b888a528385526005828b200154168952600e8452808920740200000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff82541617905589612fba565b506003828b2001541515612fb5565b8460849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602860248201527f4554482056616c7565206d75737420626520657175616c20746f206c6973746960448201527f6e672070726963650000000000000000000000000000000000000000000000006064820152fd5b5060248273ffffffffffffffffffffffffffffffffffffffff8354168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa80156132175786906131e4575b15159050612e74565b508281813d8311613210575b6131fa818361424d565b8101031261320c57612e7d90516131db565b8580fd5b503d6131f0565b85513d88823e3d90fd5b5060248273ffffffffffffffffffffffffffffffffffffffff600354168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa908115613217578691613284575b501515612e6d565b90508281813d83116132aa575b61329b818361424d565b8101031261320c57518661327c565b503d613291565b5060248273ffffffffffffffffffffffffffffffffffffffff600254168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa908115613217578691613314575b501515612e66565b90508281813d831161333a575b61332b818361424d565b8101031261320c57518661330c565b503d613321565b5060248273ffffffffffffffffffffffffffffffffffffffff600554168651928380927f70a0823100000000000000000000000000000000000000000000000000000000825233878301525afa9081156132175786916133a4575b501515612e5f565b90508281813d83116133ca575b6133bb818361424d565b8101031261320c57518661339c565b503d6133b1565b5082346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5761168d9061340e613fd2565b63ffffffff9081168552600e60205281852080546001918201549673ffffffffffffffffffffffffffffffffffffffff82169660a883901c9094169392909160a01c60ff1603613484575050613462614c75565b915b805195869586526020860152840152608060608401526080830190614060565b8381205460a01c60ff166002036134d257505081516134a281614202565b600a81527f6f75744f66666572656400000000000000000000000000000000000000000000602082015291613464565b83600360ff8284205460a01c16146000146134f8575050506134f2614c3c565b91613464565b90205460a01c60ff160361350e576134f2614c03565b6134f2614bca565b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209063ffffffff601054169051908152f35b508290346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee573573ffffffffffffffffffffffffffffffffffffffff81168091036103ee5782829160209452600f845220549051908152f35b508290346103ee5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee5760ff906101a0938363ffffffff9182613607613fd2565b168152600b602052209081549160018101549360028201546005600384015492840154930154958851988573ffffffffffffffffffffffffffffffffffffffff978881168c52818160a01c1660208d015260c01c16908a01526060890152608088015260a087015260c0860152821660e08501528160201c1661010084015261ffff8160c01c16610120840152818160d01c161515610140840152818160d81c16151561016084015260e01c161515610180820152f35b5082346103ee576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610db5576136f8613fd2565b6137066002865414156142f3565b6002855563ffffffff80821694858752600b8452600360ff61375573ffffffffffffffffffffffffffffffffffffffff95611d3a8b888b8181842054163314928315613975575b50505061490f565b160361391957507fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff93929161108b91868852600b84526005858920017c01000000000000000000000000000000000000000000000000000000007fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8254161790557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060105491613806818416614703565b16911617601055858752600b83528060058589200154841c1615158061390a575b6138af575b613847816007541682868a2054166001878b20015491614734565b858752600b8352838720805460018201546005830154600390930154965191841673ffffffffffffffffffffffffffffffffffffffff908116835260208301919091529190941c909116166040830152606082019290925233608082015290819060a0820190565b6138ca816005868a200154851c166003868a20015490614ed0565b858752600b83526005848820017fffffffffffffffff0000000000000000000000000000000000000000ffffffff8154169055866003858220015561382c565b50600384882001541515613827565b606490848651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601760248201527f4c697374696e6720686173206e6f7420657870697265640000000000000000006044820152fd5b60059293502001548a1c163314888b8e61374d565b82346115295760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611529576139c261404f565b6139ca6140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff64ffff000000600a549260181b16911617600a5580f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff60105460301c169051908152f35b508290346103ee57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103ee57613a91613fd2565b91613a9a613fea565b91613aad60ff600a5460281c1615614177565b613abb6002865414156142f3565b6002855563ffffffff613afe600160ff610f0284891698898b52600b602052611d3a73ffffffffffffffffffffffffffffffffffffffff898d205416331461479d565b429084161115613ba45750828452600b60205280842080547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c084901b7bffffffff000000000000000000000000000000000000000000000000161790557fd943474c63c070d3b7d0ed9a3046d9ac93b895196392744b4df78c5a6bd0b224919080852060020154905190815263ffffffff9091166020820152806040810161108b565b602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601760248201527f456e642074696d6520616c7265616479207061737365640000000000000000006044820152fd5b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209061ffff600a5460181c169051908152f35b5082346103ee577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573573ffffffffffffffffffffffffffffffffffffffff8116810361046f5760243561ffff811681036103ee57613ca76140f8565b7fffffffffffff00000000000000000000000000000000000000000000ffffffff79ffffffffffffffffffffffffffffffffffffffff00000000000065ffff000000006010549360201b169360301b169116171760105580f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209060ff600a5460301c1690519015158152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57602090613d81614ce2565b9051908152f35b82843461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57600a548151911c60ff1615158152602090f35b82843461046f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f57613e03613fd2565b6024359263ffffffff8092168152600d6020528281209081548510156115295750602093613e3091613ffd565b92905490519260031b1c168152f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573580151580910361046f57613e826140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff65ff0000000000600a549260281b16911617600a5580f35b503461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f573580151580910361046f57613efe6140f8565b7fffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff67ff00000000000000600a549260381b16911617600a5580f35b82843461046f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209060ff613f7a611d3a613fd2565b915191168152f35b83903461046f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046f5760209073ffffffffffffffffffffffffffffffffffffffff600854168152f35b6004359063ffffffff82168203613fe557565b600080fd5b6024359063ffffffff82168203613fe557565b919091805483101561402057600052601c60206000208360031c019260021b1690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6004359061ffff82168203613fe557565b919082519283825260005b8481106140aa5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b60208183018101518483018201520161406b565b90815180825260208080930193019160005b8281106140de575050505090565b835163ffffffff16855293810193928101926001016140d0565b73ffffffffffffffffffffffffffffffffffffffff60015416330361411957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b1561417e57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f436f6e74726163742069732050617573656420746f206e6577206c697374696e60448201527f67730000000000000000000000000000000000000000000000000000000000006064820152fd5b6040810190811067ffffffffffffffff82111761421e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761421e57604052565b1561429557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d75737420686f6c642061204d657461746f706961204e4654000000000000006044820152fd5b156142fa57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b8181029291811591840414171561436b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81156143a4570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b156143da57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e6720507269636520746f6f206c6f7700000000000000000000006044820152fd5b63ffffffff80911690811461436b5760010190565b90816020910312613fe557518015158103613fe55790565b73ffffffffffffffffffffffffffffffffffffffff16906040519061448982614202565b6020928383527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656484840152803b1561458457600082819282876144db9796519301915af16144d56145e2565b90614640565b805190816144e857505050565b82806144f893830101910161444d565b156145005750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b606484604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b3d1561463b573d9067ffffffffffffffff821161421e576040519161462f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461424d565b82523d6000602084013e565b606090565b9091901561464c575090565b81511561465c5750805190602001fd5b61469a906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190614060565b0390fd5b156146a557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e67206973206e6f742061637469766500000000000000000000006044820152fd5b63ffffffff16801561436b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448083019390935291815261479b9161479660648361424d565b614465565b565b156147a457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4f6e6c79204c69737465722063616e20656469740000000000000000000000006044820152fd5b1561480957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f546f706961204c697374696e67206973206e6f742041637469766500000000006044820152fd5b80546801000000000000000081101561421e5761488991600182018155613ffd565b819291549060031b9163ffffffff9283811b93849216901b16911916179055565b156148b157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f66666572206973206e6f7420616374697665000000000000000000000000006044820152fd5b1561491657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f6e6c79204c69737465722063616e20616363657074206f66666572000000006044820152fd5b1561497b57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c697374696e672068617320616c7265616479206265656e20736574746c656460448201527f206f722063616e63656c656400000000000000000000000000000000000000006064820152fd5b15614a0657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c697374696e67206861732065787069726564000000000000000000000000006044820152fd5b9190820391821161436b57565b63ffffffff80600092168252600b60205260409060ff6005838520015460d81c16614af957808284205460c01c16421180614b01575b614af95760ff6005838520015460d01c16614af1578183205460c01c164211159081614adc575b50614ad65790565b50600190565b82206005015460d01c60ff1615905038614ace565b505050600290565b505050600390565b5060ff6005838520015460d01c1615614aa7565b67ffffffffffffffff811161421e5760051b60200190565b90614b3782614b15565b614b44604051918261424d565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0614b728294614b15565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461436b5760010190565b8051156140205760200190565b80518210156140205760209160051b010190565b60405190614bd782614202565b600f82527f696e76616c6964204f66666572494400000000000000000000000000000000006020830152565b60405190614c1082614202565b600882527f61636365707465640000000000000000000000000000000000000000000000006020830152565b60405190614c4982614202565b600882527f63616e63656c65640000000000000000000000000000000000000000000000006020830152565b60405190614c8282614202565b600682527f61637469766500000000000000000000000000000000000000000000000000006020830152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff8093160191821161436b57565b600a5460ff811615614cf5575060095490565b6040805167ffffffffffffffff90606081018281118282101761421e57835260028152602090818101908436833773ffffffffffffffffffffffffffffffffffffffff918260075416614d4783614ba9565b52826006541682519060019182101561402057878493929594015282600854169287519485937fe815c4660000000000000000000000000000000000000000000000000000000085526064850190662386f26fc10000600487015260606024870152518091526084850193926000905b89838310614eb65750505050505091818060009485604483015203915afa928315614eab57600093614e1f575b505050614df19150614ba9565b519081156143a4576127109161ffff614e1b9260081c16906a084595161401484a00000004614358565b0490565b929091923d8083853e614e32818561424d565b83019284818503126103ee5780519182116103ee570182601f8201121561046f57805191614e6b614e6284614b15565b9651968761424d565b828652848087019360051b83010193841161152957508301905b828210614e9c5750505050614df190388080614de4565b81518152908301908301614e85565b84513d6000823e3d90fd5b855182168752899750958601959094019390830190614db7565b91906000604091825194602086019567ffffffffffffffff9681811088821117615079578552839052828080808585617530f1614f0b6145e2565b5015614f1a575b505050509050565b73ffffffffffffffffffffffffffffffffffffffff958660065416803b156103ea579084849260048851809581937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1801561506f5761502b575b505060065484517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201929092529394602091859116818481604481015b03925af1918215615021575050614ff3575b8080808493614f12565b6150139060203d811161501a575b61500b818361424d565b81019061444d565b5038614fe9565b503d615001565b51903d90823e3d90fd5b819794971161504257845291949180614fd7614f78565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b86513d87823e3d90fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fdfea2646970667358221220605e04b7c58f08105bbaed13c13a4847db33f592ff86bd0096dae537f6d8043964736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000041473032b82a4205ddde155cc7ed210b000b014d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000810fedb4a6927d02a6427f7441f6110d7a1096d500000000000000000000000096af517c414b3726c1b2ecc744ebf9d292dcbf600000000000000000000000000b21144dbf11feb286d24cd42a7c3b0f90c32ac800000000000000000000000069fde1a7d6837cd7e82b0bbedcbad40f487fdb050000000000000000000000003b505af97031b75e2be39e7f8fa1fa634857f29d00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000090ad10000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001388000000000000000000000000ca87b367554b1a92b41923f789d1ffc9dc2cca3d00000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : _topia (address): 0x41473032b82a4205DDDe155CC7ED210B000b014D
Arg [1] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _genesis (address): 0x810FeDb4a6927D02A6427f7441F6110d7A1096d5
Arg [3] : _alpha (address): 0x96Af517c414B3726c1B2Ecc744ebf9d292DCbF60
Arg [4] : _rats (address): 0x0b21144dbf11feb286d24cD42A7c3B0f90c32aC8
Arg [5] : _hub (address): 0x69fdE1A7d6837cD7E82B0BbedcbAd40F487Fdb05
Arg [6] : _router (address): 0x3b505Af97031B75e2be39e7F8FA1Fa634857f29D
Arg [7] : _minOfferIncrementPercentage (uint16): 100
Arg [8] : _minListPrice (uint256): 592593
Arg [9] : _minListPercent (uint16): 8000
Arg [10] : _minOfferPercent (uint16): 5000
Arg [11] : _taxWallet (address): 0xCa87b367554B1A92b41923F789d1ffc9DC2CCA3d
Arg [12] : _tax (uint16): 500
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000041473032b82a4205ddde155cc7ed210b000b014d
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 000000000000000000000000810fedb4a6927d02a6427f7441f6110d7a1096d5
Arg [3] : 00000000000000000000000096af517c414b3726c1b2ecc744ebf9d292dcbf60
Arg [4] : 0000000000000000000000000b21144dbf11feb286d24cd42a7c3b0f90c32ac8
Arg [5] : 00000000000000000000000069fde1a7d6837cd7e82b0bbedcbad40f487fdb05
Arg [6] : 0000000000000000000000003b505af97031b75e2be39e7f8fa1fa634857f29d
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [8] : 0000000000000000000000000000000000000000000000000000000000090ad1
Arg [9] : 0000000000000000000000000000000000000000000000000000000000001f40
Arg [10] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [11] : 000000000000000000000000ca87b367554b1a92b41923f789d1ffc9dc2cca3d
Arg [12] : 00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode Sourcemap
381:21816:10:-:0;;;;;;;;;;;;;-1:-1:-1;381:21816:10;;;;;;;;;;;22178:9;381:21816;;22157:31;381:21816;22166:10;22157:31;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;2169:22;;381:21816:10;;;;2525:6:0;381:21816:10;;;;;;2525:6:0;381:21816:10;;2573:40:0;;;;381:21816:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;381:21816:10;;6378:25;381:21816;;;;;;;;6378:25;381:21816;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3352:18;381:21816;;;;;;;3352:51;;;;381:21816;3352:88;;;;381:21816;3352:123;;;;381:21816;3352:157;;;;381:21816;3344:195;;;:::i;:::-;2317:63:1;1744:1;381:21816:10;;2325:19:1;;2317:63;:::i;:::-;1744:1;381:21816:10;;10492:63;10522:1;381:21816;10500:18;;;:::i;:::-;381:21816;10500:23;10492:63;:::i;:::-;381:21816;;;;;;;;;10591:9;381:21816;;;;;;;;;;;10573:15;:40;381:21816;;;;;;;;;1744:1:1;381:21816:10;;;10664:27;381:21816;10651:9;:40;381:21816;;;;;;;;10760:45;1744:1:1;381:21816:10;;;10760:27;381:21816;10808:5;381:21816;;;;;;;;;10760:45;;:::i;:::-;381:21816;10651:9;10747:66;381:21816;;;;;;;;;;;10903:27;;381:21816;10965:27;381:21816;;;;10935:57;;381:21816;;;;;10935:57;:::i;:::-;381:21816;;;;;;;;10651:9;10890:112;381:21816;;;;;;;;;;;;;;;11114:10;:35;381:21816;;;;;;;;11222:22;381:21816;;;11222:22;381:21816;;;;;11272:16;381:21816;;;;;;;11272:16;381:21816;;11272:16;;;:::i;:::-;381:21816;;;;;;11272:16;381:21816;11353:25;11349:267;;381:21816;;;;;;;;10651:9;10903:27;381:21816;;;11626:27;381:21816;11222:22;381:21816;;;11675:22;381:21816;;;;11114:10;381:21816;;;;;;;;11222:22;381:21816;;;11729:28;381:21816;;;;;;;;11222:22;381:21816;;;11778:27;381:21816;;;;;;;;;;;;;;;;12050:10;381:21816;;;;10522:1;12103:49;381:21816;;;;;;;;;;;;;;;11817:18;381:21816;;11817:38;381:21816;;;;11817:38;:::i;:::-;381:21816;;;11865:7;381:21816;;;;;11114:10;381:21816;;;;;;;10651:9;10522:1;381:21816;;;11913:29;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11114:10;381:21816;;;12050:37;381:21816;;;;12050:37;:::i;:::-;381:21816;11114:10;381:21816;;10651:9;381:21816;;;;;;12103:49;10522:1;381:21816;;;;;;;;;;;;;;11349:267;381:21816;;;;;;;;;10903:27;11436;381:21816;11394:70;;;:::i;:::-;381:21816;;;;;;;;;11222:22;11488:28;381:21816;;;;11480:7;381:21816;;;;;;;;;;;;;;;;;;;;;;10903:27;11578;;381:21816;11547:28;;;381:21816;11349:267;;;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3352:157;381:21816;;;;;;;;;3479:26;;;;381:21816;3479:26;;3494:10;3479:26;;;381:21816;3479:26;;;;;;;;;;3352:157;3479:30;;;-1:-1:-1;3352:157:10;;3479:26;;;;;;;;;;;;;;;:::i;:::-;;;381:21816;;;;3344:195;381:21816;;3479:26;;381:21816;;;;3479:26;;;;;;381:21816;;;;;;;;;3352:123;381:21816;;;;3444:5;381:21816;;;;3444:27;;;;381:21816;3444:27;;3460:10;3444:27;;;381:21816;3444:27;;;;;;;;;;;3352:123;3444:31;;;3352:123;;3444:27;;;;;;;;;;;;;;;;:::i;:::-;;;381:21816;;;;;3444:27;;;;;;;;3352:88;381:21816;;;;3407:7;381:21816;;;;3407:29;;;;381:21816;3407:29;;3425:10;3407:29;;;381:21816;3407:29;;;;;;;;;;;3352:88;3407:33;;;3352:88;;3407:29;;;;;;;;;;;;;;;;:::i;:::-;;;381:21816;;;;;3407:29;;;;;;;;3352:51;381:21816;;;;3374:3;381:21816;;;;3374:25;;;;381:21816;3374:25;;3388:10;3374:25;;;381:21816;3374:25;;;;;;;;;;;3352:51;3374:29;;;3352:51;;3374:25;;;;;;;;;;;;;;;;:::i;:::-;;;381:21816;;;;;3374:25;;;;;;;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;2609:40;381:21816;;;;2609:40;381:21816;;2609:40;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2317:63:1;1744:1;381:21816:10;;2325:19:1;;2317:63;:::i;:::-;1744:1;381:21816:10;;;;;;;;;;;8335:9;381:21816;;;;;;;;;;;;8321:10;:35;381:21816;;8401:18;;9080:136;8401:18;;;;8393:57;8423:1;381:21816;8401:18;9080:136;8401:18;;:::i;:::-;381:21816;8401:23;8393:57;:::i;:::-;381:21816;;;;;;8460:23;381:21816;;;;;8460:23;381:21816;;;;;;;;;;;;;8504:22;381:21816;;;;8504:36;;:71;;;381:21816;8501:352;;381:21816;;8862:20;381:21816;;8862:20;381:21816;;;8862:20;:::i;:::-;381:21816;;;;8862:20;381:21816;8892:69;381:21816;8892:5;381:21816;;;;;;;;;;;;;;8423:1;381:21816;;;8934:26;381:21816;8892:69;;:::i;:::-;381:21816;;;;;;;;;;;8423:1;9021:26;;;381:21816;;;;;;;;;;;;;;9049:15;381:21816;;;;;;8977:88;;381:21816;;8977:88;381:21816;;;;;;;;;;8423:1;9124:26;;381:21816;9152:22;;;381:21816;9176:27;;;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8321:10;381:21816;;;;;;;;;;;;9080:136;;;;8423:1;381:21816;;;;8501:352;8591:81;381:21816;;;;;8620:22;381:21816;;;;8644:27;381:21816;;;8644:27;381:21816;8591:81;;:::i;:::-;381:21816;;;;;;;;;;8686:22;381:21816;;;;;;;8644:27;381:21816;;;8744:27;381:21816;;;;;;8797:28;381:21816;;;;8789:7;381:21816;;;;;;;;;;;;;8501:352;;8504:71;381:21816;8544:27;381:21816;;;8544:27;381:21816;8544:31;;8504:71;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;519:19;381:21816;;;;;;;;;;;;;;;;;;;;;;;;1194:20;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;544:17;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;381:21816:10;;7164:29;381:21816;;;;;7164:29;381:21816;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18622:18;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;20681:9;381:21816;;20668:23;;;;:::i;:::-;381:21816;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;20757:1;20746:12;;;20757:1;;;20742:128;381:21816;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20775:3;381:21816;;;;;;;;;;;;20760:13;;;;;;;20803:5;;20775:3;20803:5;20794:19;20803:5;;;;:::i;:::-;381:21816;20794:19;;:::i;:::-;381:21816;20843:16;;;:::i;:::-;381:21816;20827:32;20834:5;;;;:::i;:::-;381:21816;20827:32;;:::i;:::-;381:21816;;;;20775:3;:::i;:::-;20746:12;;;;;;;;;;20760:13;;;;;;;;;;;;;381:21816;;;;;;;;;;;;;;:::i;:::-;1063:62:0;;:::i;:::-;381:21816:10;;7279:25;381:21816;;;;;;;;7279:25;381:21816;;;;;;;;;;;;;;;;;;;;;;691:19;381:21816;;;;;;;;;;;;;;;;;;;;;;;;1262:35;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;629:15;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;17933:18;381:21816;;;;;;;;17984:20;;;;:::i;:::-;18018:10;;18030;;;;;;381:21816;;;;;;;;;;;;:::i;:::-;;;;18042:3;;381:21816;;;;;;;;18075:26;381:21816;;;;18075:26;:::i;:::-;381:21816;;;;;;;18061:40;;;;:::i;:::-;381:21816;18042:3;:::i;:::-;18018:10;;381:21816;;;;;;;;;;;;;;6137:71;381:21816;;;;:::i;:::-;1063:62:0;;;:::i;:::-;6063:58:10;381:21816;;;;;;;;;;6063:58;381:21816;;;;;;6137:71;381:21816;;;;;;;;;;;;;;;2739:17;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;17063:136;381:21816;;;:::i;:::-;2317:63:1;1744:1;381:21816:10;;2325:19:1;;2317:63;:::i;:::-;1744:1;381:21816:10;;1063:62:0;;:::i;:::-;16376:57:10;16406:1;381:21816;16384:18;;;:::i;16376:57::-;17063:136;381:21816;;;;;;;;16443:9;381:21816;;16443:23;381:21816;;;;;16443:23;381:21816;;;;;;;;;;;;;;;16487:22;381:21816;;;;16487:36;;:71;;;381:21816;16484:352;;381:21816;;16845:20;381:21816;;16845:20;381:21816;;;16845:20;:::i;:::-;381:21816;;;;16845:20;381:21816;16875:69;381:21816;16875:5;381:21816;;;;;16443:9;381:21816;;;;;;;;16406:1;381:21816;;;16917:26;381:21816;16875:69;;:::i;:::-;381:21816;;;16443:9;381:21816;;;;;;;16406:1;17004:26;;;381:21816;;;;;;;;;;;;;;17032:15;381:21816;;;;;;16960:88;;381:21816;;16960:88;381:21816;;;16443:9;381:21816;;;;;;;16406:1;17107:26;;381:21816;17135:22;;;381:21816;17159:27;;;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17188:10;381:21816;;;;;;;;;;;;16484:352;16574:81;381:21816;;;;;16603:22;381:21816;;;;16627:27;381:21816;;;16627:27;381:21816;16574:81;;:::i;:::-;381:21816;;;16443:9;381:21816;;;;;;16669:22;381:21816;;;;;;;16627:27;381:21816;;;16727:27;381:21816;;;;;;16780:28;381:21816;;;;16772:7;381:21816;;;;;;;;;;;;;16484:352;;16487:71;381:21816;16527:27;381:21816;;;16527:27;381:21816;16527:31;;16487:71;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;18240:10;381:21816;;;;;;;;18285:20;;;;:::i;:::-;18319:10;;18331;;;;;;381:21816;;;;;;;;;;;;:::i;18343:3::-;;381:21816;;;;;;;;18376:20;381:21816;;;;18376:20;:::i;18343:3::-;18319:10;;381:21816;;;;;;;;;;;;;18499:14;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;919:41;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;1273:6:0;381:21816:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;381:21816:10;6795:16;381:21816;;;6795:16;381:21816;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2317:63:1;1744:1;381:21816:10;;2325:19:1;;2317:63;:::i;:::-;1744:1;381:21816:10;;;;;;;;;;;13223:80;13253:1;381:21816;13231:18;13159:9;381:21816;;;;13137:76;381:21816;;;;;;;;13145:10;:35;13137:76;:::i;:::-;13231:18;:::i;:::-;381:21816;13231:23;13223:80;:::i;:::-;381:21816;;;;;;13313:73;381:21816;;;;;;;;13321:15;:41;;13313:73;:::i;:::-;381:21816;;;;;;13404:22;381:21816;;;;;;13404:22;381:21816;;;;13404:36;381:21816;;;;;;;;;;14071:141;381:21816;;;;;;;;;;;;;13488:28;381:21816;;;;13480:7;381:21816;;13472:86;13253:1;381:21816;;;;;;;;13480:54;13472:86;:::i;:::-;381:21816;;;;;;;;;;13569:22;381:21816;;;;;;;;13925:67;381:21816;;;13695:5;13659:33;381:21816;;;13659:27;381:21816;13608:20;381:21816;;;13608:20;381:21816;;;13608:20;:::i;:::-;381:21816;;;;;;13608:20;381:21816;;;;;;;;13659:27;381:21816;;;;13659:33;;:::i;:::-;381:21816;;;;;;;;13735:39;381:21816;13659:27;381:21816;;;13735:27;381:21816;13735:39;:::i;:::-;381:21816;13785:70;381:21816;;;13785:5;381:21816;;;;;;;;;;;;;13804:22;381:21816;;;;13253:1;381:21816;;;13828:26;381:21816;13785:70;;:::i;:::-;13865:50;381:21816;;13608:20;381:21816;;;;13865:50;:::i;:::-;381:21816;;;;;;;;13925:67;:::i;:::-;381:21816;;;;;;;;;;14010:28;381:21816;;;;13480:7;381:21816;;;;;;;;;;;;;;;;;;;;;14091:22;381:21816;;;;;;;;;;;13659:27;381:21816;;;14138:27;381:21816;;1744:1:1;381:21816:10;;;14184:27;381:21816;;;;;;;;;;;;;;;;;13253:1;381:21816;;;;;;;;14071:141;13253:1;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3603:8;381:21816;3594:56;381:21816;;;;;3602:9;3594:56;:::i;:::-;381:21816;;;2845:50;;;;381:21816;2845:87;;;;381:21816;2845:122;;;;381:21816;2845:156;;;;381:21816;2837:194;;;:::i;:::-;2317:63:1;1744:1;381:21816:10;;2325:19:1;;2317:63;:::i;:::-;1744:1;381:21816:10;;7597:5;381:21816;;;;;;;;;;;;;;7580:38;7997:40;7580:38;;7572:90;7580:38;;;;;:::i;:::-;7622:14;;:::i;:::-;-1:-1:-1;7580:56:10;7572:90;:::i;:::-;381:21816;1744:1:1;381:21816:10;7744:11;381:21816;;;;;7744:11;;;;;;:::i;:::-;381:21816;;;;;;7744:11;381:21816;;;7766:9;381:21816;;;;;7805:10;381:21816;;;;;;;;;;;;7826:33;381:21816;;7884:34;381:21816;;;;;;;;7698:15;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;7997:40;8047:20;381:21816;;;8047:20;381:21816;;;8047:20;:::i;:::-;381:21816;;;;8047:20;381:21816;;8078:5;381:21816;;;;;1139:68:4;381:21816:10;;1139:68:4;;;7805:10:10;1139:68:4;;;381:21816:10;8121:4;381:21816;;;;;;;;;;1139:68:4;;381:21816:10;;;;;;;;;;;;;;;;;8157:76;381:21816;;;;1139:68:4;381:21816:10;;;;;1139:68:4;:::i;:::-;381:21816:10;;7698:15;;381:21816;;;;;;;;;;;;;;8157:76;381:21816;;;;;;;;;;;;;;;;;;;;;;;;2845:156;381:21816;;;;;;;;;2971:26;;;;381:21816;2971:26;;2986:10;2971:26;;;381:21816;2971:26;;;;;;;;;;2845:156;2971:30;;;-1:-1:-1;2845:156:10;;2971:26;;381:21816;2971:26;;;;;;;;;381:21816;2971:26;;;:::i;:::-;;;381:21816;;;;2837:194;381:21816;;2971:26;;381:21816;;;;2971:26;;;-1:-1:-1;2971:26:10;;;381:21816;;;;;;;;;2845:122;381:21816;;;;2936:5;381:21816;;;;2936:27;;;;381:21816;2936:27;;2952:10;2936:27;;;381:21816;2936:27;;;;;;;;;;;2845:122;2936:31;;;2845:122;;2936:27;;;381:21816;2936:27;;;;;;;;;381:21816;2936:27;;;:::i;:::-;;;381:21816;;;;;2936:27;;;;;;-1:-1:-1;2936:27:10;;2845:87;381:21816;;;;2899:7;381:21816;;;;2899:29;;;;381:21816;2899:29;;2917:10;2899:29;;;381:21816;2899:29;;;;;;;;;;;2845:87;2899:33;;;2845:87;;2899:29;;;381:21816;2899:29;;;;;;;;;381:21816;2899:29;;;:::i;:::-;;;381:21816;;;;;2899:29;;;;;;-1:-1:-1;2899:29:10;;2845:50;381:21816;;;;2866:3;381:21816;;;;2866:25;;;;381:21816;2866:25;;2880:10;2866:25;;;381:21816;2866:25;;;;;;;;;;;2845:50;2866:29;;;2845:50;;2866:25;;;381:21816;2866:25;;;;;;;;;381:21816;2866:25;;;:::i;:::-;;;381:21816;;;;;2866:25;;;;;;-1:-1:-1;2866:25:10;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;;:::i;:::-;6589:26:10;381:21816;;;;;;;6589:26;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;381:21816:10;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;3594:56;381:21816;3603:8;381:21816;;;;3602:9;3594:56;:::i;:::-;2317:63:1;1744:1;381:21816:10;;2325:19:1;;2317:63;:::i;:::-;1744:1;381:21816:10;;;;9410:57;381:21816;;9418:18;381:21816;;;;;;;9354:9;381:21816;;9332:68;381:21816;;;;;;9340:10;:35;9332:68;:::i;9410:57::-;9502:5;381:21816;;;;;;;;;;;;;;9485:52;9477:104;381:21816;;;;9354:9;381:21816;;;;;;9511:26;381:21816;9485:52;;:::i;9477:104::-;381:21816;;;9354:9;381:21816;;9615:27;381:21816;;;9615:27;381:21816;9599:43;;381:21816;;;;;9748:57;;381:21816;;;;;9354:9;381:21816;;;1744:1:1;381:21816:10;;;9689:27;381:21816;;;;;;;;;;9748:57;;;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;2317:63:1;1744:1;381:21816:10;;2325:19:1;;2317:63;:::i;:::-;1744:1;381:21816:10;;;;;;;;;;;;12255:7;381:21816;;;;;;;;12284:10;12255:39;381:21816;;;;;12255:7;381:21816;;;;;;;;;;;;;;12338:34;;;:78;;;381:21816;;;;12447:63;12477:1;381:21816;12455:18;12920:45;12455:18;;;;;:::i;12447:63::-;381:21816;;;12255:7;381:21816;;12520:66;12477:1;381:21816;;;;;;;;12528:34;12520:66;:::i;:::-;381:21816;;;12255:7;381:21816;;12597:80;12477:1;381:21816;;;12647:29;381:21816;12284:10;12597:80;:::i;:::-;381:21816;;;12695:9;381:21816;;12695:28;381:21816;;;12695:28;381:21816;;;;12255:7;381:21816;;;;;;;;;;;;;;;;12695:9;381:21816;;;;;12780:28;381:21816;12739:1;381:21816;;;12750:27;381:21816;12695:28;381:21816;;;12818:22;381:21816;;;;;;12695:28;381:21816;;;12872:28;381:21816;;;;;;;12949:15;381:21816;;12920:45;12477:1;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;12338:78;381:21816;;;;12376:9;381:21816;;;;12376:28;381:21816;;;12376:28;381:21816;;12376:40;12338:78;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;381:21816:10;;2525:6:0;381:21816:10;;;;2525:6:0;381:21816:10;;2573:40:0;;;;381:21816:10;;;;;;;;;;;;;;;;20273:20;381:21816;20227:18;381:21816;;20273:20;:::i;:::-;20303:12;20340:1;20329:12;;;381:21816;;20348:9;381:21816;;20325:212;20340:1;;;20325:212;381:21816;;;;;;;;;;;;;;:::i;20359:3::-;381:21816;;;20343:14;;;;;20381:16;;;;381:21816;20381:16;;;:::i;:::-;381:21816;20381:21;20340:1;;381:21816;20462:3;381:21816;20422:22;381:21816;20359:3;381:21816;;20422:22;;:::i;:::-;381:21816;20462:3;:::i;:::-;20378:149;20359:3;:::i;:::-;20329:12;;;;20378:149;20504:8;;20359:3;20504:8;20359:3;:::i;20343:14::-;;;;381:21816;;;;;;;;;;;;1063:62:0;;:::i;:::-;381:21816:10;7042:34;381:21816;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19668:7;381:21816;;;;;;;;;;19701:1;19668:34;19701:1;;381:21816;;;;:::i;:::-;19665:435;;381:21816;;;;;;;;;;;;:::i;19665:435::-;381:21816;;;;;;;;19794:1;19761:34;19794:1;;381:21816;;;;;;;:::i;:::-;;;;;;;;;19758:342;19665:435;;19758:342;381:21816;19889:1;381:21816;;;;;;;;19856:34;19853:247;19889:1;;;381:21816;;;;;:::i;:::-;19853:247;19665:435;;19853:247;381:21816;;;;;;;19951:34;381:21816;;;;:::i;19948:152::-;381:21816;;:::i;:::-;;;;;;;;;;;;;;;;758:19;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;3098:16;381:21816;;;;3098:49;;;;381:21816;3098:86;;;;381:21816;3098:121;;;;381:21816;3098:155;;;;381:21816;3090:193;;;:::i;:::-;1744:1:1;2317:63;381:21816:10;;;2325:19:1;;2317:63;:::i;:::-;381:21816:10;;;14307:80;14337:1;381:21816;14315:18;;;:::i;14307:80::-;381:21816;;;;;;;;14424:9;381:21816;;;;14397:73;381:21816;;;;;;;;14405:15;:41;;14397:73;:::i;:::-;381:21816;;;;;;;;;;14501:27;381:21816;14488:9;:40;381:21816;;;;;;;15270:142;381:21816;;;;;;;;14584:22;381:21816;;;14584:22;381:21816;;;;;;;;14623:20;381:21816;;;14623:20;381:21816;;;14623:20;:::i;:::-;381:21816;;;;14623:20;381:21816;;;;;;;;;;14584:22;381:21816;;;14657:22;381:21816;;;;14657:36;;:71;;;381:21816;14654:249;;381:21816;;;;;;;;14969:5;14933:33;381:21816;;;;14933:27;381:21816;;14623:20;381:21816;;;;14933:33;;:::i;:::-;381:21816;;;;;;;;15187:67;381:21816;15090:26;381:21816;14337:1;381:21816;15009:39;381:21816;;;;;15009:27;381:21816;15009:39;:::i;:::-;381:21816;;15059:5;381:21816;;;;;;;;;15090:26;381:21816;15078:10;;15090:26;;:::i;:::-;15127:50;381:21816;;14623:20;381:21816;;;;15127:50;:::i;:::-;381:21816;;;;;;;;;;;;15187:67;:::i;:::-;381:21816;;;;;;14584:22;381:21816;;;15290:22;381:21816;;;;;;;;;;;;;;15337:27;381:21816;;;;;15384:27;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;15270:142;14337:1;381:21816;;;;14654:249;14744:81;381:21816;14584:22;381:21816;;;14773:22;381:21816;;;;14797:27;381:21816;;;14797:27;381:21816;14744:81;;:::i;:::-;381:21816;;;;;;14584:22;381:21816;;;14847:28;381:21816;;;;14839:7;381:21816;;;;;;;;;;;;;14654:249;;;14657:71;381:21816;14697:27;381:21816;;;14697:27;381:21816;14697:31;;14657:71;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;3098:155;381:21816;;;;;;;;;3223:26;;;;381:21816;3223:26;;3238:10;3223:26;;;381:21816;3223:26;;;;;;;;;;3098:155;3223:30;;;-1:-1:-1;3098:155:10;;3223:26;;;;;;;;;;;;;;;:::i;:::-;;;381:21816;;;;3090:193;381:21816;;3223:26;;381:21816;;;;3223:26;;;;;;381:21816;;;;;;;;;3098:121;381:21816;;;;3188:5;381:21816;;;;3188:27;;;;381:21816;3188:27;;3204:10;3188:27;;;381:21816;3188:27;;;;;;;;;;;3098:121;3188:31;;;3098:121;;3188:27;;;;;;;;;;;;;;;;:::i;:::-;;;381:21816;;;;;3188:27;;;;;;;;3098:86;381:21816;;;;3151:7;381:21816;;;;3151:29;;;;381:21816;3151:29;;3169:10;3151:29;;;381:21816;3151:29;;;;;;;;;;;3098:86;3151:33;;;3098:86;;3151:29;;;;;;;;;;;;;;;;:::i;:::-;;;381:21816;;;;;3151:29;;;;;;;;3098:49;381:21816;;;;3118:3;381:21816;;;;3118:25;;;;381:21816;3118:25;;3132:10;3118:25;;;381:21816;3118:25;;;;;;;;;;;3098:49;3118:29;;;3098:49;;3118:25;;;;;;;;;;;;;;;;:::i;:::-;;;381:21816;;;;;3118:25;;;;;;;;381:21816;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;18975:7;381:21816;;;;;;;19025:29;;;;381:21816;;;;;;;;;;;;;;;;;;;;;19117:34;19025:29;;381:21816;;;;:::i;:::-;19114:437;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;:::i;19114:437::-;381:21816;;;;;;;;19243:1;19210:34;19243:1;;381:21816;;;;;;;:::i;:::-;;;;;;;;;19207:344;19114:437;;19207:344;381:21816;19340:1;381:21816;;;;;;;;19307:34;19304:247;19340:1;;;381:21816;;;;;:::i;:::-;19304:247;19114:437;;19304:247;381:21816;;;;;;;19402:34;381:21816;;;;:::i;19399:152::-;381:21816;;:::i;:::-;;;;;;;;;;;;;;;;2700:32;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18761:10;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;2238:43;381:21816;;;;;;2238:43;;;;381:21816;2238:43;;;;381:21816;2238:43;;;;381:21816;2238:43;;;381:21816;2238:43;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2317:63:1;1744:1;381:21816:10;;2325:19:1;;2317:63;:::i;:::-;1744:1;381:21816:10;;;;;;;;;;15520:9;381:21816;;15654:1;381:21816;15632:18;381:21816;;15498:116;381:21816;;;;;;;;;15506:10;:35;:75;;;;;381:21816;15498:116;;;;:::i;15632:18::-;381:21816;15632:23;381:21816;;;16141:136;381:21816;;;16141:136;381:21816;;;;15520:9;381:21816;;15693:21;381:21816;;;15693:21;381:21816;;;;;;;;;15731:20;381:21816;;15731:20;381:21816;;;15731:20;:::i;:::-;381:21816;;;;15731:20;381:21816;;;;15520:9;381:21816;;;15693:21;381:21816;;;15765:22;381:21816;;;;15765:36;;:71;;;381:21816;15762:285;;381:21816;16056:69;381:21816;16056:5;381:21816;;;;;;;;15717:4;381:21816;;;16098:26;381:21816;16056:69;;:::i;:::-;381:21816;;;15520:9;381:21816;;;;;;;15717:4;16185:26;;381:21816;15693:21;16213:22;;381:21816;15654:1;16237:27;;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15506:10;381:21816;;;;;;;;;;;;15762:285;15852:81;381:21816;15693:21;381:21816;;;15881:22;381:21816;;;;15654:1;381:21816;;;15905:27;381:21816;15852:81;;:::i;:::-;381:21816;;;15520:9;381:21816;;15693:21;381:21816;;;15947:22;381:21816;;;;;;;15654:1;381:21816;;;16005:27;381:21816;15762:285;;15765:71;381:21816;15654:1;381:21816;;;15805:27;381:21816;15805:31;;15765:71;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;15506:75;15559:22;381:21816;;;;15559:22;381:21816;;;;15506:10;15545:36;15506:75;;;;;381:21816;;;;;;;;;;;;;;:::i;:::-;1063:62:0;;:::i;:::-;381:21816:10;;7391:26;381:21816;;;;;;;;7391:26;381:21816;;;;;;;;;;;;;;;;;;;2762:32;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;3594:56;381:21816;3603:8;381:21816;;;;3602:9;3594:56;:::i;:::-;2317:63:1;1744:1;381:21816:10;;2325:19:1;;2317:63;:::i;:::-;1744:1;381:21816:10;;;9998:57;10028:1;381:21816;10006:18;381:21816;;;;;;;9942:9;381:21816;;9920:68;381:21816;;;;;;9928:10;:35;9920:68;:::i;9998:57::-;10087:15;381:21816;;;10073:29;381:21816;;;-1:-1:-1;381:21816:10;;;9942:9;381:21816;;;;;;;;;;;;;;;;;;10193:60;;381:21816;;;;1744:1:1;10212:27:10;381:21816;;;;;;;;;;;;;;;;;;10193:60;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1133:29;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;381:21816:10;;;6910:22;381:21816;;;;;;;;;;;;;6910:22;381:21816;;;;;;;;;;;;;;;;;;;1220:36;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;1303:37;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2360:53;381:21816;;;;;;;;2360:53;;;;;;381:21816;2360:53;;;;:::i;:::-;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;381:21816:10;;6281:16;381:21816;;;;;;;;6281:16;381:21816;;;;;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;381:21816:10;;6483:24;381:21816;;;;;;;;6483:24;381:21816;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;784:35;381:21816;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;381:21816:10;;;-1:-1:-1;381:21816:10;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;381:21816:10;;;;;;;;;;;-1:-1:-1;381:21816:10;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;381:21816:10;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;1359:130:0;381:21816:10;1273:6:0;381:21816:10;;719:10:8;1422:23:0;381:21816:10;;1359:130:0:o;381:21816:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;1744:1:1;;;;:::o;:::-;;381:21816:10;;1744:1:1;;;;;;;;;;;;381:21816:10;1744:1:1;381:21816:10;;;1744:1:1;;381:21816:10;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;3747:706:4:-;381:21816:10;;;;;;;;;:::i;:::-;;;;;;;;;;;1465:19:7;;:23;381:21816:10;;-1:-1:-1;5341:31:7;;;;;5389:51;5341:31;;;;;;;;;;:::i;:::-;5389:51;;:::i;:::-;381:21816:10;;4275:21:4;;4271:176;;3747:706;;;:::o;4271:176::-;4359:30;;;;;;;;;;:::i;:::-;381:21816:10;;;3747:706:4;:::o;381:21816:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;381:21816:10;;;;:::o;:::-;;;:::o;7561:742:7:-;;;;7731:566;;;7758:17;;:::o;7731:566::-;381:21816:10;;7876:21:7;:17;;8060:154;;;;;;;7872:415;381:21816:10;;;;8252:20:7;;;;;;381:21816:10;8252:20:7;;;381:21816:10;;;;;;:::i;:::-;8252:20:7;;;381:21816:10;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;763:205:4:-;381:21816:10;;;902:58:4;;;;381:21816:10;;;;;902:58:4;;;381:21816:10;;;;;;;;;902:58:4;;;;;;381:21816:10;;902:58:4;:::i;:::-;;:::i;:::-;763:205::o;381:21816:10:-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17212:597::-;381:21816;-1:-1:-1;;381:21816:10;;;;17289:9;381:21816;;;;;17289:23;381:21816;;;17289:23;381:21816;;;;17285:88;;381:21816;;;;;;;;17387:15;:40;17386:69;;;17212:597;17382:137;;381:21816;17289:23;381:21816;;;17532:22;381:21816;;;;17528:82;;381:21816;;;;;;;17387:15;17624:41;;17623:70;;;;17212:597;17619:134;;;17212:597;:::o;17619:134::-;17705:8;17712:1;17705:8;:::o;17623:70::-;381:21816;;17289:23;17671:22;381:21816;;;;;17670:23;;-1:-1:-1;17623:70:10;;;17528:82;17566:8;;;17573:1;17566:8;:::o;17382:137::-;17467:8;;;17474:1;17467:8;:::o;17386:69::-;381:21816;;17289:23;381:21816;;;17433:22;381:21816;;;;17432:23;17386:69;;381:21816;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;20882:541::-;20949:21;381:21816;;;;;;;;20993:18;381:21816;20986:25;:::o;20946:471::-;381:21816;;;;;;;;;;;;;;;;;;;21081:1;381:21816;;;;;;;;;;;;;;;21115:5;381:21816;;21097:24;;;:::i;:::-;381:21816;;21145:4;381:21816;;;;21140:1;;381:21816;;;;;;;;;;;;;;;21234:13;381:21816;;;;;21234:47;;;381:21816;21234:47;;381:21816;;;21234:47;21183:10;21234:47;;;381:21816;;;;;;;;;;;;;;;-1:-1:-1;381:21816:10;;;;;;;;;;;;;;;;;-1:-1:-1;381:21816:10;;;;;;21234:47;;;;;;;;;-1:-1:-1;21234:47:10;;;381:21816;21339:10;;;;;;;:::i;:::-;381:21816;;;;;;21401:5;381:21816;;21370:28;381:21816;21234:13;381:21816;;;;;21370:28;:::i;:::-;381:21816;21363:43;:::o;21234:47::-;;;;;;;;;;;;;;:::i;:::-;;;381:21816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21234:47;;;;21339:10;21234:47;;;;;;381:21816;;;;;;;;;;;;;21234:47;381:21816;;;-1:-1:-1;381:21816:10;;;;;;;;;;;;;;-1:-1:-1;381:21816:10;;;;;;;;;;;;;;21539:236;;;-1:-1:-1;381:21816:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22028:50;;22056:6;22028:50;;;:::i;:::-;;21628:29;21624:145;;21539:236;;;;;;;:::o;21624:145::-;381:21816;;;21679:4;381:21816;;21673:38;;;;;381:21816;;;;21673:38;381:21816;;21673:38;;;;381:21816;21673:38;;;;;;;;;;21624:145;-1:-1:-1;;21679:4:10;381:21816;;;;21725:33;;381:21816;;;;21673:38;21725:33;;381:21816;;;;;;;;;;;;;;;;;;;;;21725:33;;;;;;;;;;;;;;21624:145;;;;;;;;21725:33;;;381:21816;21725:33;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;381:21816;;;;;;;;;21673:38;381:21816;;;;;;;;;21673:38;;381:21816;;21725:33;21673:38;;381:21816;;;;;;;21673:38;381:21816;;21673:38;381:21816;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://605e04b7c58f08105bbaed13c13a4847db33f592ff86bd0096dae537f6d80439
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.