Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 682 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove NFT | 16374967 | 683 days ago | IN | 0 ETH | 0.0008124 | ||||
Rescue ERC721 | 16374962 | 683 days ago | IN | 0 ETH | 0.00063221 | ||||
Rescue ERC721 | 16374962 | 683 days ago | IN | 0 ETH | 0.00069662 | ||||
Rescue ERC721 | 16374961 | 683 days ago | IN | 0 ETH | 0.00075113 | ||||
Rescue ERC721 | 16374960 | 683 days ago | IN | 0 ETH | 0.00077732 | ||||
Rescue ERC721 | 16374959 | 683 days ago | IN | 0 ETH | 0.00079621 | ||||
Rescue ERC721 | 16374959 | 683 days ago | IN | 0 ETH | 0.00079602 | ||||
Rescue ERC721 | 16374958 | 683 days ago | IN | 0 ETH | 0.00071339 | ||||
Rescue ERC721 | 16374957 | 683 days ago | IN | 0 ETH | 0.00072908 | ||||
Rescue ERC721 | 16374957 | 683 days ago | IN | 0 ETH | 0.00072908 | ||||
Rescue ERC721 | 16374956 | 683 days ago | IN | 0 ETH | 0.00073863 | ||||
Rescue ERC721 | 16374955 | 683 days ago | IN | 0 ETH | 0.00077224 | ||||
Rescue ERC721 | 16374954 | 683 days ago | IN | 0 ETH | 0.00080336 | ||||
Rescue ERC721 | 16374954 | 683 days ago | IN | 0 ETH | 0.00080336 | ||||
Rescue ERC721 | 16374953 | 683 days ago | IN | 0 ETH | 0.00077966 | ||||
Rescue ERC721 | 16374952 | 683 days ago | IN | 0 ETH | 0.0007251 | ||||
Rescue ERC721 | 16374951 | 683 days ago | IN | 0 ETH | 0.00073672 | ||||
Rescue ERC721 | 16374951 | 683 days ago | IN | 0 ETH | 0.00073672 | ||||
Rescue ERC721 | 16374950 | 683 days ago | IN | 0 ETH | 0.00075464 | ||||
Rescue ERC721 | 16374948 | 683 days ago | IN | 0 ETH | 0.00074562 | ||||
Rescue ERC721 | 16374948 | 683 days ago | IN | 0 ETH | 0.00074562 | ||||
Rescue ERC721 | 16374947 | 683 days ago | IN | 0 ETH | 0.00074975 | ||||
Rescue ERC721 | 16374946 | 683 days ago | IN | 0 ETH | 0.00078809 | ||||
Rescue ERC721 | 16374945 | 683 days ago | IN | 0 ETH | 0.00079295 | ||||
Rescue ERC721 | 16374944 | 683 days ago | IN | 0 ETH | 0.00082306 |
Latest 9 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
MoonrunnersS2
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 300 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.11; // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&##&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&&@@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@@@&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&@@,*@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@@,#@&&&&&&&&&&&&&&&&&&&&&&#*& // &&&&&&&&&&&&&&&&&&&&&&&&@@,*@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@@,#@&&&##&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&,*&&&&&&&&&&&&@@,*(@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%&&&&&&&&&&&&&&&&&&&&&@#(,#@&&&&&&&&&&&&&&&&&&&&&&&&& // ##&&&&&&&&&&&&&&&&&&&&&&@@,,*@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%&&&&&&&&&&&&&&&&&&&&&@/*,#@&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&@@,,*&@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@/*,#@&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&@@,,*((@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@&(/*,#@&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&@@,,,*/&&&&&&&&&&&&&&&&&&&%%&&&&&&&&&&&&&&&&&&&&&&&&&#(&&&&&&&&&%*,,,#@&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&@@,,,**(%@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&##&&&&&&&&&@@((*,,,#@&&&&&&&&&&&&&&&&*/&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&&&&%,***((@@&&&&&&&&&&&#%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@%(***,,&&&&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&*%&&&&&&&&&&&&&&&&&@&,,,*(((#@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@@(((**,,,@&&&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&&&@&,,,***(((@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@#((/***,,,@&&&&&&&&&&&&&&&%&&&&&&&&&&& // &&&&&&&&&&&&&&&&(*&&&&&&&&&&@*,***(((((@&&&&&&&&&&&&&@@@@@@@@@@@@@&&&&&&&&&&&&&@&((((/***,,,@&&&&&&&&&&&&&%%,(%&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&&&&&@*,,***/((((((@@@@@(((((((((((((((((((((((((#@@@@#((((((***,,,&@&&&&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&&&&&@*,,*****(((((((((((((*/((((((((((((((((*(((((((((((((/****,,,&@&&&&&&&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&&&&&@*,,,,***((****/((((((((****/((((((****/((((((((****/(/***,,,,&@&&&&&@//@@&&&&&&&&&&&&&&&&&& // &&&&#&&&&&&&&&&&&&&&&&&&&&&&&@@,,,***********//((((((/************(((((((/************,,*@&&&&@((/&@&&&&&&&&&&&&&&&&%&&& // &&&&&&&&&&&&&&&&&&&&&&&&&&&&&@@,,,****************(((/************(((/****************,,*@&&&@@//,&@&&&&&&&&&&&&&&&&&&&& // &&&&&&&&##&&&&&@#/@@&&&&&&&&&&&@(,,,****************/*************//****************,,,@@&&&@#/,*@&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&@(/@@&&&&&&&&&&&@(,,,************************************************,,,@@&&&@#/,*@&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&@(//(@&&&&&&&&&&@(,,,,**,***************************************,,*,,,,,@@&&&@#/,,,&@&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&@/,/(@&&&&&&&&&&@(,,,,**,,,************************************,,**,,,,,@@&&&@#///,&&&&&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&@@,,/@@&&&&&&&&@(,,,,,,,,,,,********************************,,,,,,,,,,,@@&&&@#//*,,,@@&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&@@..*/(%%%@@&@@%##,,,,,,**,,********************************,**,,,,,,/#@&&@@(///*,,,(%@&&&&&&&&&&#&&&&&& // &&&&&&&&&&&&&&&&&&@&.///(((#@#((%@,,,,,,/(**,,,**************************,,,*((,,,,,,%@&&&@@(///*,,,.(@&&&&&&&&&&&&&&&&& // &&&&&&&&&&@%*@@&&&&&&,.,*///((((&@..,,,,,*#####,,,,*****************,,,,*####**,,,,,.#@&&@#(///,,,...(@&&&@@@@&&&&&&&&&& // &&&&&**&&&@%,@@&&&&&@,.,*////(((((@&.,,,,,,*(%%%(,,,****************,,,%%%((,,,,,,..@@@@&(/////,,,..@@&&&@*,@@&&&&&&&&&& // &&&&&&&&&&&&@,.,%@&&&@@.,,,,////((@&...,,,,,,,,(/,,,,*************,,,,,(/,,,,,,,,...@%(((////*,,,.&@&&&@&,,,@@&&&&&&&&&& // &&&&&&&&&&&&@,.,%@&&&&&@/.,,,*////(#@*,..,,,,,,,,,,,,*************,,,,,,,,,,,,,..,&@(((/////,,,..,&@&&@/*,&@&&&&&&&&&&&& // &&&&&&&&&&&&&@@.,,/(@&&&@@..,,,//////&@...,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...*@#(////*,,,....,@@@/*,,*@&&&&&&&&&&&&&& // &&&&&&&&&&&&&@&/,,,,/%%&@@/*.,,,**/////%(/..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.*/&%(///**,,,...*/&%(//*,,.,@&&&&&&&&&&&%(& // &&&&&&&&&&&&&&&@*...,///%@@@@,..,,,,,///%@...,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...%@((///,,,.....(((///,,,..@@&&&&&&&&&&&&&&& // &&&&&&&&&&&&&&&&@@...,,,*****((((((/,,,,*/@&...,,,,,,,,,,,,,,,,,,,,,,,,,,..,@#(///,,,...,(////*,,,.....@@&&&&&&&&&&&&&&& // &&&&&&&#%&&&&&&%%%&%...,/(,,****/((((((,*/@&...,,,,,,,,,,,,,,,,,,,,,,,,,,..,@(//*,,,...((///*,,(/....(&&&&&&&&&&&&&&&&&& // &&&&&&&&&&&&%%%%%%((%&%(*,(/,,,,*////(((((//@,...,,,,,,,,,,,,,,,,,,,,,,...@@///,,,...*////,,,**,,/..&%%&&%((%%%&&&&&&&&& // &&&&&&&&&&&&%%%%((*/(%%&* ...,,,,,/////((((#@,....,,,,,,,,,,,,,,,,,,,.....@@/,,,,...////*,,,/((/*,/(%%%&%(/*(#%&&&&&&&&& // &&&&&&&&&&&&%%%%%% .%%%&/..,&,...,,,,/////(((@@...,,,,,,,,,,,,,,,,,,,...*@///,,...***,,,,......&&&&&%%&%%(,,(#%%%&&&&&&& // &&&&&&&&&&&&&%%%%%%%%%%@* ,*@*,...,,,,,///(((@@...,,,,,,,,,,,,,,,,,,,...*@//,,,...***,,,.....#@ @&&&&#,.%%%&&&&&&&&& // &&&&&&&&&&&&&&&&@@ ,&@@/.,*@@@.....,,,,*///(@@.....,,,,,,,,,,,,,,,,....*@//,....* *,......@@@ ,,,@@&@& ..@@&&&&&&&&&& // &&&&&&&&&&&&&&&&@@ .,&@*,,,,*&@&%%.....,,,//(@@.*(**...,,,,,,,,,,...*/(.*@*,.(#,,. . ###@@@@@..,,,@@&@&.,,@@&&&&&&&&&& // &&&&&&&&&&@@@@@@*.,,,&@.,,,,.&@@@@@@@@@@@@@&/&@,*(((*....,,,,,,...*/(((,/@,,@@@ .,,,,/@@@/...,,,,#@@&,,,@@@&&&&&&&&& // @@@@@@@@*...//*.....,......./.....***********&@@#,,*(((.........,(((,,,@%.,,,,,..*..,..,,,..,,,,,.,,...,,,..,,,*/@@@@@@@ // .../@......,/......,///.*/.,#.../######////////@#,,,,,,,,,,,,,,,,,,,,,,@%,(((((.,((((,.,*((((((((.,,(*.(((((,/(((,((((** // ***/(/**********,.*/%**.*************((************/@@@@@@@@@@@@@@@@****/(/***********,***#%(/***,**********(/********** import {Controllable} from "./base/Controllable.sol"; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; import {IERC721A} from "erc721a/contracts/IERC721A.sol"; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {IMoonrunners} from "./interface/IMoonrunners.sol"; import {IMoonrunnersLoot} from "./interface/IMoonrunnersLoot.sol"; import {IMoonrunnersTrophies} from "./interface/IMoonrunnersTrophies.sol"; import {BasicRNG} from "./base/BasicRNG.sol"; error AwwoooooOnly(); error CaveIsClosed(); error CallerIsNotMoonrunnerHolder(); error CallerIsNotLootHolder(); error CallerIsNotNFTHolder(); error InvalidWeaponId(); error NotApprovedForAll(); error CantFightMore(); error InvalidImmuneIdsConfig(); error InvalidDropRatesConfig(); error InvalidDragonRatesConfig(); error ExploreIsClosed(); error CantExploreWithoutFighting(); error CantExploreMore(); error ZeroBalance(); error AwwwwooError(); error CantLootMe(); error MismatchingArrayLength(); error NotOwnerOrController(); struct NFTItem { address nftAddress; uint32 nftId; } contract MoonrunnersS2 is Controllable, ERC1155Holder, BasicRNG { using EnumerableSet for EnumerableSet.UintSet; event DragonBigFiraFira(address indexed owner, uint256 moonrunnerId); event DragonWhips(address indexed owner, uint256 moonrunnerId); event DragonAttack(address indexed owner, uint256 moonrunnerId, uint256 rand); event LootItem(address indexed owner, uint256 itemId); event ExploreLucky(address indexed owner, uint256 moonrunnerId, uint256 amount); event ExploreRescue(address indexed owner, uint256 moonrunnerId, uint256 moonrunnerRescuedId); event ExploreLootItem(address indexed owner, uint256 itemId); event ExploreLootPooPoopPeeDoo(address indexed owner, uint256 moonrunnerId); event ExploreNFT(address indexed owner, address nftAddress, uint32 nftId); event DropRatesChanged(uint32[5][4] newDropRates); event DragonRatesChanged(uint32[2][2] newDragonRates); event MaxSupplyChanged(uint256 id, uint256 newSupply); IMoonrunners public moonrunners; IMoonrunnersLoot public moonrunnersLoot; IMoonrunnersTrophies public moonrunnersTrophies; bool public isOpen; bool public isExploreOpen; // allowed weaponsId EnumerableSet.UintSet private weaponsIds; // moonSpeakers - moonLegendaries - dragon helmets EnumerableSet.UintSet private immuneIds; //lootId => maxSupply mapping(uint256 => uint256) public maxSupplyOf; //moonrunnerId => fightCount mapping(uint256 => uint256) public fightCountOf; //moonrunnerId => hasExplore mapping(uint256 => bool) public hasExplored; //moonrunnerId => isKatanaFighter mapping(uint256 => bool) public isKatanaFighter; //moonrunnerId => isStaffFighter mapping(uint256 => bool) public isStaffFighter; uint256[] public capturedMR; NFTItem[] public NFTs; // 0:default 1:katana 2:staff 3:katana+staff => [] // 0:eth 1:rescueMR 2:lostVials 3:voucher 4:NFTs uint32[5][4] private dropRates; // 0:default 1:tombholder => [] // 0:deathRate 1:captureRate uint32[2][2] private dragonRates; uint256 private constant AWO = 0x16345785D8A0000; constructor( address moonrunnersAddress, address moonrunnersLootAddress, address moonrunnersTrophiesAddress ) { moonrunners = IMoonrunners(moonrunnersAddress); moonrunnersLoot = IMoonrunnersLoot(moonrunnersLootAddress); moonrunnersTrophies = IMoonrunnersTrophies(moonrunnersTrophiesAddress); // set allowed weaponIds weaponsIds.add(0); // 0: raygun weaponsIds.add(1); // 1: scroll weaponsIds.add(2); // 2: ar15 weaponsIds.add(3); // 3: claws weaponsIds.add(8); // 8: katana weaponsIds.add(9); // 9: staff // loot maxSupply maxSupplyOf[4] = 10; //huge maxSupplyOf[5] = 523; //big maxSupplyOf[6] = 3100; //medium maxSupplyOf[7] = 6300; //small // voucher maxSupplyOf[10] = 10; // voucher free maxSupplyOf[11] = 20; // voucher 50% } modifier onlyOwnerOrController() { if (!(owner() == _msgSender() || isController(_msgSender()))) revert NotOwnerOrController(); _; } /* -------------------------------------------------------------------------- */ /* Entry */ /* -------------------------------------------------------------------------- */ function fight( uint256 moonrunnerId, uint256 weaponId, uint256 tombId ) external { if (tx.origin != _msgSender()) revert AwwoooooOnly(); if (!isOpen) revert CaveIsClosed(); if (!moonrunners.isApprovedForAll(_msgSender(), address(this))) revert NotApprovedForAll(); if (moonrunners.ownerOf(moonrunnerId) != _msgSender()) revert CallerIsNotMoonrunnerHolder(); if (moonrunnersLoot.balanceOf(_msgSender(), weaponId) == 0) revert CallerIsNotLootHolder(); if (!weaponsIds.contains(weaponId)) revert InvalidWeaponId(); if (fightCountOf[moonrunnerId] > 1) revert CantFightMore(); //burn weapon moonrunnersLoot.controlledBurn(_msgSender(), weaponId, 1); //special weapons if (weaponId == 8) { isKatanaFighter[moonrunnerId] = true; } if (weaponId == 9) { isStaffFighter[moonrunnerId] = true; } //awooooo uint256[] memory rand = randomUint16Array(2, 10_000); //moonrunner attack uint256 lootableId = packAttack(weaponId, rand[0]); // dragon attack bool isAlive = dragonAttack(moonrunnerId, tombId, rand[1]); if (isAlive) { //mint vial moonrunnersLoot.mint(_msgSender(), lootableId, 1); emit LootItem(_msgSender(), lootableId); } else { //mint vial for explore moonrunnersLoot.mint(address(this), lootableId, 1); } } function explore(uint256 moonrunnerId) external { if (tx.origin != _msgSender()) revert AwwoooooOnly(); if (!isExploreOpen) revert ExploreIsClosed(); if (moonrunners.ownerOf(moonrunnerId) != _msgSender()) revert CallerIsNotMoonrunnerHolder(); if (fightCountOf[moonrunnerId] < 1) revert CantExploreWithoutFighting(); if (hasExplored[moonrunnerId]) revert CantExploreMore(); hasExplored[moonrunnerId] = true; uint256[] memory rand = randomUint16Array(2, 10_000); doExplore(moonrunnerId, rand); } /* -------------------------------------------------------------------------- */ /* Logic */ /* -------------------------------------------------------------------------- */ function dragonAttack( uint256 moonrunnerId, uint256 tombId, uint256 rand ) internal returns (bool) { bool isImmune = immuneIds.contains(moonrunnerId); bool isTombHolder = isTombHolderAddr(_msgSender(), tombId); uint32[2] memory steps = isTombHolder ? dragonRates[1] : dragonRates[0]; fightCountOf[moonrunnerId] += 1; if (rand < steps[0] && !isImmune) { // RIP : big fira fira) moonrunners.burn(moonrunnerId); emit DragonBigFiraFira(_msgSender(), moonrunnerId); return false; } else if (rand > steps[1] && !isImmune) { // CAPTURED : dragon whips capturedMR.push(moonrunnerId); moonrunners.transferFrom(_msgSender(), address(this), moonrunnerId); emit DragonWhips(_msgSender(), moonrunnerId); return false; } emit DragonAttack(_msgSender(), moonrunnerId, rand); return true; } //4 : huge | 5 : big | 6 : medium | 7 : small function packAttack(uint256 weaponId, uint256 rand) internal returns (uint256) { uint256 lootId = 7; if (weaponId == 0) { // console.log("raygun"); if (rand < 200 && moonrunnersLoot.totalSupply(4) < maxSupplyOf[4]) { lootId = 4; } else if (rand < 4700 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else if (rand < 4700 && moonrunnersLoot.totalSupply(6) < maxSupplyOf[6]) { lootId = 6; } } else if (weaponId == 8) { // console.log("katana"); if (rand < 900 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else if (rand < 4900 && moonrunnersLoot.totalSupply(6) < maxSupplyOf[6]) { lootId = 6; } } else if (weaponId == 1) { // console.log("scroll"); if (rand < 800 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else if (rand < 6300 && moonrunnersLoot.totalSupply(6) < maxSupplyOf[6]) { lootId = 6; } } else if (weaponId == 2) { // console.log("ar15"); if (rand < 300 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else if (rand < 3400 && moonrunnersLoot.totalSupply(6) < maxSupplyOf[6]) { lootId = 6; } } else if (weaponId == 9) { // console.log("staff"); if (rand < 200 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else if (rand < 3100 && moonrunnersLoot.totalSupply(6) < maxSupplyOf[6]) { lootId = 6; } } else if (weaponId == 3) { // console.log("claws"); if (rand < 100 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else if (rand < 2300 && moonrunnersLoot.totalSupply(6) < maxSupplyOf[6]) { lootId = 6; } } if (lootId == 7 && !(moonrunnersLoot.totalSupply(7) < maxSupplyOf[7])) { // no small vial left awooo revert CantLootMe(); } return lootId; } /*************************************************************/ function doExplore(uint256 moonrunnerId, uint256[] memory rand) internal { uint256 balance = address(this).balance; uint32[5] memory dropRate = dropRates[0]; if (isKatanaFighter[moonrunnerId] && isStaffFighter[moonrunnerId]) { dropRate = dropRates[3]; } else if (isKatanaFighter[moonrunnerId]) { dropRate = dropRates[1]; } else if (isStaffFighter[moonrunnerId]) { dropRate = dropRates[2]; } if (rand[0] < dropRate[0] && balance >= AWO) { //console.log("-- ETH PRICE"); // send AWO emit ExploreLucky(_msgSender(), moonrunnerId, AWO); (bool success, ) = payable(_msgSender()).call{value: AWO}(""); if (!success) revert AwwwwooError(); return; } else if (rand[0] < dropRate[1]) { //console.log("-- MR PRICE"); if (capturedMR.length > 0) { //send random MR uint256 idx = rand[1] % capturedMR.length; uint256 id = capturedMR[idx]; capturedMR[idx] = capturedMR[capturedMR.length - 1]; capturedMR.pop(); moonrunners.transferFrom(address(this), _msgSender(), id); emit ExploreRescue(_msgSender(), moonrunnerId, id); return; } } else if (rand[0] < dropRate[2]) { //console.log("-- LOOT PRICE"); //4 : huge | 5 : big | 6 : medium | 7 : small uint256 lootId; if (rand[1] < 500 && moonrunnersLoot.balanceOf(address(this), 4) > 0) { lootId = 4; } else if (rand[1] < 1500 && moonrunnersLoot.balanceOf(address(this), 5) > 0) { lootId = 5; } else if (rand[1] < 4000 && moonrunnersLoot.balanceOf(address(this), 6) > 0) { lootId = 6; } else if (moonrunnersLoot.balanceOf(address(this), 7) > 0) { lootId = 7; } if (lootId > 0) { //send lootId moonrunnersLoot.safeTransferFrom(address(this), _msgSender(), lootId, 1, bytes("")); emit ExploreLootItem(_msgSender(), lootId); return; } } else if (rand[0] < dropRate[3]) { // nft voucher //console.log("-- VOUCHER PRICE"); uint256 voucherId; if (rand[1] < 3333 && moonrunnersLoot.totalSupply(10) < maxSupplyOf[10]) { voucherId = 10; } else if (moonrunnersLoot.totalSupply(11) < maxSupplyOf[11]) { voucherId = 11; } if (voucherId > 0) { moonrunnersLoot.mint(_msgSender(), voucherId, 1); emit ExploreLootItem(_msgSender(), voucherId); return; } } else if (rand[0] < dropRate[4]) { //console.log("-- NFT PRICE"); if (NFTs.length > 0) { //send random NFT uint256 idx = rand[1] % NFTs.length; NFTItem memory nft = NFTs[idx]; NFTs[idx] = NFTs[NFTs.length - 1]; NFTs.pop(); IERC721(nft.nftAddress).transferFrom(address(this), _msgSender(), nft.nftId); emit ExploreNFT(_msgSender(), nft.nftAddress, nft.nftId); return; } } emit ExploreLootPooPoopPeeDoo(_msgSender(), moonrunnerId); } /* -------------------------------------------------------------------------- */ /* Getters */ /* -------------------------------------------------------------------------- */ function getFightCountBatch(uint256[] calldata moonrunnerIds) external view returns (uint256[] memory) { uint256[] memory fightCounts = new uint256[](moonrunnerIds.length); for (uint256 i; i < moonrunnerIds.length; ++i) fightCounts[i] = fightCountOf[moonrunnerIds[i]]; return fightCounts; } function getHasExploredBatch(uint256[] calldata moonrunnerIds) external view returns (bool[] memory) { bool[] memory _hasExplored = new bool[](moonrunnerIds.length); for (uint256 i; i < moonrunnerIds.length; ++i) _hasExplored[i] = hasExplored[moonrunnerIds[i]]; return _hasExplored; } function getIsKatanaFighterBatch(uint256[] calldata moonrunnerIds) external view returns (bool[] memory) { bool[] memory _isKatanaFighter = new bool[](moonrunnerIds.length); for (uint256 i; i < moonrunnerIds.length; ++i) _isKatanaFighter[i] = isKatanaFighter[moonrunnerIds[i]]; return _isKatanaFighter; } function getIsStaffFighterBatch(uint256[] calldata moonrunnerIds) external view returns (bool[] memory) { bool[] memory _isStaffFighter = new bool[](moonrunnerIds.length); for (uint256 i; i < moonrunnerIds.length; ++i) _isStaffFighter[i] = isStaffFighter[moonrunnerIds[i]]; return _isStaffFighter; } function getCapturedMR() external view returns (uint256[] memory) { return capturedMR; } function getCapturedNFTs() external view returns (NFTItem[] memory) { return NFTs; } function getCapturedNFT(uint256 idx) external view returns (NFTItem memory) { return NFTs[idx]; } function getDropRates() external view returns (uint32[5][4] memory) { return dropRates; } function getDragonRates() external view returns (uint32[2][2] memory) { return dragonRates; } function isTombHolderAddr(address addr, uint256 tombId) public view returns (bool) { uint256 balance = IERC1155(moonrunnersTrophies).balanceOf(addr, tombId); return balance > 0; } /* -------------------------------------------------------------------------- */ /* Only Owner */ /* -------------------------------------------------------------------------- */ function setIsOpen(bool newIsOpen) external onlyOwner { if (newIsOpen && immuneIds.length() == 0) revert InvalidImmuneIdsConfig(); if (newIsOpen && dropRates[0][0] == 0) revert InvalidDropRatesConfig(); if (newIsOpen && dragonRates[0][0] == 0) revert InvalidDragonRatesConfig(); isOpen = newIsOpen; } function setIsExploreOpen(bool newIsExploreOpen) external onlyOwner { isExploreOpen = newIsExploreOpen; } /* -------------------------------------------------------------------------- */ /* Manage tokens in contract */ /* -------------------------------------------------------------------------- */ /// @notice rescue ERC721 without updating storage function rescueERC721( address collectionAddress, uint256[] memory ids, address to ) external onlyOwner { for (uint256 i; i < ids.length; ++i) { uint256 id = ids[i]; IERC721(collectionAddress).transferFrom(address(this), to, id); } } /// @notice remove 1 nft by idx updating storage function removeNFT( uint256 idx, address to, bool transfer ) external onlyOwner { NFTItem memory nft = NFTs[idx]; NFTs[idx] = NFTs[NFTs.length - 1]; NFTs.pop(); if (transfer) { IERC721(nft.nftAddress).transferFrom(address(this), to, nft.nftId); } } function withdraw() external payable onlyOwner { uint256 balance = address(this).balance; if (balance == 0) revert ZeroBalance(); (bool success, ) = payable(_msgSender()).call{value: balance}(""); require(success, ""); } /* -------------------------------------------------------------------------- */ /* Capture */ /* -------------------------------------------------------------------------- */ /// @notice capture moonrunners function captureMoonrunners(uint256[] memory moonrunnerIds) external onlyOwnerOrController { if (!moonrunners.isApprovedForAll(_msgSender(), address(this))) revert NotApprovedForAll(); for (uint256 i; i < moonrunnerIds.length; ++i) { uint256 moonrunnerId = moonrunnerIds[i]; if (moonrunners.ownerOf(moonrunnerId) != _msgSender()) revert CallerIsNotMoonrunnerHolder(); capturedMR.push(moonrunnerId); moonrunners.transferFrom(_msgSender(), address(this), moonrunnerId); } } /// @notice capture ids of collectionAddress /// @param collectionAddress ERC721 collection address /// @param ids list of ids function captureERC721(address collectionAddress, uint256[] memory ids) external onlyOwnerOrController { if (!IERC721(collectionAddress).isApprovedForAll(_msgSender(), address(this))) revert NotApprovedForAll(); for (uint256 i; i < ids.length; ++i) { uint256 nftId = ids[i]; if (IERC721(collectionAddress).ownerOf(nftId) != _msgSender()) revert CallerIsNotNFTHolder(); NFTItem memory item = NFTItem(collectionAddress, uint32(nftId)); NFTs.push(item); IERC721(collectionAddress).transferFrom(_msgSender(), address(this), nftId); } } /* -------------------------------------------------------------------------- */ /* Config */ /* -------------------------------------------------------------------------- */ function setImmuneIds(uint256[] calldata ids) external onlyOwner { for (uint256 i; i < ids.length; ++i) immuneIds.add(ids[i]); } /// @notice set dropRates (explore) function setDropRates(uint256[] memory ids, uint32[5][] memory stepsById) external onlyOwnerOrController { if (ids.length != stepsById.length) revert MismatchingArrayLength(); for (uint256 i; i < ids.length; ++i) { dropRates[i] = stepsById[i]; } emit DropRatesChanged(dropRates); } /// @notice set dragonRates (fight) function setDragonRates(uint256[] memory ids, uint32[2][] memory stepsById) external onlyOwnerOrController { if (ids.length != stepsById.length) revert MismatchingArrayLength(); for (uint256 i; i < ids.length; ++i) { dragonRates[i] = stepsById[i]; } emit DragonRatesChanged(dragonRates); } /// @notice set maxSupplyOf function setMaxSupplyOf(uint256 id, uint256 newSupply) external onlyOwnerOrController { maxSupplyOf[id] = newSupply; emit MaxSupplyChanged(id, newSupply); } /* -------------------------------------------------------------------------- */ /* State */ /* -------------------------------------------------------------------------- */ function setHasExplore(uint256[] calldata moonrunnerIds, bool exploreState) external onlyOwner { for (uint256 i; i < moonrunnerIds.length; ++i) hasExplored[moonrunnerIds[i]] = exploreState; } function setFightCount(uint256[] calldata moonrunnerIds, uint256[] calldata count) external onlyOwner { for (uint256 i; i < moonrunnerIds.length; ++i) fightCountOf[moonrunnerIds[i]] = count[i]; } //for non explorers function setWeaponsUsed( uint256[] calldata moonrunnerIds, bool[] calldata katana, bool[] calldata staff ) external onlyOwner { for (uint256 i; i < moonrunnerIds.length; ++i) { if (katana[i]) { isKatanaFighter[moonrunnerIds[i]] = true; } if (staff[i]) { isStaffFighter[moonrunnerIds[i]] = true; } } } /* -------------------------------------------------------------------------- */ /* Awwoooo */ /* -------------------------------------------------------------------------- */ receive() external payable { //Awoooo } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.11; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; error CallerIsNotController(); abstract contract Controllable is Ownable { /// @notice address => is controller. mapping(address => bool) private _isController; /// @notice Require the caller to be a controller. modifier onlyController() { if (!_isController[_msgSender()]) revert CallerIsNotController(); _; } /// @notice Check if `addr` is a controller. function isController(address addr) public view returns (bool) { return _isController[addr]; } /// @notice Set the `addr` controller status to `status`. function setControllers(address[] calldata addrs, bool status) external onlyOwner { for (uint256 i; i < addrs.length; i++) _isController[addrs[i]] = status; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol) pragma solidity ^0.8.0; import "./ERC1155Receiver.sol"; /** * Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens. * * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be * stuck. * * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // 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); // ============================== // IERC721 // ============================== /** * @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 be 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); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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 be 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: Unlicense pragma solidity ^0.8.11; import {IERC721A} from "erc721a/contracts/IERC721A.sol"; import {IERC721AQueryable} from "erc721a/contracts/extensions/IERC721AQueryable.sol"; interface IMoonrunners is IERC721A, IERC721AQueryable { function burn(uint256 tokenId) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.11; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; interface IMoonrunnersLoot is IERC1155 { function totalSupply(uint256 id) external returns (uint256); function mint( address to, uint256 id, uint256 amount ) external; function mintBatch( address to, uint256[] memory ids, uint256[] memory amounts ) external; function controlledBurn( address from, uint256 id, uint256 amount ) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.11; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; interface IMoonrunnersTrophies is IERC1155 { function mint( address to, uint256 id, uint256 amount ) external; function mintBatch( address to, uint256[] memory ids, uint256[] memory amounts ) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.11; // TODO : remove import "hardhat/console.sol"; abstract contract BasicRNG { uint256 private _nonces; ///@notice generate 'random' bytes function randomBytes() internal returns (bytes32) { // console.log("coinbase ",block.coinbase); // console.log("difficulty ", block.difficulty); // console.log("_nonces ",_nonces); return keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.coinbase, _nonces++)); } ///@notice generate a 'random' number < mod function random(uint256 mod) internal returns (uint256) { bytes32 randBytes = randomBytes(); return uint256(randBytes) % mod; } ///@notice generate a 'random' array of uint16 with number < mod function randomUint16Array(uint256 size, uint256 mod) internal returns (uint256[] memory) { require(size <= 16, "Exceed max size 16"); require(mod <= type(uint16).max, "Exceed max uint16"); bytes32 randBytes = randomBytes(); uint256[] memory output = new uint256[](size); //console.logBytes32(randBytes); for (uint256 i; i < size; ++i) { output[i] = uint256(randBytes >> (i * 16)) % mod; //console.log(output[i]); } return output; } ///@notice generate a 'random' array of bool of defined size 50%/50% function randomBoolArray(uint256 size) internal returns (bool[] memory ) { require(size <= 256, "Exceed max size : 256"); bool[] memory output = new bool[](size); uint256 rand = uint256(randomBytes()); for (uint256 i; i < size; i++) output[i] = (rand >> i) & 1 == 1; return output; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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 (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 v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol) pragma solidity ^0.8.0; import "../IERC1155Receiver.sol"; import "../../../utils/introspection/ERC165.sol"; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; import '../IERC721A.sol'; /** * @dev Interface of an ERC721AQueryable compliant contract. */ interface IERC721AQueryable is IERC721A { /** * Invalid query range (`start` >= `stop`). */ error InvalidQueryRange(); /** * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting. * * If the `tokenId` is out of bounds: * - `addr` = `address(0)` * - `startTimestamp` = `0` * - `burned` = `false` * * If the `tokenId` is burned: * - `addr` = `<Address of owner before token was burned>` * - `startTimestamp` = `<Timestamp when token was burned>` * - `burned = `true` * * Otherwise: * - `addr` = `<Address of owner>` * - `startTimestamp` = `<Timestamp of start of ownership>` * - `burned = `false` */ function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory); /** * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order. * See {ERC721AQueryable-explicitOwnershipOf} */ function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory); /** * @dev Returns an array of token IDs owned by `owner`, * in the range [`start`, `stop`) * (i.e. `start <= tokenId < stop`). * * This function allows for tokens to be queried if the collection * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}. * * Requirements: * * - `start` < `stop` */ function tokensOfOwnerIn( address owner, uint256 start, uint256 stop ) external view returns (uint256[] memory); /** * @dev Returns an array of token IDs owned by `owner`. * * This function scans the ownership mapping and is O(totalSupply) in complexity. * It is meant to be called off-chain. * * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into * multiple smaller scans if the collection is large enough to cause * an out-of-gas error (10K pfp collections should be fine). */ function tokensOfOwner(address owner) external view returns (uint256[] memory); }
// SPDX-License-Identifier: MIT pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
{ "optimizer": { "enabled": true, "runs": 300 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"moonrunnersAddress","type":"address"},{"internalType":"address","name":"moonrunnersLootAddress","type":"address"},{"internalType":"address","name":"moonrunnersTrophiesAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AwwoooooOnly","type":"error"},{"inputs":[],"name":"AwwwwooError","type":"error"},{"inputs":[],"name":"CallerIsNotLootHolder","type":"error"},{"inputs":[],"name":"CallerIsNotMoonrunnerHolder","type":"error"},{"inputs":[],"name":"CallerIsNotNFTHolder","type":"error"},{"inputs":[],"name":"CantExploreMore","type":"error"},{"inputs":[],"name":"CantExploreWithoutFighting","type":"error"},{"inputs":[],"name":"CantFightMore","type":"error"},{"inputs":[],"name":"CantLootMe","type":"error"},{"inputs":[],"name":"CaveIsClosed","type":"error"},{"inputs":[],"name":"ExploreIsClosed","type":"error"},{"inputs":[],"name":"InvalidDragonRatesConfig","type":"error"},{"inputs":[],"name":"InvalidDropRatesConfig","type":"error"},{"inputs":[],"name":"InvalidImmuneIdsConfig","type":"error"},{"inputs":[],"name":"InvalidWeaponId","type":"error"},{"inputs":[],"name":"MismatchingArrayLength","type":"error"},{"inputs":[],"name":"NotApprovedForAll","type":"error"},{"inputs":[],"name":"NotOwnerOrController","type":"error"},{"inputs":[],"name":"ZeroBalance","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rand","type":"uint256"}],"name":"DragonAttack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"}],"name":"DragonBigFiraFira","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32[2][2]","name":"newDragonRates","type":"uint32[2][2]"}],"name":"DragonRatesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"}],"name":"DragonWhips","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32[5][4]","name":"newDropRates","type":"uint32[5][4]"}],"name":"DropRatesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"ExploreLootItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"}],"name":"ExploreLootPooPoopPeeDoo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ExploreLucky","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"uint32","name":"nftId","type":"uint32"}],"name":"ExploreNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"moonrunnerRescuedId","type":"uint256"}],"name":"ExploreRescue","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"LootItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"MaxSupplyChanged","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"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTs","outputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint32","name":"nftId","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"captureERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"}],"name":"captureMoonrunners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"capturedMR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"moonrunnerId","type":"uint256"}],"name":"explore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"moonrunnerId","type":"uint256"},{"internalType":"uint256","name":"weaponId","type":"uint256"},{"internalType":"uint256","name":"tombId","type":"uint256"}],"name":"fight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fightCountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCapturedMR","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getCapturedNFT","outputs":[{"components":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint32","name":"nftId","type":"uint32"}],"internalType":"struct NFTItem","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCapturedNFTs","outputs":[{"components":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint32","name":"nftId","type":"uint32"}],"internalType":"struct NFTItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDragonRates","outputs":[{"internalType":"uint32[2][2]","name":"","type":"uint32[2][2]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDropRates","outputs":[{"internalType":"uint32[5][4]","name":"","type":"uint32[5][4]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"}],"name":"getFightCountBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"}],"name":"getHasExploredBatch","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"}],"name":"getIsKatanaFighterBatch","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"}],"name":"getIsStaffFighterBatch","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hasExplored","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isController","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isExploreOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isKatanaFighter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isStaffFighter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"tombId","type":"uint256"}],"name":"isTombHolderAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupplyOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moonrunners","outputs":[{"internalType":"contract IMoonrunners","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moonrunnersLoot","outputs":[{"internalType":"contract IMoonrunnersLoot","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moonrunnersTrophies","outputs":[{"internalType":"contract IMoonrunnersTrophies","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"transfer","type":"bool"}],"name":"removeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"address","name":"to","type":"address"}],"name":"rescueERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setControllers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint32[2][]","name":"stepsById","type":"uint32[2][]"}],"name":"setDragonRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint32[5][]","name":"stepsById","type":"uint32[5][]"}],"name":"setDropRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"},{"internalType":"uint256[]","name":"count","type":"uint256[]"}],"name":"setFightCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"},{"internalType":"bool","name":"exploreState","type":"bool"}],"name":"setHasExplore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"setImmuneIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newIsExploreOpen","type":"bool"}],"name":"setIsExploreOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newIsOpen","type":"bool"}],"name":"setIsOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setMaxSupplyOf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"},{"internalType":"bool[]","name":"katana","type":"bool[]"},{"internalType":"bool[]","name":"staff","type":"bool[]"}],"name":"setWeaponsUsed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162005249380380620052498339810160408190526200003491620002ed565b6200003f3362000217565b600380546001600160a01b03199081166001600160a01b038681169190911790925560048054821685841617905560058054909116918316919091179055620000976006600062000267602090811b6200261f17901c565b50620000b4600160066200026760201b6200261f1790919060201c565b50620000d1600260066200026760201b6200261f1790919060201c565b50620000ee600360066200026760201b6200261f1790919060201c565b506200010b600860066200026760201b6200261f1790919060201c565b5062000128600960066200026760201b6200261f1790919060201c565b5050600a60208190527fe1eb2b2161a492c07c5a334e48012567cba93ec021043f53c1955516a3c5a84181905561020b7ff35035bc2b01d44bd35a1dcdc552315cffb73da35cfd60570b7b777f98036f9f55610c1c7f10d9dd018e4cae503383c9f804c1c1603ada5856ee7894375d9b97cd8c8b27db5561189c7f22e39f61d1e4986b4f116cea9067f62cc77d74dff1780ae9c8b5166d1dd28829557f3e57c57b03145299956be61386751c5b285d460d484d5c2403a6be086d9d6baa555050600b60005260147fb3569174ca605aeef264a9f01151dace4275a70316034aaf090d8468560f043b5562000337565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006200027583836200027e565b90505b92915050565b6000818152600183016020526040812054620002c75750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000278565b50600062000278565b80516001600160a01b0381168114620002e857600080fd5b919050565b6000806000606084860312156200030357600080fd5b6200030e84620002d0565b92506200031e60208501620002d0565b91506200032e60408501620002d0565b90509250925092565b614f0280620003476000396000f3fe6080604052600436106102e15760003560e01c80637faff86b1161017f578063c3dd0314116100e1578063e731ec411161008a578063f669ddaf11610064578063f669ddaf1461093f578063f9b485d81461095f578063fb8bcf341461097f57600080fd5b8063e731ec41146108d3578063f23a6e61146108f3578063f2fde38b1461091f57600080fd5b8063db9ecfac116100bb578063db9ecfac14610873578063df9b5a1c14610893578063e152124b146108b357600080fd5b8063c3dd031414610806578063cf51371514610833578063d3e70c031461085357600080fd5b8063987c0acc11610143578063b429afeb1161011d578063b429afeb1461075b578063bc197c8114610794578063c131d36f146107d957600080fd5b8063987c0acc146106d7578063a3c0b95b146106f7578063a752128c1461073b57600080fd5b80637faff86b1461063757806385b6bc791461065757806388e76a4f146106775780638c2fb84d146106975780638da5cb5b146106b957600080fd5b80632af097561161024357806357ec5094116101ec578063715018a6116101c6578063715018a6146105e25780637d55396e146105f75780637e1c45421461061757600080fd5b806357ec5094146105695780636457e389146105a15780637131eb31146105c157600080fd5b80633ccfd60b1161021d5780633ccfd60b1461051057806347535d7b14610518578063578c88311461053957600080fd5b80632af09756146104ae5780632e9a8e7d146104ce5780633a2aa6fb146104e357600080fd5b80630e5734a1116102a5578063266eeb381161027f578063266eeb381461043e57806326e2dca21461046e578063273b34fd1461048e57600080fd5b80630e5734a1146103c157806311431e56146103e35780632564eed71461041157600080fd5b806301ffc9a7146102ed5780630336724414610322578063071a88f914610352578063085a10cf1461037f5780630c82c2d6146103a157600080fd5b366102e857005b600080fd5b3480156102f957600080fd5b5061030d610308366004614163565b6109a1565b60405190151581526020015b60405180910390f35b34801561032e57600080fd5b5061030d61033d36600461418d565b600d6020526000908152604090205460ff1681565b34801561035e57600080fd5b5061037261036d3660046141f1565b6109d8565b6040516103199190614232565b34801561038b57600080fd5b5061039f61039a366004614284565b610a8c565b005b3480156103ad57600080fd5b5061039f6103bc366004614451565b610b71565b3480156103cd57600080fd5b506103d6610c62565b6040516103199190614525565b3480156103ef57600080fd5b506104036103fe36600461418d565b610cf5565b604051908152602001610319565b34801561041d57600080fd5b5061040361042c36600461418d565b600a6020526000908152604090205481565b34801561044a57600080fd5b5061030d61045936600461418d565b600c6020526000908152604090205460ff1681565b34801561047a57600080fd5b5061039f6104893660046145a0565b610d16565b34801561049a57600080fd5b5061039f6104a9366004614603565b610def565b3480156104ba57600080fd5b5061039f6104c9366004614284565b61107f565b3480156104da57600080fd5b506103726110c7565b3480156104ef57600080fd5b506105036104fe3660046141f1565b61111f565b6040516103199190614652565b61039f6111dd565b34801561052457600080fd5b5060055461030d90600160a01b900460ff1681565b34801561054557600080fd5b5061030d61055436600461418d565b600e6020526000908152604090205460ff1681565b34801561057557600080fd5b50600454610589906001600160a01b031681565b6040516001600160a01b039091168152602001610319565b3480156105ad57600080fd5b5061039f6105bc36600461418d565b61129c565b3480156105cd57600080fd5b5060055461030d90600160a81b900460ff1681565b3480156105ee57600080fd5b5061039f611411565b34801561060357600080fd5b5061039f61061236600461468c565b611447565b34801561062357600080fd5b5061039f6106323660046146ae565b6114c9565b34801561064357600080fd5b506105036106523660046141f1565b611564565b34801561066357600080fd5b5061039f6106723660046146f9565b611622565b34801561068357600080fd5b50600554610589906001600160a01b031681565b3480156106a357600080fd5b506106ac611752565b6040516103199190614792565b3480156106c557600080fd5b506000546001600160a01b0316610589565b3480156106e357600080fd5b5061039f6106f23660046141f1565b6117de565b34801561070357600080fd5b5061071761071236600461418d565b611850565b604080516001600160a01b03909316835263ffffffff909116602083015201610319565b34801561074757600080fd5b506105036107563660046141f1565b611888565b34801561076757600080fd5b5061030d6107763660046147e9565b6001600160a01b031660009081526001602052604090205460ff1690565b3480156107a057600080fd5b506107c06107af366004614875565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610319565b3480156107e557600080fd5b506104036107f436600461418d565b600b6020526000908152604090205481565b34801561081257600080fd5b5061082661082136600461418d565b611946565b6040516103199190614922565b34801561083f57600080fd5b5061039f61084e366004614948565b6119ab565b34801561085f57600080fd5b5061039f61086e3660046149b3565b611a40565b34801561087f57600080fd5b50600354610589906001600160a01b031681565b34801561089f57600080fd5b5061030d6108ae366004614a88565b611b25565b3480156108bf57600080fd5b5061039f6108ce366004614ab4565b611ba6565b3480156108df57600080fd5b5061039f6108ee3660046146ae565b611df7565b3480156108ff57600080fd5b506107c061090e366004614af0565b63f23a6e6160e01b95945050505050565b34801561092b57600080fd5b5061039f61093a3660046147e9565b611e80565b34801561094b57600080fd5b5061039f61095a366004614b58565b611f1b565b34801561096b57600080fd5b5061039f61097a366004614b84565b6123f3565b34801561098b57600080fd5b506109946125af565b6040516103199190614bbb565b60006001600160e01b03198216630271189760e51b14806109d257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000826001600160401b038111156109f4576109f46142a1565b604051908082528060200260200182016040528015610a1d578160200160208202803683370190505b50905060005b83811015610a8457600b6000868684818110610a4157610a41614c21565b90506020020135815260200190815260200160002054828281518110610a6957610a69614c21565b6020908102919091010152610a7d81614c4d565b9050610a23565b509392505050565b6000546001600160a01b03163314610abf5760405162461bcd60e51b8152600401610ab690614c68565b60405180910390fd5b808015610ad35750610ad16008612632565b155b15610af157604051632645340960e01b815260040160405180910390fd5b808015610b04575060115463ffffffff16155b15610b225760405163fc57c19760e01b815260040160405180910390fd5b808015610b35575060155463ffffffff16155b15610b5357604051634c96d40b60e11b815260040160405180910390fd5b60058054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331480610b8e5750610b8e33610776565b610bab57604051637e71aa5960e11b815260040160405180910390fd5b8051825114610bcd5760405163e22ffb0960e01b815260040160405180910390fd5b60005b8251811015610c2557818181518110610beb57610beb614c21565b602002602001015160118260048110610c0657610c06614c21565b610c1492910190600561401c565b50610c1e81614c4d565b9050610bd0565b507ffe57d15fd36adebe89460dc1b22ba5416c2671d7a78f828fdf842909ff53898f6011604051610c569190614c9d565b60405180910390a15050565b610c6a6140b8565b60408051808201909152601560026000835b82821015610cec5760408051808201918290529085840190600290826000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610c9c579050505050505081526020019060010190610c7c565b50505050905090565b600f8181548110610d0557600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314610d405760405162461bcd60e51b8152600401610ab690614c68565b60005b8251811015610de9576000838281518110610d6057610d60614c21565b60209081029190910101516040516323b872dd60e01b81523060048201526001600160a01b03858116602483015260448201839052919250908616906323b872dd90606401600060405180830381600087803b158015610dbf57600080fd5b505af1158015610dd3573d6000803e3d6000fd5b505050505080610de290614c4d565b9050610d43565b50505050565b6000546001600160a01b0316331480610e0c5750610e0c33610776565b610e2957604051637e71aa5960e11b815260040160405180910390fd5b6001600160a01b03821663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea79190614cf9565b610ec45760405163cd7769ff60e01b815260040160405180910390fd5b60005b815181101561107a576000828281518110610ee457610ee4614c21565b60200260200101519050610ef53390565b6040516331a9108f60e11b8152600481018390526001600160a01b0391821691861690636352211e90602401602060405180830381865afa158015610f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f629190614d16565b6001600160a01b031614610f8957604051630526384360e31b815260040160405180910390fd5b6040805180820182526001600160a01b0386811680835263ffffffff8581166020850190815260108054600181018255600091825286517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67290910180549351909416600160a01b026001600160c01b031990931695169490941717905583516323b872dd60e01b8152336004820152306024820152604481018690529351929390926323b872dd9260648084019391929182900301818387803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b5050505050508061107390614c4d565b9050610ec7565b505050565b6000546001600160a01b031633146110a95760405162461bcd60e51b8152600401610ab690614c68565b60058054911515600160a81b0260ff60a81b19909216919091179055565b6060600f80548060200260200160405190810160405280929190818152602001828054801561111557602002820191906000526020600020905b815481526020019060010190808311611101575b5050505050905090565b60606000826001600160401b0381111561113b5761113b6142a1565b604051908082528060200260200182016040528015611164578160200160208202803683370190505b50905060005b83811015610a8457600e600086868481811061118857611188614c21565b90506020020135815260200190815260200160002060009054906101000a900460ff168282815181106111bd576111bd614c21565b911515602092830291909101909101526111d681614c4d565b905061116a565b6000546001600160a01b031633146112075760405162461bcd60e51b8152600401610ab690614c68565b47806112265760405163334ab3f560e11b815260040160405180910390fd5b604051600090339083908381818185875af1925050503d8060008114611268576040519150601f19603f3d011682016040523d82523d6000602084013e61126d565b606091505b50509050806112985760405162461bcd60e51b81526020600482015260006024820152604401610ab6565b5050565b3233146112bc57604051631003181f60e01b815260040160405180910390fd5b600554600160a81b900460ff166112e65760405163524c5e7b60e01b815260040160405180910390fd5b336003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015611334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113589190614d16565b6001600160a01b03161461137f57604051631a86db5760e01b815260040160405180910390fd5b6000818152600b6020526040902054600111156113af5760405163c343e5a760e01b815260040160405180910390fd5b6000818152600c602052604090205460ff16156113df576040516301c5072960e01b815260040160405180910390fd5b6000818152600c60205260408120805460ff19166001179055611405600261271061263c565b90506112988282612776565b6000546001600160a01b0316331461143b5760405162461bcd60e51b8152600401610ab690614c68565b61144560006133e3565b565b6000546001600160a01b0316331480611464575061146433610776565b61148157604051637e71aa5960e11b815260040160405180910390fd5b6000828152600a602090815260409182902083905581518481529081018390527fa626f93317e2474b716846a09cf0e28aacb96052643b252fe97704208fecf9b59101610c56565b6000546001600160a01b031633146114f35760405162461bcd60e51b8152600401610ab690614c68565b60005b82811015610de957816001600086868581811061151557611515614c21565b905060200201602081019061152a91906147e9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061155c81614c4d565b9150506114f6565b60606000826001600160401b03811115611580576115806142a1565b6040519080825280602002602001820160405280156115a9578160200160208202803683370190505b50905060005b83811015610a8457600c60008686848181106115cd576115cd614c21565b90506020020135815260200190815260200160002060009054906101000a900460ff1682828151811061160257611602614c21565b9115156020928302919091019091015261161b81614c4d565b90506115af565b6000546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610ab690614c68565b60005b858110156117495784848281811061166957611669614c21565b905060200201602081019061167e9190614284565b156116c8576001600d600089898581811061169b5761169b614c21565b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8282828181106116da576116da614c21565b90506020020160208101906116ef9190614284565b15611739576001600e600089898581811061170c5761170c614c21565b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61174281614c4d565b905061164f565b50505050505050565b61175a6140e5565b6040805160808101909152601160046000835b82821015610cec576040805160a08101918290529085840190600590826000855b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161178e57905050505050508152602001906001019061176d565b6000546001600160a01b031633146118085760405162461bcd60e51b8152600401610ab690614c68565b60005b8181101561107a5761183f83838381811061182857611828614c21565b90506020020135600861261f90919063ffffffff16565b5061184981614c4d565b905061180b565b6010818154811061186057600080fd5b6000918252602090912001546001600160a01b0381169150600160a01b900463ffffffff1682565b60606000826001600160401b038111156118a4576118a46142a1565b6040519080825280602002602001820160405280156118cd578160200160208202803683370190505b50905060005b83811015610a8457600d60008686848181106118f1576118f1614c21565b90506020020135815260200190815260200160002060009054906101000a900460ff1682828151811061192657611926614c21565b9115156020928302919091019091015261193f81614c4d565b90506118d3565b60408051808201909152600080825260208201526010828154811061196d5761196d614c21565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b900463ffffffff169181019190915292915050565b6000546001600160a01b031633146119d55760405162461bcd60e51b8152600401610ab690614c68565b60005b83811015611a39578282828181106119f2576119f2614c21565b90506020020135600b6000878785818110611a0f57611a0f614c21565b9050602002013581526020019081526020016000208190555080611a3290614c4d565b90506119d8565b5050505050565b6000546001600160a01b0316331480611a5d5750611a5d33610776565b611a7a57604051637e71aa5960e11b815260040160405180910390fd5b8051825114611a9c5760405163e22ffb0960e01b815260040160405180910390fd5b60005b8251811015611af457818181518110611aba57611aba614c21565b602002602001015160158260028110611ad557611ad5614c21565b611ae392910190600261401c565b50611aed81614c4d565b9050611a9f565b507f98e669a2b70b8b994c9bf11309fa41a53396a3966cc881686f43db0d21e343596015604051610c569190614d33565b600554604051627eeac760e11b81526001600160a01b03848116600483015260248201849052600092839291169062fdd58e90604401602060405180830381865afa158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c9190614d6d565b1515949350505050565b6000546001600160a01b0316331480611bc35750611bc333610776565b611be057604051637e71aa5960e11b815260040160405180910390fd5b6003546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c609190614cf9565b611c7d5760405163cd7769ff60e01b815260040160405180910390fd5b60005b8151811015611298576000828281518110611c9d57611c9d614c21565b60200260200101519050611cae3390565b6003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015611cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1f9190614d16565b6001600160a01b031614611d4657604051631a86db5760e01b815260040160405180910390fd5b600f805460018101825560009182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201829055600354604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216926323b872dd9260648084019382900301818387803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505080611df090614c4d565b9050611c80565b6000546001600160a01b03163314611e215760405162461bcd60e51b8152600401610ab690614c68565b60005b82811015610de95781600c6000868685818110611e4357611e43614c21565b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555080611e7990614c4d565b9050611e24565b6000546001600160a01b03163314611eaa5760405162461bcd60e51b8152600401610ab690614c68565b6001600160a01b038116611f0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab6565b611f18816133e3565b50565b323314611f3b57604051631003181f60e01b815260040160405180910390fd5b600554600160a01b900460ff16611f6557604051633cf1f5ef60e11b815260040160405180910390fd5b6003546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe59190614cf9565b6120025760405163cd7769ff60e01b815260040160405180910390fd5b336003546040516331a9108f60e11b8152600481018690526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190614d16565b6001600160a01b03161461209b57604051631a86db5760e01b815260040160405180910390fd5b6004546001600160a01b031662fdd58e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381865afa1580156120f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211b9190614d6d565b6121385760405163108ef44360e01b815260040160405180910390fd5b612143600683613433565b612160576040516315140c5560e01b815260040160405180910390fd5b6000838152600b6020526040902054600110156121905760405163d510ad4160e01b815260040160405180910390fd5b6004546001600160a01b031663ee720065336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260016044820152606401600060405180830381600087803b1580156121f157600080fd5b505af1158015612205573d6000803e3d6000fd5b50505050816008141561222c576000838152600d60205260409020805460ff191660011790555b816009141561224f576000838152600e60205260409020805460ff191660011790555b600061225e600261271061263c565b90506000612286848360008151811061227957612279614c21565b602002602001015161344b565b905060006122af8685856001815181106122a2576122a2614c21565b6020026020010151613ca4565b9050801561237e576004546001600160a01b031663156e29f6336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260016044820152606401600060405180830381600087803b15801561231857600080fd5b505af115801561232c573d6000803e3d6000fd5b505050506123373390565b6001600160a01b03167f80f082e6829670ff14f0e7df5c04c45344409d5eab7155ff0668df6b60cb7fc58360405161237191815260200190565b60405180910390a26123eb565b60048054604051630ab714fb60e11b8152309281019290925260248201849052600160448301526001600160a01b03169063156e29f690606401600060405180830381600087803b1580156123d257600080fd5b505af11580156123e6573d6000803e3d6000fd5b505050505b505050505050565b6000546001600160a01b0316331461241d5760405162461bcd60e51b8152600401610ab690614c68565b60006010848154811061243257612432614c21565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b900463ffffffff1691810191909152601080549192509061247e90600190614d86565b8154811061248e5761248e614c21565b90600052602060002001601085815481106124ab576124ab614c21565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff16909102179055601080548061250c5761250c614d9d565b600082815260209020810160001990810180546001600160c01b03191690550190558115610de957805160208201516040516323b872dd60e01b81523060048201526001600160a01b03868116602483015263ffffffff90921660448201529116906323b872dd90606401600060405180830381600087803b15801561259157600080fd5b505af11580156125a5573d6000803e3d6000fd5b5050505050505050565b60606010805480602002602001604051908101604052809291908181526020016000905b82821015610cec57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016125d3565b600061262b8383613f64565b9392505050565b60006109d2825490565b606060108311156126845760405162461bcd60e51b815260206004820152601260248201527122bc31b2b2b21036b0bc1039b4bd3290189b60711b6044820152606401610ab6565b61ffff8211156126ca5760405162461bcd60e51b815260206004820152601160248201527022bc31b2b2b21036b0bc103ab4b73a189b60791b6044820152606401610ab6565b60006126d4613fb3565b90506000846001600160401b038111156126f0576126f06142a1565b604051908082528060200260200182016040528015612719578160200160208202803683370190505b50905060005b8581101561276d5784612733826010614db3565b612740919085901c614dd2565b82828151811061275257612752614c21565b602090810291909101015261276681614c4d565b905061271f565b50949350505050565b6040805160a08101918290524791600091906011906005908285855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612792575050506000888152600d60205260409020549394505060ff909216915050801561280457506000848152600e602052604090205460ff165b1561287057601160035b6040805160a0810191829052929190910190600590826000855b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161282857905050505050509050612903565b6000848152600d602052604090205460ff1615612890576011600161280e565b6000848152600e602052604090205460ff1615612903576040805160a081019182905290601390600590826000855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128bf579050505050505090505b806000602002015163ffffffff168360008151811061292457612924614c21565b6020026020010151108015612941575067016345785d8a00008210155b156129f9576040805185815267016345785d8a0000602082015233917fcfa3857410439f46cd229235c2fe3b64d18b565a6bebd840e2bd64d029bb42de910160405180910390a2604051600090339067016345785d8a0000908381818185875af1925050503d80600081146129d2576040519150601f19603f3d011682016040523d82523d6000602084013e6129d7565b606091505b5050905080611a3957604051630bf46a9b60e01b815260040160405180910390fd5b806001602002015163ffffffff1683600081518110612a1a57612a1a614c21565b60200260200101511015612bd157600f5415612bcc576000600f8054905084600181518110612a4b57612a4b614c21565b6020026020010151612a5d9190614dd2565b90506000600f8281548110612a7457612a74614c21565b90600052602060002001549050600f6001600f80549050612a959190614d86565b81548110612aa557612aa5614c21565b9060005260206000200154600f8381548110612ac357612ac3614c21565b600091825260209091200155600f805480612ae057612ae0614d9d565b6000828152602081206000199083018101919091550190556003546001600160a01b03166323b872dd30336040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260448101849052606401600060405180830381600087803b158015612b5a57600080fd5b505af1158015612b6e573d6000803e3d6000fd5b50505050612b793390565b6001600160a01b03167f9362094d33ca93e045cffe9409f58c4caf5600ad3b845bb0f33d807d281f71e98783604051612bbc929190918252602082015260400190565b60405180910390a2505050505050565b6133a8565b806002602002015163ffffffff1683600081518110612bf257612bf2614c21565b60200260200101511015612f595760006101f484600181518110612c1857612c18614c21565b6020026020010151108015612c9f575060048054604051627eeac760e11b8152308184015260248101929092526000916001600160a01b039091169062fdd58e90604401602060405180830381865afa158015612c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9d9190614d6d565b115b15612cac57506004612e85565b6105dc84600181518110612cc257612cc2614c21565b6020026020010151108015612d4b575060048054604051627eeac760e11b81523092810192909252600560248301526000916001600160a01b039091169062fdd58e90604401602060405180830381865afa158015612d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d499190614d6d565b115b15612d5857506005612e85565b610fa084600181518110612d6e57612d6e614c21565b6020026020010151108015612df7575060048054604051627eeac760e11b81523092810192909252600660248301526000916001600160a01b039091169062fdd58e90604401602060405180830381865afa158015612dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df59190614d6d565b115b15612e0457506006612e85565b60048054604051627eeac760e11b81523092810192909252600760248301526000916001600160a01b039091169062fdd58e90604401602060405180830381865afa158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b9190614d6d565b1115612e85575060075b8015612f53576004546001600160a01b031663f242432a3033846001604051806020016040528060008152506040518663ffffffff1660e01b8152600401612ed1959493929190614df4565b600060405180830381600087803b158015612eeb57600080fd5b505af1158015612eff573d6000803e3d6000fd5b50505050612f0a3390565b6001600160a01b03167f586434e57bdc337d11df1124318c5c5314cd5c7e1826b4e47e0e65b62f4fe13982604051612f4491815260200190565b60405180910390a25050505050565b506133a8565b806003602002015163ffffffff1683600081518110612f7a57612f7a614c21565b6020026020010151101561314a576000610d0584600181518110612fa057612fa0614c21565b60200260200101511080156130505750600a600081905260208190527f3e57c57b03145299956be61386751c5b285d460d484d5c2403a6be086d9d6baa546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af115801561302a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304e9190614d6d565b105b1561305d5750600a613105565b600b6000819052600a6020527fb3569174ca605aeef264a9f01151dace4275a70316034aaf090d8468560f043b546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156130d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fb9190614d6d565b10156131055750600b5b8015612f535760048054604051630ab714fb60e11b8152339281019290925260248201839052600160448301526001600160a01b03169063156e29f690606401612ed1565b806004602002015163ffffffff168360008151811061316b5761316b614c21565b602002602001015110156133a857601054156133a85760006010805490508460018151811061319c5761319c614c21565b60200260200101516131ae9190614dd2565b90506000601082815481106131c5576131c5614c21565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b900463ffffffff1691810191909152601080549192509061321190600190614d86565b8154811061322157613221614c21565b906000526020600020016010838154811061323e5761323e614c21565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff16909102179055601080548061329f5761329f614d9d565b600082815260209020600019908201810180546001600160c01b031916905501905580516001600160a01b03166323b872dd303360208501516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015263ffffffff166044820152606401600060405180830381600087803b15801561332d57600080fd5b505af1158015613341573d6000803e3d6000fd5b5050505061334c3390565b6001600160a01b03167fbe4d321aba0fe98b403988d87339ccb2205d45905143cef8eab816ff8bc766ce82600001518360200151604051612bbc9291906001600160a01b0392909216825263ffffffff16602082015260400190565b60405184815233907f79ec8a0a6d79f8b0012bcd5c0458a35b67ec51c067bff7a8971ae34a6de98f8d9060200160405180910390a250505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600183016020526040812054151561262b565b60006007836136615760c883108015613504575060046000819052600a6020527fe1eb2b2161a492c07c5a334e48012567cba93ec021043f53c1955516a3c5a84154815460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916134bf91810190815260200190565b6020604051808303816000875af11580156134de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135029190614d6d565b105b1561351157506004613bda565b61125c831080156135ab575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af1158015613585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a99190614d6d565b105b156135b857506005613bda565b61125c83108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024015b6020604051808303816000875af115801561362d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136519190614d6d565b105b1561365c575060065b613bda565b836008141561376b5761038483108015613704575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156136de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137029190614d6d565b105b1561371157506005613bda565b61132483108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b0399060240161360e565b8360011415613875576103208310801561380e575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156137e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380c9190614d6d565b105b1561381b57506005613bda565b61189c83108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b0399060240161360e565b836002141561397f5761012c83108015613918575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156138f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139169190614d6d565b105b1561392557506005613bda565b610d4883108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b0399060240161360e565b8360091415613a885760c883108015613a21575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156139fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1f9190614d6d565b105b15613a2e57506005613bda565b610c1c83108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b0399060240161360e565b8360031415613bda57606483108015613b2a575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af1158015613b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b289190614d6d565b105b15613b3757506005613bda565b6108fc83108015613bd1575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af1158015613bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bcf9190614d6d565b105b15613bda575060065b806007148015613c86575060076000819052600a6020527f22e39f61d1e4986b4f116cea9067f62cc77d74dff1780ae9c8b5166d1dd28829546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af1158015613c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c839190614d6d565b10155b1561262b57604051631bb897d960e21b815260040160405180910390fd5b600080613cb2600886613433565b90506000613cc03386611b25565b9050600081613cd0576015613cd3565b60165b60408051808201918290529190600290826000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ce8579050505050505090506001600b60008981526020019081526020016000206000828254613d4f9190614e74565b9091555050805163ffffffff1685108015613d68575082155b15613e2057600354604051630852cd8d60e31b8152600481018990526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015613db357600080fd5b505af1158015613dc7573d6000803e3d6000fd5b50505050613dd23390565b6001600160a01b03167f0860d763b1363254fddd5455622cc9987ea72c2282820ad9347b7ed7b576069688604051613e0c91815260200190565b60405180910390a26000935050505061262b565b602081015163ffffffff1685118015613e37575082155b15613f1c57600f805460018101825560009182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201889055600354604080516323b872dd60e01b8152336004820152306024820152604481018b905290516001600160a01b03909216926323b872dd9260648084019382900301818387803b158015613ec357600080fd5b505af1158015613ed7573d6000803e3d6000fd5b50505050613ee23390565b6001600160a01b03167f25fecb51ab9b0f32dc8cf9de29e1dfdc9c0ff4ee392b2dcc9778505c0563778f88604051613e0c91815260200190565b604080518881526020810187905233917f1b99cb9eb38b218c9805217e0a152602d8310ea3e667acba2e94e5986d90ed06910160405180910390a25060019695505050505050565b6000818152600183016020526040812054613fab575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109d2565b5060006109d2565b600042444160026000815480929190613fcb90614c4d565b909155506040805160208101959095528401929092526bffffffffffffffffffffffff19606091821b1690830152607482015260940160405160208183030381529060405280519060200120905090565b6001830191839082156140a85791602002820160005b8382111561407657835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614032565b80156140a65782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614076565b505b506140b4929150614112565b5090565b60405180604001604052806002905b6140cf614127565b8152602001906001900390816140c75790505090565b60405180608001604052806004905b6140fc614145565b8152602001906001900390816140f45790505090565b5b808211156140b45760008155600101614113565b60405180604001604052806002906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b60006020828403121561417557600080fd5b81356001600160e01b03198116811461262b57600080fd5b60006020828403121561419f57600080fd5b5035919050565b60008083601f8401126141b857600080fd5b5081356001600160401b038111156141cf57600080fd5b6020830191508360208260051b85010111156141ea57600080fd5b9250929050565b6000806020838503121561420457600080fd5b82356001600160401b0381111561421a57600080fd5b614226858286016141a6565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561426a5783518352928401929184019160010161424e565b50909695505050505050565b8015158114611f1857600080fd5b60006020828403121561429657600080fd5b813561262b81614276565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156142df576142df6142a1565b604052919050565b60006001600160401b03821115614300576143006142a1565b5060051b60200190565b600082601f83011261431b57600080fd5b8135602061433061432b836142e7565b6142b7565b82815260059290921b8401810191818101908684111561434f57600080fd5b8286015b8481101561436a5780358352918301918301614353565b509695505050505050565b803563ffffffff8116811461438957600080fd5b919050565b600060405160a081018181106001600160401b03821117156143b2576143b26142a1565b60405290508060a08301848111156143c957600080fd5b835b818110156143ea576143dc81614375565b8352602092830192016143cb565b50505092915050565b6000604051604081018181106001600160401b0382111715614417576144176142a1565b8060405250809150604083018481111561443057600080fd5b835b818110156143ea5761444381614375565b835260209283019201614432565b6000806040838503121561446457600080fd5b82356001600160401b038082111561447b57600080fd5b6144878683870161430a565b935060209150818501358181111561449e57600080fd5b85019050601f80820187136144b257600080fd5b81356144c061432b826142e7565b81815260a0918202840185019185820191908a8411156144df57600080fd5b948601945b83861015614514578a858701126144fb5760008081fd5b6145058b8761438e565b835294850194918601916144e4565b508096505050505050509250929050565b6080810181836000805b600280821061453e5750614581565b835185845b8381101561456757825163ffffffff16825260209283019290910190600101614543565b50505060409490940193506020929092019160010161452f565b5050505092915050565b6001600160a01b0381168114611f1857600080fd5b6000806000606084860312156145b557600080fd5b83356145c08161458b565b925060208401356001600160401b038111156145db57600080fd5b6145e78682870161430a565b92505060408401356145f88161458b565b809150509250925092565b6000806040838503121561461657600080fd5b82356146218161458b565b915060208301356001600160401b0381111561463c57600080fd5b6146488582860161430a565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561426a57835115158352928401929184019160010161466e565b6000806040838503121561469f57600080fd5b50508035926020909101359150565b6000806000604084860312156146c357600080fd5b83356001600160401b038111156146d957600080fd5b6146e5868287016141a6565b90945092505060208401356145f881614276565b6000806000806000806060878903121561471257600080fd5b86356001600160401b038082111561472957600080fd5b6147358a838b016141a6565b9098509650602089013591508082111561474e57600080fd5b61475a8a838b016141a6565b9096509450604089013591508082111561477357600080fd5b5061478089828a016141a6565b979a9699509497509295939492505050565b610280810181836000805b600481101561458157825184835b60058110156147d057825163ffffffff168252602092830192909101906001016147ab565b50505060a093909301926020929092019160010161479d565b6000602082840312156147fb57600080fd5b813561262b8161458b565b600082601f83011261481757600080fd5b81356001600160401b03811115614830576148306142a1565b614843601f8201601f19166020016142b7565b81815284602083860101111561485857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561488d57600080fd5b85356148988161458b565b945060208601356148a88161458b565b935060408601356001600160401b03808211156148c457600080fd5b6148d089838a0161430a565b945060608801359150808211156148e657600080fd5b6148f289838a0161430a565b9350608088013591508082111561490857600080fd5b5061491588828901614806565b9150509295509295909350565b81516001600160a01b0316815260208083015163ffffffff1690820152604081016109d2565b6000806000806040858703121561495e57600080fd5b84356001600160401b038082111561497557600080fd5b614981888389016141a6565b9096509450602087013591508082111561499a57600080fd5b506149a7878288016141a6565b95989497509550505050565b60008060408084860312156149c757600080fd5b83356001600160401b03808211156149de57600080fd5b6149ea8783880161430a565b9450602091508186013581811115614a0157600080fd5b86019050601f8082018813614a1557600080fd5b8135614a2361432b826142e7565b81815260069190911b8301840190848101908a831115614a4257600080fd5b938501935b82851015614a77578a84860112614a5e5760008081fd5b614a688b866143f3565b82529386019390850190614a47565b809750505050505050509250929050565b60008060408385031215614a9b57600080fd5b8235614aa68161458b565b946020939093013593505050565b600060208284031215614ac657600080fd5b81356001600160401b03811115614adc57600080fd5b614ae88482850161430a565b949350505050565b600080600080600060a08688031215614b0857600080fd5b8535614b138161458b565b94506020860135614b238161458b565b9350604086013592506060860135915060808601356001600160401b03811115614b4c57600080fd5b61491588828901614806565b600080600060608486031215614b6d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215614b9957600080fd5b833592506020840135614bab8161458b565b915060408401356145f881614276565b602080825282518282018190526000919060409081850190868401855b82811015614c1457614c0484835180516001600160a01b0316825260209081015163ffffffff16910152565b9284019290850190600101614bd8565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614c6157614c61614c37565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6102808101818360005b60048110156143ea57815463ffffffff8082168552602082811c821690860152604082811c821690860152606082811c821690860152608091821c169084015260a09092019160019182019101614ca7565b600060208284031215614d0b57600080fd5b815161262b81614276565b600060208284031215614d2857600080fd5b815161262b8161458b565b60808101818360005b60028110156143ea57815463ffffffff8082168552602091821c169084015260409092019160019182019101614d3c565b600060208284031215614d7f57600080fd5b5051919050565b600082821015614d9857614d98614c37565b500390565b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615614dcd57614dcd614c37565b500290565b600082614def57634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160a01b03808816835260208188168185015286604085015285606085015260a06080850152845191508160a085015260005b82811015614e485785810182015185820160c001528101614e2c565b82811115614e5a57600060c084870101525b5050601f01601f19169190910160c0019695505050505050565b60008219821115614e8757614e87614c37565b50019056fef35035bc2b01d44bd35a1dcdc552315cffb73da35cfd60570b7b777f98036f9f10d9dd018e4cae503383c9f804c1c1603ada5856ee7894375d9b97cd8c8b27dba2646970667358221220e173d95762816e6155861828d1eb140b02c43c5446b1ba9f81f62e2c2100c07a64736f6c634300080b00330000000000000000000000001485297e942ce64e0870ece60179dfda34b4c625000000000000000000000000b6d460ac51b93bca63b694f099c4a8b3b1cf73b40000000000000000000000004fdf87d4edae3fe323b8f6df502ccac6c8b4ba28
Deployed Bytecode
0x6080604052600436106102e15760003560e01c80637faff86b1161017f578063c3dd0314116100e1578063e731ec411161008a578063f669ddaf11610064578063f669ddaf1461093f578063f9b485d81461095f578063fb8bcf341461097f57600080fd5b8063e731ec41146108d3578063f23a6e61146108f3578063f2fde38b1461091f57600080fd5b8063db9ecfac116100bb578063db9ecfac14610873578063df9b5a1c14610893578063e152124b146108b357600080fd5b8063c3dd031414610806578063cf51371514610833578063d3e70c031461085357600080fd5b8063987c0acc11610143578063b429afeb1161011d578063b429afeb1461075b578063bc197c8114610794578063c131d36f146107d957600080fd5b8063987c0acc146106d7578063a3c0b95b146106f7578063a752128c1461073b57600080fd5b80637faff86b1461063757806385b6bc791461065757806388e76a4f146106775780638c2fb84d146106975780638da5cb5b146106b957600080fd5b80632af097561161024357806357ec5094116101ec578063715018a6116101c6578063715018a6146105e25780637d55396e146105f75780637e1c45421461061757600080fd5b806357ec5094146105695780636457e389146105a15780637131eb31146105c157600080fd5b80633ccfd60b1161021d5780633ccfd60b1461051057806347535d7b14610518578063578c88311461053957600080fd5b80632af09756146104ae5780632e9a8e7d146104ce5780633a2aa6fb146104e357600080fd5b80630e5734a1116102a5578063266eeb381161027f578063266eeb381461043e57806326e2dca21461046e578063273b34fd1461048e57600080fd5b80630e5734a1146103c157806311431e56146103e35780632564eed71461041157600080fd5b806301ffc9a7146102ed5780630336724414610322578063071a88f914610352578063085a10cf1461037f5780630c82c2d6146103a157600080fd5b366102e857005b600080fd5b3480156102f957600080fd5b5061030d610308366004614163565b6109a1565b60405190151581526020015b60405180910390f35b34801561032e57600080fd5b5061030d61033d36600461418d565b600d6020526000908152604090205460ff1681565b34801561035e57600080fd5b5061037261036d3660046141f1565b6109d8565b6040516103199190614232565b34801561038b57600080fd5b5061039f61039a366004614284565b610a8c565b005b3480156103ad57600080fd5b5061039f6103bc366004614451565b610b71565b3480156103cd57600080fd5b506103d6610c62565b6040516103199190614525565b3480156103ef57600080fd5b506104036103fe36600461418d565b610cf5565b604051908152602001610319565b34801561041d57600080fd5b5061040361042c36600461418d565b600a6020526000908152604090205481565b34801561044a57600080fd5b5061030d61045936600461418d565b600c6020526000908152604090205460ff1681565b34801561047a57600080fd5b5061039f6104893660046145a0565b610d16565b34801561049a57600080fd5b5061039f6104a9366004614603565b610def565b3480156104ba57600080fd5b5061039f6104c9366004614284565b61107f565b3480156104da57600080fd5b506103726110c7565b3480156104ef57600080fd5b506105036104fe3660046141f1565b61111f565b6040516103199190614652565b61039f6111dd565b34801561052457600080fd5b5060055461030d90600160a01b900460ff1681565b34801561054557600080fd5b5061030d61055436600461418d565b600e6020526000908152604090205460ff1681565b34801561057557600080fd5b50600454610589906001600160a01b031681565b6040516001600160a01b039091168152602001610319565b3480156105ad57600080fd5b5061039f6105bc36600461418d565b61129c565b3480156105cd57600080fd5b5060055461030d90600160a81b900460ff1681565b3480156105ee57600080fd5b5061039f611411565b34801561060357600080fd5b5061039f61061236600461468c565b611447565b34801561062357600080fd5b5061039f6106323660046146ae565b6114c9565b34801561064357600080fd5b506105036106523660046141f1565b611564565b34801561066357600080fd5b5061039f6106723660046146f9565b611622565b34801561068357600080fd5b50600554610589906001600160a01b031681565b3480156106a357600080fd5b506106ac611752565b6040516103199190614792565b3480156106c557600080fd5b506000546001600160a01b0316610589565b3480156106e357600080fd5b5061039f6106f23660046141f1565b6117de565b34801561070357600080fd5b5061071761071236600461418d565b611850565b604080516001600160a01b03909316835263ffffffff909116602083015201610319565b34801561074757600080fd5b506105036107563660046141f1565b611888565b34801561076757600080fd5b5061030d6107763660046147e9565b6001600160a01b031660009081526001602052604090205460ff1690565b3480156107a057600080fd5b506107c06107af366004614875565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610319565b3480156107e557600080fd5b506104036107f436600461418d565b600b6020526000908152604090205481565b34801561081257600080fd5b5061082661082136600461418d565b611946565b6040516103199190614922565b34801561083f57600080fd5b5061039f61084e366004614948565b6119ab565b34801561085f57600080fd5b5061039f61086e3660046149b3565b611a40565b34801561087f57600080fd5b50600354610589906001600160a01b031681565b34801561089f57600080fd5b5061030d6108ae366004614a88565b611b25565b3480156108bf57600080fd5b5061039f6108ce366004614ab4565b611ba6565b3480156108df57600080fd5b5061039f6108ee3660046146ae565b611df7565b3480156108ff57600080fd5b506107c061090e366004614af0565b63f23a6e6160e01b95945050505050565b34801561092b57600080fd5b5061039f61093a3660046147e9565b611e80565b34801561094b57600080fd5b5061039f61095a366004614b58565b611f1b565b34801561096b57600080fd5b5061039f61097a366004614b84565b6123f3565b34801561098b57600080fd5b506109946125af565b6040516103199190614bbb565b60006001600160e01b03198216630271189760e51b14806109d257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000826001600160401b038111156109f4576109f46142a1565b604051908082528060200260200182016040528015610a1d578160200160208202803683370190505b50905060005b83811015610a8457600b6000868684818110610a4157610a41614c21565b90506020020135815260200190815260200160002054828281518110610a6957610a69614c21565b6020908102919091010152610a7d81614c4d565b9050610a23565b509392505050565b6000546001600160a01b03163314610abf5760405162461bcd60e51b8152600401610ab690614c68565b60405180910390fd5b808015610ad35750610ad16008612632565b155b15610af157604051632645340960e01b815260040160405180910390fd5b808015610b04575060115463ffffffff16155b15610b225760405163fc57c19760e01b815260040160405180910390fd5b808015610b35575060155463ffffffff16155b15610b5357604051634c96d40b60e11b815260040160405180910390fd5b60058054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331480610b8e5750610b8e33610776565b610bab57604051637e71aa5960e11b815260040160405180910390fd5b8051825114610bcd5760405163e22ffb0960e01b815260040160405180910390fd5b60005b8251811015610c2557818181518110610beb57610beb614c21565b602002602001015160118260048110610c0657610c06614c21565b610c1492910190600561401c565b50610c1e81614c4d565b9050610bd0565b507ffe57d15fd36adebe89460dc1b22ba5416c2671d7a78f828fdf842909ff53898f6011604051610c569190614c9d565b60405180910390a15050565b610c6a6140b8565b60408051808201909152601560026000835b82821015610cec5760408051808201918290529085840190600290826000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610c9c579050505050505081526020019060010190610c7c565b50505050905090565b600f8181548110610d0557600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314610d405760405162461bcd60e51b8152600401610ab690614c68565b60005b8251811015610de9576000838281518110610d6057610d60614c21565b60209081029190910101516040516323b872dd60e01b81523060048201526001600160a01b03858116602483015260448201839052919250908616906323b872dd90606401600060405180830381600087803b158015610dbf57600080fd5b505af1158015610dd3573d6000803e3d6000fd5b505050505080610de290614c4d565b9050610d43565b50505050565b6000546001600160a01b0316331480610e0c5750610e0c33610776565b610e2957604051637e71aa5960e11b815260040160405180910390fd5b6001600160a01b03821663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea79190614cf9565b610ec45760405163cd7769ff60e01b815260040160405180910390fd5b60005b815181101561107a576000828281518110610ee457610ee4614c21565b60200260200101519050610ef53390565b6040516331a9108f60e11b8152600481018390526001600160a01b0391821691861690636352211e90602401602060405180830381865afa158015610f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f629190614d16565b6001600160a01b031614610f8957604051630526384360e31b815260040160405180910390fd5b6040805180820182526001600160a01b0386811680835263ffffffff8581166020850190815260108054600181018255600091825286517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67290910180549351909416600160a01b026001600160c01b031990931695169490941717905583516323b872dd60e01b8152336004820152306024820152604481018690529351929390926323b872dd9260648084019391929182900301818387803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b5050505050508061107390614c4d565b9050610ec7565b505050565b6000546001600160a01b031633146110a95760405162461bcd60e51b8152600401610ab690614c68565b60058054911515600160a81b0260ff60a81b19909216919091179055565b6060600f80548060200260200160405190810160405280929190818152602001828054801561111557602002820191906000526020600020905b815481526020019060010190808311611101575b5050505050905090565b60606000826001600160401b0381111561113b5761113b6142a1565b604051908082528060200260200182016040528015611164578160200160208202803683370190505b50905060005b83811015610a8457600e600086868481811061118857611188614c21565b90506020020135815260200190815260200160002060009054906101000a900460ff168282815181106111bd576111bd614c21565b911515602092830291909101909101526111d681614c4d565b905061116a565b6000546001600160a01b031633146112075760405162461bcd60e51b8152600401610ab690614c68565b47806112265760405163334ab3f560e11b815260040160405180910390fd5b604051600090339083908381818185875af1925050503d8060008114611268576040519150601f19603f3d011682016040523d82523d6000602084013e61126d565b606091505b50509050806112985760405162461bcd60e51b81526020600482015260006024820152604401610ab6565b5050565b3233146112bc57604051631003181f60e01b815260040160405180910390fd5b600554600160a81b900460ff166112e65760405163524c5e7b60e01b815260040160405180910390fd5b336003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015611334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113589190614d16565b6001600160a01b03161461137f57604051631a86db5760e01b815260040160405180910390fd5b6000818152600b6020526040902054600111156113af5760405163c343e5a760e01b815260040160405180910390fd5b6000818152600c602052604090205460ff16156113df576040516301c5072960e01b815260040160405180910390fd5b6000818152600c60205260408120805460ff19166001179055611405600261271061263c565b90506112988282612776565b6000546001600160a01b0316331461143b5760405162461bcd60e51b8152600401610ab690614c68565b61144560006133e3565b565b6000546001600160a01b0316331480611464575061146433610776565b61148157604051637e71aa5960e11b815260040160405180910390fd5b6000828152600a602090815260409182902083905581518481529081018390527fa626f93317e2474b716846a09cf0e28aacb96052643b252fe97704208fecf9b59101610c56565b6000546001600160a01b031633146114f35760405162461bcd60e51b8152600401610ab690614c68565b60005b82811015610de957816001600086868581811061151557611515614c21565b905060200201602081019061152a91906147e9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061155c81614c4d565b9150506114f6565b60606000826001600160401b03811115611580576115806142a1565b6040519080825280602002602001820160405280156115a9578160200160208202803683370190505b50905060005b83811015610a8457600c60008686848181106115cd576115cd614c21565b90506020020135815260200190815260200160002060009054906101000a900460ff1682828151811061160257611602614c21565b9115156020928302919091019091015261161b81614c4d565b90506115af565b6000546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610ab690614c68565b60005b858110156117495784848281811061166957611669614c21565b905060200201602081019061167e9190614284565b156116c8576001600d600089898581811061169b5761169b614c21565b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8282828181106116da576116da614c21565b90506020020160208101906116ef9190614284565b15611739576001600e600089898581811061170c5761170c614c21565b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61174281614c4d565b905061164f565b50505050505050565b61175a6140e5565b6040805160808101909152601160046000835b82821015610cec576040805160a08101918290529085840190600590826000855b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161178e57905050505050508152602001906001019061176d565b6000546001600160a01b031633146118085760405162461bcd60e51b8152600401610ab690614c68565b60005b8181101561107a5761183f83838381811061182857611828614c21565b90506020020135600861261f90919063ffffffff16565b5061184981614c4d565b905061180b565b6010818154811061186057600080fd5b6000918252602090912001546001600160a01b0381169150600160a01b900463ffffffff1682565b60606000826001600160401b038111156118a4576118a46142a1565b6040519080825280602002602001820160405280156118cd578160200160208202803683370190505b50905060005b83811015610a8457600d60008686848181106118f1576118f1614c21565b90506020020135815260200190815260200160002060009054906101000a900460ff1682828151811061192657611926614c21565b9115156020928302919091019091015261193f81614c4d565b90506118d3565b60408051808201909152600080825260208201526010828154811061196d5761196d614c21565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b900463ffffffff169181019190915292915050565b6000546001600160a01b031633146119d55760405162461bcd60e51b8152600401610ab690614c68565b60005b83811015611a39578282828181106119f2576119f2614c21565b90506020020135600b6000878785818110611a0f57611a0f614c21565b9050602002013581526020019081526020016000208190555080611a3290614c4d565b90506119d8565b5050505050565b6000546001600160a01b0316331480611a5d5750611a5d33610776565b611a7a57604051637e71aa5960e11b815260040160405180910390fd5b8051825114611a9c5760405163e22ffb0960e01b815260040160405180910390fd5b60005b8251811015611af457818181518110611aba57611aba614c21565b602002602001015160158260028110611ad557611ad5614c21565b611ae392910190600261401c565b50611aed81614c4d565b9050611a9f565b507f98e669a2b70b8b994c9bf11309fa41a53396a3966cc881686f43db0d21e343596015604051610c569190614d33565b600554604051627eeac760e11b81526001600160a01b03848116600483015260248201849052600092839291169062fdd58e90604401602060405180830381865afa158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c9190614d6d565b1515949350505050565b6000546001600160a01b0316331480611bc35750611bc333610776565b611be057604051637e71aa5960e11b815260040160405180910390fd5b6003546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c609190614cf9565b611c7d5760405163cd7769ff60e01b815260040160405180910390fd5b60005b8151811015611298576000828281518110611c9d57611c9d614c21565b60200260200101519050611cae3390565b6003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015611cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1f9190614d16565b6001600160a01b031614611d4657604051631a86db5760e01b815260040160405180910390fd5b600f805460018101825560009182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201829055600354604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216926323b872dd9260648084019382900301818387803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505080611df090614c4d565b9050611c80565b6000546001600160a01b03163314611e215760405162461bcd60e51b8152600401610ab690614c68565b60005b82811015610de95781600c6000868685818110611e4357611e43614c21565b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555080611e7990614c4d565b9050611e24565b6000546001600160a01b03163314611eaa5760405162461bcd60e51b8152600401610ab690614c68565b6001600160a01b038116611f0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab6565b611f18816133e3565b50565b323314611f3b57604051631003181f60e01b815260040160405180910390fd5b600554600160a01b900460ff16611f6557604051633cf1f5ef60e11b815260040160405180910390fd5b6003546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe59190614cf9565b6120025760405163cd7769ff60e01b815260040160405180910390fd5b336003546040516331a9108f60e11b8152600481018690526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190614d16565b6001600160a01b03161461209b57604051631a86db5760e01b815260040160405180910390fd5b6004546001600160a01b031662fdd58e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381865afa1580156120f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211b9190614d6d565b6121385760405163108ef44360e01b815260040160405180910390fd5b612143600683613433565b612160576040516315140c5560e01b815260040160405180910390fd5b6000838152600b6020526040902054600110156121905760405163d510ad4160e01b815260040160405180910390fd5b6004546001600160a01b031663ee720065336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260016044820152606401600060405180830381600087803b1580156121f157600080fd5b505af1158015612205573d6000803e3d6000fd5b50505050816008141561222c576000838152600d60205260409020805460ff191660011790555b816009141561224f576000838152600e60205260409020805460ff191660011790555b600061225e600261271061263c565b90506000612286848360008151811061227957612279614c21565b602002602001015161344b565b905060006122af8685856001815181106122a2576122a2614c21565b6020026020010151613ca4565b9050801561237e576004546001600160a01b031663156e29f6336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260016044820152606401600060405180830381600087803b15801561231857600080fd5b505af115801561232c573d6000803e3d6000fd5b505050506123373390565b6001600160a01b03167f80f082e6829670ff14f0e7df5c04c45344409d5eab7155ff0668df6b60cb7fc58360405161237191815260200190565b60405180910390a26123eb565b60048054604051630ab714fb60e11b8152309281019290925260248201849052600160448301526001600160a01b03169063156e29f690606401600060405180830381600087803b1580156123d257600080fd5b505af11580156123e6573d6000803e3d6000fd5b505050505b505050505050565b6000546001600160a01b0316331461241d5760405162461bcd60e51b8152600401610ab690614c68565b60006010848154811061243257612432614c21565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b900463ffffffff1691810191909152601080549192509061247e90600190614d86565b8154811061248e5761248e614c21565b90600052602060002001601085815481106124ab576124ab614c21565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff16909102179055601080548061250c5761250c614d9d565b600082815260209020810160001990810180546001600160c01b03191690550190558115610de957805160208201516040516323b872dd60e01b81523060048201526001600160a01b03868116602483015263ffffffff90921660448201529116906323b872dd90606401600060405180830381600087803b15801561259157600080fd5b505af11580156125a5573d6000803e3d6000fd5b5050505050505050565b60606010805480602002602001604051908101604052809291908181526020016000905b82821015610cec57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016125d3565b600061262b8383613f64565b9392505050565b60006109d2825490565b606060108311156126845760405162461bcd60e51b815260206004820152601260248201527122bc31b2b2b21036b0bc1039b4bd3290189b60711b6044820152606401610ab6565b61ffff8211156126ca5760405162461bcd60e51b815260206004820152601160248201527022bc31b2b2b21036b0bc103ab4b73a189b60791b6044820152606401610ab6565b60006126d4613fb3565b90506000846001600160401b038111156126f0576126f06142a1565b604051908082528060200260200182016040528015612719578160200160208202803683370190505b50905060005b8581101561276d5784612733826010614db3565b612740919085901c614dd2565b82828151811061275257612752614c21565b602090810291909101015261276681614c4d565b905061271f565b50949350505050565b6040805160a08101918290524791600091906011906005908285855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612792575050506000888152600d60205260409020549394505060ff909216915050801561280457506000848152600e602052604090205460ff165b1561287057601160035b6040805160a0810191829052929190910190600590826000855b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161282857905050505050509050612903565b6000848152600d602052604090205460ff1615612890576011600161280e565b6000848152600e602052604090205460ff1615612903576040805160a081019182905290601390600590826000855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128bf579050505050505090505b806000602002015163ffffffff168360008151811061292457612924614c21565b6020026020010151108015612941575067016345785d8a00008210155b156129f9576040805185815267016345785d8a0000602082015233917fcfa3857410439f46cd229235c2fe3b64d18b565a6bebd840e2bd64d029bb42de910160405180910390a2604051600090339067016345785d8a0000908381818185875af1925050503d80600081146129d2576040519150601f19603f3d011682016040523d82523d6000602084013e6129d7565b606091505b5050905080611a3957604051630bf46a9b60e01b815260040160405180910390fd5b806001602002015163ffffffff1683600081518110612a1a57612a1a614c21565b60200260200101511015612bd157600f5415612bcc576000600f8054905084600181518110612a4b57612a4b614c21565b6020026020010151612a5d9190614dd2565b90506000600f8281548110612a7457612a74614c21565b90600052602060002001549050600f6001600f80549050612a959190614d86565b81548110612aa557612aa5614c21565b9060005260206000200154600f8381548110612ac357612ac3614c21565b600091825260209091200155600f805480612ae057612ae0614d9d565b6000828152602081206000199083018101919091550190556003546001600160a01b03166323b872dd30336040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260448101849052606401600060405180830381600087803b158015612b5a57600080fd5b505af1158015612b6e573d6000803e3d6000fd5b50505050612b793390565b6001600160a01b03167f9362094d33ca93e045cffe9409f58c4caf5600ad3b845bb0f33d807d281f71e98783604051612bbc929190918252602082015260400190565b60405180910390a2505050505050565b6133a8565b806002602002015163ffffffff1683600081518110612bf257612bf2614c21565b60200260200101511015612f595760006101f484600181518110612c1857612c18614c21565b6020026020010151108015612c9f575060048054604051627eeac760e11b8152308184015260248101929092526000916001600160a01b039091169062fdd58e90604401602060405180830381865afa158015612c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9d9190614d6d565b115b15612cac57506004612e85565b6105dc84600181518110612cc257612cc2614c21565b6020026020010151108015612d4b575060048054604051627eeac760e11b81523092810192909252600560248301526000916001600160a01b039091169062fdd58e90604401602060405180830381865afa158015612d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d499190614d6d565b115b15612d5857506005612e85565b610fa084600181518110612d6e57612d6e614c21565b6020026020010151108015612df7575060048054604051627eeac760e11b81523092810192909252600660248301526000916001600160a01b039091169062fdd58e90604401602060405180830381865afa158015612dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df59190614d6d565b115b15612e0457506006612e85565b60048054604051627eeac760e11b81523092810192909252600760248301526000916001600160a01b039091169062fdd58e90604401602060405180830381865afa158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b9190614d6d565b1115612e85575060075b8015612f53576004546001600160a01b031663f242432a3033846001604051806020016040528060008152506040518663ffffffff1660e01b8152600401612ed1959493929190614df4565b600060405180830381600087803b158015612eeb57600080fd5b505af1158015612eff573d6000803e3d6000fd5b50505050612f0a3390565b6001600160a01b03167f586434e57bdc337d11df1124318c5c5314cd5c7e1826b4e47e0e65b62f4fe13982604051612f4491815260200190565b60405180910390a25050505050565b506133a8565b806003602002015163ffffffff1683600081518110612f7a57612f7a614c21565b6020026020010151101561314a576000610d0584600181518110612fa057612fa0614c21565b60200260200101511080156130505750600a600081905260208190527f3e57c57b03145299956be61386751c5b285d460d484d5c2403a6be086d9d6baa546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af115801561302a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304e9190614d6d565b105b1561305d5750600a613105565b600b6000819052600a6020527fb3569174ca605aeef264a9f01151dace4275a70316034aaf090d8468560f043b546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156130d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fb9190614d6d565b10156131055750600b5b8015612f535760048054604051630ab714fb60e11b8152339281019290925260248201839052600160448301526001600160a01b03169063156e29f690606401612ed1565b806004602002015163ffffffff168360008151811061316b5761316b614c21565b602002602001015110156133a857601054156133a85760006010805490508460018151811061319c5761319c614c21565b60200260200101516131ae9190614dd2565b90506000601082815481106131c5576131c5614c21565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b900463ffffffff1691810191909152601080549192509061321190600190614d86565b8154811061322157613221614c21565b906000526020600020016010838154811061323e5761323e614c21565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff16909102179055601080548061329f5761329f614d9d565b600082815260209020600019908201810180546001600160c01b031916905501905580516001600160a01b03166323b872dd303360208501516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015263ffffffff166044820152606401600060405180830381600087803b15801561332d57600080fd5b505af1158015613341573d6000803e3d6000fd5b5050505061334c3390565b6001600160a01b03167fbe4d321aba0fe98b403988d87339ccb2205d45905143cef8eab816ff8bc766ce82600001518360200151604051612bbc9291906001600160a01b0392909216825263ffffffff16602082015260400190565b60405184815233907f79ec8a0a6d79f8b0012bcd5c0458a35b67ec51c067bff7a8971ae34a6de98f8d9060200160405180910390a250505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600183016020526040812054151561262b565b60006007836136615760c883108015613504575060046000819052600a6020527fe1eb2b2161a492c07c5a334e48012567cba93ec021043f53c1955516a3c5a84154815460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916134bf91810190815260200190565b6020604051808303816000875af11580156134de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135029190614d6d565b105b1561351157506004613bda565b61125c831080156135ab575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af1158015613585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a99190614d6d565b105b156135b857506005613bda565b61125c83108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024015b6020604051808303816000875af115801561362d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136519190614d6d565b105b1561365c575060065b613bda565b836008141561376b5761038483108015613704575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156136de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137029190614d6d565b105b1561371157506005613bda565b61132483108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b0399060240161360e565b8360011415613875576103208310801561380e575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156137e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380c9190614d6d565b105b1561381b57506005613bda565b61189c83108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b0399060240161360e565b836002141561397f5761012c83108015613918575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156138f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139169190614d6d565b105b1561392557506005613bda565b610d4883108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b0399060240161360e565b8360091415613a885760c883108015613a21575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af11580156139fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1f9190614d6d565b105b15613a2e57506005613bda565b610c1c83108015613653575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b0399060240161360e565b8360031415613bda57606483108015613b2a575060056000819052600a602052600080516020614e8d833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af1158015613b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b289190614d6d565b105b15613b3757506005613bda565b6108fc83108015613bd1575060066000819052600a602052600080516020614ead833981519152546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af1158015613bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bcf9190614d6d565b105b15613bda575060065b806007148015613c86575060076000819052600a6020527f22e39f61d1e4986b4f116cea9067f62cc77d74dff1780ae9c8b5166d1dd28829546004805460405163bd85b03960e01b81529182019390935290916001600160a01b03169063bd85b039906024016020604051808303816000875af1158015613c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c839190614d6d565b10155b1561262b57604051631bb897d960e21b815260040160405180910390fd5b600080613cb2600886613433565b90506000613cc03386611b25565b9050600081613cd0576015613cd3565b60165b60408051808201918290529190600290826000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ce8579050505050505090506001600b60008981526020019081526020016000206000828254613d4f9190614e74565b9091555050805163ffffffff1685108015613d68575082155b15613e2057600354604051630852cd8d60e31b8152600481018990526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015613db357600080fd5b505af1158015613dc7573d6000803e3d6000fd5b50505050613dd23390565b6001600160a01b03167f0860d763b1363254fddd5455622cc9987ea72c2282820ad9347b7ed7b576069688604051613e0c91815260200190565b60405180910390a26000935050505061262b565b602081015163ffffffff1685118015613e37575082155b15613f1c57600f805460018101825560009182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201889055600354604080516323b872dd60e01b8152336004820152306024820152604481018b905290516001600160a01b03909216926323b872dd9260648084019382900301818387803b158015613ec357600080fd5b505af1158015613ed7573d6000803e3d6000fd5b50505050613ee23390565b6001600160a01b03167f25fecb51ab9b0f32dc8cf9de29e1dfdc9c0ff4ee392b2dcc9778505c0563778f88604051613e0c91815260200190565b604080518881526020810187905233917f1b99cb9eb38b218c9805217e0a152602d8310ea3e667acba2e94e5986d90ed06910160405180910390a25060019695505050505050565b6000818152600183016020526040812054613fab575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109d2565b5060006109d2565b600042444160026000815480929190613fcb90614c4d565b909155506040805160208101959095528401929092526bffffffffffffffffffffffff19606091821b1690830152607482015260940160405160208183030381529060405280519060200120905090565b6001830191839082156140a85791602002820160005b8382111561407657835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614032565b80156140a65782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614076565b505b506140b4929150614112565b5090565b60405180604001604052806002905b6140cf614127565b8152602001906001900390816140c75790505090565b60405180608001604052806004905b6140fc614145565b8152602001906001900390816140f45790505090565b5b808211156140b45760008155600101614113565b60405180604001604052806002906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b60006020828403121561417557600080fd5b81356001600160e01b03198116811461262b57600080fd5b60006020828403121561419f57600080fd5b5035919050565b60008083601f8401126141b857600080fd5b5081356001600160401b038111156141cf57600080fd5b6020830191508360208260051b85010111156141ea57600080fd5b9250929050565b6000806020838503121561420457600080fd5b82356001600160401b0381111561421a57600080fd5b614226858286016141a6565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561426a5783518352928401929184019160010161424e565b50909695505050505050565b8015158114611f1857600080fd5b60006020828403121561429657600080fd5b813561262b81614276565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156142df576142df6142a1565b604052919050565b60006001600160401b03821115614300576143006142a1565b5060051b60200190565b600082601f83011261431b57600080fd5b8135602061433061432b836142e7565b6142b7565b82815260059290921b8401810191818101908684111561434f57600080fd5b8286015b8481101561436a5780358352918301918301614353565b509695505050505050565b803563ffffffff8116811461438957600080fd5b919050565b600060405160a081018181106001600160401b03821117156143b2576143b26142a1565b60405290508060a08301848111156143c957600080fd5b835b818110156143ea576143dc81614375565b8352602092830192016143cb565b50505092915050565b6000604051604081018181106001600160401b0382111715614417576144176142a1565b8060405250809150604083018481111561443057600080fd5b835b818110156143ea5761444381614375565b835260209283019201614432565b6000806040838503121561446457600080fd5b82356001600160401b038082111561447b57600080fd5b6144878683870161430a565b935060209150818501358181111561449e57600080fd5b85019050601f80820187136144b257600080fd5b81356144c061432b826142e7565b81815260a0918202840185019185820191908a8411156144df57600080fd5b948601945b83861015614514578a858701126144fb5760008081fd5b6145058b8761438e565b835294850194918601916144e4565b508096505050505050509250929050565b6080810181836000805b600280821061453e5750614581565b835185845b8381101561456757825163ffffffff16825260209283019290910190600101614543565b50505060409490940193506020929092019160010161452f565b5050505092915050565b6001600160a01b0381168114611f1857600080fd5b6000806000606084860312156145b557600080fd5b83356145c08161458b565b925060208401356001600160401b038111156145db57600080fd5b6145e78682870161430a565b92505060408401356145f88161458b565b809150509250925092565b6000806040838503121561461657600080fd5b82356146218161458b565b915060208301356001600160401b0381111561463c57600080fd5b6146488582860161430a565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561426a57835115158352928401929184019160010161466e565b6000806040838503121561469f57600080fd5b50508035926020909101359150565b6000806000604084860312156146c357600080fd5b83356001600160401b038111156146d957600080fd5b6146e5868287016141a6565b90945092505060208401356145f881614276565b6000806000806000806060878903121561471257600080fd5b86356001600160401b038082111561472957600080fd5b6147358a838b016141a6565b9098509650602089013591508082111561474e57600080fd5b61475a8a838b016141a6565b9096509450604089013591508082111561477357600080fd5b5061478089828a016141a6565b979a9699509497509295939492505050565b610280810181836000805b600481101561458157825184835b60058110156147d057825163ffffffff168252602092830192909101906001016147ab565b50505060a093909301926020929092019160010161479d565b6000602082840312156147fb57600080fd5b813561262b8161458b565b600082601f83011261481757600080fd5b81356001600160401b03811115614830576148306142a1565b614843601f8201601f19166020016142b7565b81815284602083860101111561485857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561488d57600080fd5b85356148988161458b565b945060208601356148a88161458b565b935060408601356001600160401b03808211156148c457600080fd5b6148d089838a0161430a565b945060608801359150808211156148e657600080fd5b6148f289838a0161430a565b9350608088013591508082111561490857600080fd5b5061491588828901614806565b9150509295509295909350565b81516001600160a01b0316815260208083015163ffffffff1690820152604081016109d2565b6000806000806040858703121561495e57600080fd5b84356001600160401b038082111561497557600080fd5b614981888389016141a6565b9096509450602087013591508082111561499a57600080fd5b506149a7878288016141a6565b95989497509550505050565b60008060408084860312156149c757600080fd5b83356001600160401b03808211156149de57600080fd5b6149ea8783880161430a565b9450602091508186013581811115614a0157600080fd5b86019050601f8082018813614a1557600080fd5b8135614a2361432b826142e7565b81815260069190911b8301840190848101908a831115614a4257600080fd5b938501935b82851015614a77578a84860112614a5e5760008081fd5b614a688b866143f3565b82529386019390850190614a47565b809750505050505050509250929050565b60008060408385031215614a9b57600080fd5b8235614aa68161458b565b946020939093013593505050565b600060208284031215614ac657600080fd5b81356001600160401b03811115614adc57600080fd5b614ae88482850161430a565b949350505050565b600080600080600060a08688031215614b0857600080fd5b8535614b138161458b565b94506020860135614b238161458b565b9350604086013592506060860135915060808601356001600160401b03811115614b4c57600080fd5b61491588828901614806565b600080600060608486031215614b6d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215614b9957600080fd5b833592506020840135614bab8161458b565b915060408401356145f881614276565b602080825282518282018190526000919060409081850190868401855b82811015614c1457614c0484835180516001600160a01b0316825260209081015163ffffffff16910152565b9284019290850190600101614bd8565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614c6157614c61614c37565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6102808101818360005b60048110156143ea57815463ffffffff8082168552602082811c821690860152604082811c821690860152606082811c821690860152608091821c169084015260a09092019160019182019101614ca7565b600060208284031215614d0b57600080fd5b815161262b81614276565b600060208284031215614d2857600080fd5b815161262b8161458b565b60808101818360005b60028110156143ea57815463ffffffff8082168552602091821c169084015260409092019160019182019101614d3c565b600060208284031215614d7f57600080fd5b5051919050565b600082821015614d9857614d98614c37565b500390565b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615614dcd57614dcd614c37565b500290565b600082614def57634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160a01b03808816835260208188168185015286604085015285606085015260a06080850152845191508160a085015260005b82811015614e485785810182015185820160c001528101614e2c565b82811115614e5a57600060c084870101525b5050601f01601f19169190910160c0019695505050505050565b60008219821115614e8757614e87614c37565b50019056fef35035bc2b01d44bd35a1dcdc552315cffb73da35cfd60570b7b777f98036f9f10d9dd018e4cae503383c9f804c1c1603ada5856ee7894375d9b97cd8c8b27dba2646970667358221220e173d95762816e6155861828d1eb140b02c43c5446b1ba9f81f62e2c2100c07a64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001485297e942ce64e0870ece60179dfda34b4c625000000000000000000000000b6d460ac51b93bca63b694f099c4a8b3b1cf73b40000000000000000000000004fdf87d4edae3fe323b8f6df502ccac6c8b4ba28
-----Decoded View---------------
Arg [0] : moonrunnersAddress (address): 0x1485297e942ce64E0870EcE60179dFda34b4C625
Arg [1] : moonrunnersLootAddress (address): 0xb6d460aC51B93BCa63B694f099C4A8b3B1CF73B4
Arg [2] : moonrunnersTrophiesAddress (address): 0x4fdF87d4Edae3Fe323b8F6dF502CCac6c8B4ba28
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001485297e942ce64e0870ece60179dfda34b4c625
Arg [1] : 000000000000000000000000b6d460ac51b93bca63b694f099c4a8b3b1cf73b4
Arg [2] : 0000000000000000000000004fdf87d4edae3fe323b8f6df502ccac6c8b4ba28
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.