Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 5,305 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Use Item On Ling | 9108514 | 7 mins ago | IN | 0 S | 0.01365745 | ||||
Use Item On Ling | 9108441 | 8 mins ago | IN | 0 S | 0.01416145 | ||||
Use Item On Ling | 9108381 | 8 mins ago | IN | 0 S | 0.01416145 | ||||
Use Item On Ling | 9108308 | 9 mins ago | IN | 0 S | 0.01416145 | ||||
Use Item On Ling | 9108123 | 10 mins ago | IN | 0 S | 0.01416145 | ||||
Use Item On Ling | 9108037 | 10 mins ago | IN | 0 S | 0.01416145 | ||||
Use Item On Ling | 9107949 | 11 mins ago | IN | 0 S | 0.00654474 | ||||
Use Item On Ling | 9107938 | 11 mins ago | IN | 0 S | 0.00647867 | ||||
Use Item On Ling | 9107925 | 11 mins ago | IN | 0 S | 0.01416145 | ||||
Use Item On Ling | 9107819 | 11 mins ago | IN | 0 S | 0.00694585 | ||||
Buy Item | 9107713 | 12 mins ago | IN | 0 S | 0.0118839 | ||||
Use Item On Ling | 9107307 | 14 mins ago | IN | 0 S | 0.00847747 | ||||
Use Item On Ling | 9107294 | 14 mins ago | IN | 0 S | 0.00808824 | ||||
Use Item On Ling | 9107182 | 15 mins ago | IN | 0 S | 0.00557805 | ||||
Buy Item | 9105465 | 25 mins ago | IN | 0 S | 0.0039454 | ||||
Buy Item | 9105444 | 25 mins ago | IN | 0 S | 0.003946 | ||||
Use Item On Ling | 9101960 | 44 mins ago | IN | 0 S | 0.00613794 | ||||
Use Item On Ling | 9101890 | 44 mins ago | IN | 0 S | 0.00613794 | ||||
Use Item On Ling | 9101327 | 47 mins ago | IN | 0 S | 0.00613794 | ||||
Use Item On Ling | 9101187 | 48 mins ago | IN | 0 S | 0.00613794 | ||||
Use Item On Ling | 9101060 | 49 mins ago | IN | 0 S | 0.00613794 | ||||
Use Item On Ling | 9100971 | 50 mins ago | IN | 0 S | 0.00613794 | ||||
Use Item On Ling | 9095525 | 1 hr ago | IN | 0 S | 0.00939898 | ||||
Use Item On Ling | 9095457 | 1 hr ago | IN | 0 S | 0.0074179 | ||||
Use Item On Ling | 9095381 | 1 hr ago | IN | 0 S | 0.01526264 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ShopUseItem
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-09 */ // File: @openzeppelin/[email protected]/utils/Context.sol // 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; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: FINALdeployFA/LIB - Common Structs.sol pragma solidity ^0.8.9; library S { //Pet struct struct Unit { uint hp; //unit fainted when hp <= 0 uint attack; //attack - defense = damage on hp uint defense; //attack - defense = damage on hp uint speed; //how frequent to take a move uint intelligence; //how frequent to use skill uint genestrength; //depends on how many duplicates uint range; //range skill, id uint special; //special skill, id } struct Status { uint id; //unit id uint family; //determine which class of gear it can be wore. record while evolve, since its only has max 2 family, example Dragon+phantom, and 30gene max, so can use *100 uint stage; //1 is rookie, 2 is mature, 3 is perfect } struct Time { uint bond; //how many time you took on this unit , use to evolve uint stamina; //how much you can train it per day. it should follow saturation graph uint hunger; //how much you feed it per day. it should follow saturation graph } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: FINALdeployFA/INTERFACE - StorageV2.sol pragma solidity ^0.8.20; // Import your custom structs /** * @title IFARPG_Storage * @dev Interface for FARPG_Storage so other contracts can call it */ interface IFARPG_Storage { //------------------------------------------------------------------------- // Administrative / Master Contract Access //------------------------------------------------------------------------- function owner() external view returns (address); function masterContracts(uint index) external view returns (address); function masterIndex(address) external view returns (uint); function addMasterContract(address _address, uint _index) external; function addMasterContractBatch(address[] memory _addresses, uint[] memory _indices) external; function removeMasterContract(uint _index) external; function getAllMasterContracts() external view returns (address[] memory, uint[] memory); //------------------------------------------------------------------------- // UID Management //------------------------------------------------------------------------- function UIDmain(address) external view returns (uint); function UID_ownedby(uint) external view returns (address); function UIDcounter() external view returns (uint); function getUID(address player) external view returns (uint _UID); function transferUID(address player, address newplayerwallet) external; function registerUID(address player) external; function setUIDmain (address playerAddress, uint UID) external; function setUID_ownedby (uint UID, address playerAddress) external; //------------------------------------------------------------------------- // Quest (setters) //------------------------------------------------------------------------- function setMainQuest(address player, uint index, uint8 progress) external; function setSideQuest(address player, uint index, uint8 progress) external; function setPremiumScore(address player, uint score) external; function setPlayerGeneStrength(address player, uint index, uint strength) external; function setPlayerVitamin(address player, uint index, uint amount) external; //------------------------------------------------------------------------- // Quest (getters) //------------------------------------------------------------------------- function getMainQuestProgress(address player, uint index) external view returns (uint8); function getSideQuestProgress(address player, uint index) external view returns (uint8); function getPremiumScore(address player) external view returns (uint); function getPlayerQuestAndScore(address player, uint index) external view returns (uint, uint, uint); function getMainQuestProgressArray(address player) external view returns (uint8[64] memory); function getSideQuestProgressArray(address player) external view returns (uint8[64] memory); //------------------------------------------------------------------------- // Player Stats (setters) //------------------------------------------------------------------------- function setPersonalWallet(address player, address personal) external; function setGiveControlTo(address player, address web2wallet) external; function setExp(address player, uint experience) external; function setRankScore(address player, uint score) external; function setEnergy1(address player, uint energy) external; function setEnergy2(address player, uint energy) external; function setEnergy22(address player, uint energy) external; function setEnergy3(address player, uint energy) external; function setTeamFormat(address player, uint[60] calldata format) external; function setUsernameToUID(string memory username, uint _UID) external; function setUIDToUsername(uint _UID, string memory username) external; function deleteUsernameToAddress (string memory username) external; // Points function setPoint1(address player, uint point) external; function setPoint2(address player, uint point) external; function setPoint3(address player, uint point) external; function setPoint4(address player, uint point) external; function setPoint5(address player, uint point) external; function addPoint1(address player, uint point) external; function addPoint2(address player, uint point) external; function addPoint3(address player, uint point) external; function addPoint4(address player, uint point) external; function addPoint5(address player, uint point) external; //------------------------------------------------------------------------- // Player Stats (getters) //------------------------------------------------------------------------- function personalwallet(address) external view returns (address); function givecontrolto(address) external view returns (address); function getExperience(address player) external view returns (uint); function getRankingScore(address player) external view returns (uint); function getEnergy1(address player) external view returns (uint); function getEnergy2(address player) external view returns (uint); function getEnergy22(address player) external view returns (uint); function getEnergy3(address player) external view returns (uint); function getPlayerStats(address player) external view returns (uint, uint, uint, uint, uint, uint); function UIDToUsername(uint) external view returns (string memory); function usernameToUID(string memory) external view returns (uint); function getPoint1(address player) external view returns (uint); function getPoint2(address player) external view returns (uint); function getPoint3(address player) external view returns (uint); function getPoint4(address player) external view returns (uint); function getPoint5(address player) external view returns (uint); function getPlayerPoints(address player) external view returns (uint, uint, uint, uint, uint); function getPlayergenestrengthArray(address player) external view returns (uint[50] memory); function getPlayerGeneStrength(address player, uint index) external view returns (uint); function getPlayervitaminArray(address player) external view returns (uint[50] memory); function getPlayerVitamin(address player, uint index) external view returns (uint); //------------------------------------------------------------------------- // Limits (setters) //------------------------------------------------------------------------- function setLimit1(address player, uint limit) external; function setLimit2(address player, uint limit) external; function setLimit3(address player, uint limit) external; function setTimebound1(address player, uint timestamp) external; function setTimebound2(address player, uint timestamp) external; function setTimebound3(address player, uint timestamp) external; //------------------------------------------------------------------------- // Limits (getters) //------------------------------------------------------------------------- function getLimit1(address player) external view returns (uint); function getLimit2(address player) external view returns (uint); function getLimit3(address player) external view returns (uint); function getTimebound1(address player) external view returns (uint); function getTimebound2(address player) external view returns (uint); function getTimebound3(address player) external view returns (uint); function getPlayerLimits(address player) external view returns (uint, uint, uint, uint, uint, uint); //------------------------------------------------------------------------- // Numberset (setters) //------------------------------------------------------------------------- function setNumberSet1(address player, uint[6] memory number) external; function setNumberSet2(address player, uint[5] memory number) external; function setNumberSet3(address player, uint[5] memory number) external; function setNumberSet4(address player, uint[5] memory number) external; function setNumberSet5(address player, uint[5] memory number) external; function setNumberSet6(address player, uint[5] memory number) external; function setNumberSet7(address player, uint[5] memory number) external; function setNumberSet8(address player, uint[5] memory number) external; function setNumberSet9(address player, uint[5] memory number) external; function setNumberSetA(address player, uint[5] memory number) external; function setNumberSetB(address player, uint[5] memory number) external; function setNumberSetC(address player, uint[5] memory number) external; function setNumberSetD(address player, uint[5] memory number) external; function setNumberSetE(address player, uint[10] memory number) external; function setNumberSetF(address player, uint[10] memory number) external; function setNumberSetG(address player, uint[10] memory number) external; function setNumberSetH(address player, uint[10] memory number) external; //------------------------------------------------------------------------- // Numberset (getters) //------------------------------------------------------------------------- function getNumberSet1(address player) external view returns (uint[6] memory); function getNumberSet2(address player) external view returns (uint[5] memory); function getNumberSet3(address player) external view returns (uint[5] memory); function getNumberSet4(address player) external view returns (uint[5] memory); function getNumberSet5(address player) external view returns (uint[5] memory); function getNumberSet6(address player) external view returns (uint[5] memory); function getNumberSet7(address player) external view returns (uint[5] memory); function getNumberSet8(address player) external view returns (uint[5] memory); function getNumberSet9(address player) external view returns (uint[5] memory); function getNumberSetA(address player) external view returns (uint[5] memory); function getNumberSetB(address player) external view returns (uint[5] memory); function getNumberSetC(address player) external view returns (uint[5] memory); function getNumberSetD(address player) external view returns (uint[5] memory); function getNumberSetE(address player) external view returns (uint[10] memory); function getNumberSetF(address player) external view returns (uint[10] memory); function getNumberSetG(address player) external view returns (uint[10] memory); function getNumberSetH(address player) external view returns (uint[10] memory); //------------------------------------------------------------------------- // PVP Ranks //------------------------------------------------------------------------- struct Player { uint256 rankPoints; uint256 league; uint256 indexInLeague; // Index of the player within their league array } function setPlayers(address player, Player memory rankpointleagueindexinleague) external; function setReset_Time_Attempts(address player, uint[2] memory resettimeattemps) external; function setEligible_Opponents(address player, address[5] memory eligibleOppo) external; function setFaught_Opponents(address player, uint[5] memory faughtOppo) external; function setDefending_Formation(address player, uint[3] memory defendingslot) external; function getPlayers(address player) external view returns (Player memory ) ; function getReset_Time_Attempts(address player ) external view returns (uint[2] memory ); function getEligible_Opponents(address player ) external view returns (address[5] memory); function getFaught_Opponents(address player ) external view returns(uint[5] memory) ; function getDefending_Formation(address player) external view returns (uint[3] memory ); //------------------------------------------------------------------------- // Pet data (setters) //------------------------------------------------------------------------- function setPetUnits(address player, uint index, S.Unit memory newUnit) external; function setPetUnitsMaxVitamined(address player, uint index, S.Unit memory newUnit) external; function setPetStatuses(address player, uint index, S.Status memory newStatus) external; function setPetTimes(address player, uint index, S.Time memory newTime) external; //------------------------------------------------------------------------- // Pet data (getters) //------------------------------------------------------------------------- function getPetUnitsAll(address player) external view returns (S.Unit[500] memory); function getPetUnits(address player, uint _index) external view returns (S.Unit memory); function getPetUnitsMaxVitaminedAll(address player) external view returns (S.Unit[500] memory); function getPetUnitsMaxVitamined(address player, uint _index) external view returns (S.Unit memory); function getPetStatusesAll(address player) external view returns (S.Status[500] memory); function getPetStatuses(address player, uint _index) external view returns (S.Status memory); function getPetTimesAll(address player) external view returns (S.Time[500] memory); function getPetTimes(address player, uint _index) external view returns (S.Time memory); //------------------------------------------------------------------------- // Party / Outfit //------------------------------------------------------------------------- function setPartyFormation(address player, uint[30] memory slots) external; function setTrainerOutfitPosition(address player, uint[150] memory outfitIds) external; function getPartyFormation(address player) external view returns (uint[30] memory); function getAllOutfits(address player) external view returns (uint[150] memory); //------------------------------------------------------------------------- // Trainer Gene Infusing //------------------------------------------------------------------------- function setTrainerGeneInfusingGene(address player, uint index, uint value) external; function setTrainerGeneInfusingGeneAll(address player, uint[50] memory newData) external; function setTrainerGeneInfusingTimer(address player, uint index, uint value) external; function setTrainerGeneInfusingTimerAll(address player, uint[50] memory newData) external; function getTrainerGeneInfusingGeneAll(address player) external view returns (uint[50] memory) ; function getTrainerGeneInfusingTimerAll(address player) external view returns (uint[50] memory); function getTrainerGeneInfusingGene(address player, uint Index)external view returns (uint ) ; function getTrainerGeneInfusingTimer(address player, uint Index)external view returns (uint ); //------------------------------------------------------------------------- // Additional Utility //------------------------------------------------------------------------- function getBattleUnit3(address player, uint[3] calldata slots) external view returns (S.Unit[3] memory Units3, uint[3] memory UnitIds); function getSlotUnitMore(address player, uint startindex, uint stopindex) external view returns (S.Unit[] memory Units, uint[] memory UnitIds); function getTeamFormat(address _addr) external view returns (uint[60] memory); //------------------------------------------------------------------------- // Weather System //------------------------------------------------------------------------- function getWeatherUnity() external view returns (uint _weather, uint _daylight, uint _blocktime); function getWeatherBattle(uint _timenow) external view returns (uint _weather); function setWeatherConstants(uint[12] memory _weatherIndices) external; function getWeatherIndexConstants() external view returns (uint[] memory); } // File: FINALdeployFA/PUBLIC - ShopUseItem.sol pragma solidity ^0.8.19; //_______________________________________________________________ // ___ __ __ _ ___ _ ___ _ __ // | _ )\ \ / / _ | | / _ \ _ | | / _ \ (_)\ \ // | _ \ \ V / | || || (_) || || || (_) | _ | | // |___/ |_| \__/ \___/ \__/ \___/ ( ) | | // |/ /_/ //_______________________________________________________________ // Interface for accessing Storage //------------------------------------------------------------------- // _____ _ _ _______ ______ _____ ______ _____ ______ // |_ _| \ | |__ __| ____| __ \| ____/\ / ____| ____| // | | | \| | | | | |__ | |__) | |__ / \ | | | |__ // | | | . ` | | | | __| | _ /| __/ /\ \| | | __| // _| |_| |\ | | | | |____| | \ \| | / ____ \ |____| |____ // |_____|_| \_| |_| |______|_| \_\_|/_/ \_\_____|______| // //------------------------------------------------------------------- interface FARPG_RAMInterface { // Read functions function genetoid_mapping(uint trainergene) external pure returns (uint); function petunitsmax(uint id) external pure returns (S.Unit calldata); function petunitsevolveid(S.Status calldata _status, uint _trainergene, uint _exp, uint _hash) external pure returns (S.Status calldata); function transformIDtoStageFamily(uint _id) external pure returns (S.Status memory unitstatus); function summonStage3RangeSkill(uint _id_transformed) external pure returns (uint ranged); } interface IFARPGItemsToken { function mint( uint _amount, address _to, uint _id) external; function burn(address owner, uint _id, uint _amount) external; function balanceOf(address account, uint256 id) external view returns (uint256); } interface IFARPGLingsNFTToken { function mint( uint _amount, address _to, uint _id) external; function burn(address owner, uint _id, uint _amount) external; function balanceOf(address account, uint256 id) external view returns (uint256); } //-------*************************************************----------- contract ShopUseItem is Ownable, ReentrancyGuard { IFARPG_Storage public contractStorage; FARPG_RAMInterface public contractRAM; //for Vitamin in next phase IFARPGItemsToken public contractITEMS; constructor() { } event StatChangedResult(S.Unit AfterUnit, S.Status AfterStatus, S.Time AfterTime); event ShopPurchase(address indexed buyer, uint indexed itemID, uint quantity, uint totalPrice); event ItemUsed(address indexed user, uint indexed itemID, uint quantity, uint slot); // Re-entrancy time-based map mapping (address => uint) private reentrant_time; uint[20] public shopItemIDs = [2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; uint[20] public shopItemPrices = [95,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; //------------------------------------------------------------------- // _____ _ ____ ____ _ __ __ // / ____| | / __ \| _ \ /\ | | \ \ / / // | | __| | | | | | |_) | / \ | | \ \ / / // | | |_ | | | | | | _ < / /\ \ | | \ \/ / // | |__| | |___| |__| | |_) / ____ \| |____ \ / _ // \_____|______\____/|____/_/ \_\______| \/ (_) // //------------------------------------------------------------------- uint constant MAXSTAMINA = 24 hours; //initial stamina //--------------------------------------------------------- // _____ __ __ _____ _ _ // /\ | __ \| \/ |_ _| \ | | // / \ | | | | \ / | | | | \| | // / /\ \ | | | | |\/| | | | | . ` | // / ____ \| |__| | | | |_| |_| |\ | // /_/ \_\_____/|_| |_|_____|_| \_| // //--------------------------------------------------------- function updateStorageContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractStorage = IFARPG_Storage(_newContractAAddress); } function updateRAMContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractRAM = FARPG_RAMInterface(_newContractAAddress); } function updateITEMContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractITEMS = IFARPGItemsToken(_newContractAAddress); } function withdraw() external onlyOwner { // Function to withdraw all balance from the contract for revenue require(address(this).balance > 0, "Contract balance is zero"); payable(msg.sender).transfer(address(this).balance); } function setShopItem(uint _index, uint _itemID, uint _price) external onlyOwner { require(_index < 20, "Index out of range"); shopItemIDs[_index] = _itemID; shopItemPrices[_index] = _price; } //--------------------------------------------------------- // // _____ _______ _____ _______ // / ____|__ __|/\ | __ \__ __| // | (___ | | / \ | |__) | | | // \___ \ | | / /\ \ | _ / | | // ____) | | |/ ____ \| | \ \ | | // |_____/ |_/_/ \_\_| \_\ |_| // //--------------------------------------------------------- function noneReentrant_time(address player, uint timeSeconds) internal { //this is to prevent player spam an action or botting effectively. //this function must be Internal otherwise, it will congest a player reentrant time to make him/her unplayable require(block.timestamp - reentrant_time[player] >= timeSeconds,"Non-Reentrant, slow down TX attempts."); reentrant_time[player] = block.timestamp; } function accountAddressToProceed() public view returns (address) { // Ready for account abstraction // If the player doesn't provide a personal wallet, all data will be recorded in the trainer wallet address playerAddress = contractStorage.personalwallet(msg.sender); if (playerAddress == address(0)) { return msg.sender; } else { return playerAddress; } } function buyItem(uint _shopIndex, uint _quantity) external nonReentrant { noneReentrant_time(msg.sender, 1); // e.g. 1 second cooldown require(_shopIndex < 20, "Invalid shop index"); require(_quantity > 0, "Quantity=0 not allowed"); address player = accountAddressToProceed(); uint costEach = shopItemPrices[_shopIndex]; require(costEach > 0, "No item registered in shop"); // total cost uint totalCost = costEach * _quantity; // Check player has enough point1 uint playerPoint1 = contractStorage.getPoint1(player); require(playerPoint1 >= totalCost, "Not enough point1 to buy"); // Deduct cost contractStorage.setPoint1(player, playerPoint1 - totalCost); // Mint item to player uint itemID = shopItemIDs[_shopIndex]; contractITEMS.mint(_quantity, player, itemID); emit ShopPurchase(player, itemID, _quantity, totalCost); } function useItemOnLing(uint _itemID, uint _quantity, uint _slot) external nonReentrant { noneReentrant_time(msg.sender, 1); require(_quantity > 0, "Quantity=0 not allowed"); require(_quantity <= 4, "Confirm again, you dont need to feed so much, cap at 24hours"); address playerAddress = accountAddressToProceed(); // Check inventory uint balanceBefore = contractITEMS.balanceOf(playerAddress, _itemID); require(balanceBefore >= _quantity, "Not enough item balance"); // Burn items contractITEMS.burn(playerAddress, _itemID, _quantity); uint timeRestore; if (_itemID == 2) { // Stamina bar => 6 hours each timeRestore = 6 hours * _quantity; } else if (_itemID == 3) { // Stamina bar XL => 24 hours each timeRestore = 24 hours * _quantity; } else { revert("Invalid item for stamina restoration"); } S.Status memory _petstatus = contractStorage.getPetStatuses(playerAddress, _slot); require(_petstatus.id > 0, "empty slot, nothing to restore"); S.Time memory petTime = contractStorage.getPetTimes(playerAddress, _slot); require(timeRestore < petTime.stamina, "Restored too much, something wrong, stamina not set"); petTime.stamina -= timeRestore; contractStorage.setPetTimes(playerAddress, _slot, petTime); S.Unit memory currentUnit = contractStorage.getPetUnits(playerAddress, _slot); emit ItemUsed(playerAddress, _itemID, _quantity, _slot); emit StatChangedResult(currentUnit, _petstatus, petTime); } function getShopItems() external view returns (uint[20] memory itemIDs, uint[20] memory itemPrices) { return (shopItemIDs, shopItemPrices); } event GenestrengthGained(address indexed user, uint indexed trainerID, uint quantity, uint genestrengthAdded); function useTrainingStory(uint _itemID, uint _quantity) external nonReentrant { noneReentrant_time(msg.sender, 1); // Apply cooldown, e.g., 1 second address playerAddress = accountAddressToProceed(); // Validate Item ID Training Story require( _itemID == 101 || _itemID == 105 || _itemID == 106, "Invalid Training Story item ID" ); require(_quantity > 0 && _quantity % 60 == 0, "Quantity must be a multiple of 60"); uint genestrengthToAdd = _quantity / 60; uint _trainerIndex = _itemID - 101; //mapping to playergenestrength[50] uint playerItemBalance = contractITEMS.balanceOf(playerAddress, _itemID); require(playerItemBalance >= _quantity, "Not enough Training Story items to use"); contractITEMS.burn(playerAddress, _itemID, _quantity); uint currentGenestrength = contractStorage.getPlayerGeneStrength(playerAddress, _trainerIndex); uint newGenestrength = currentGenestrength + genestrengthToAdd; contractStorage.setPlayerGeneStrength(playerAddress, _trainerIndex, newGenestrength); emit GenestrengthGained(playerAddress, _trainerIndex, _quantity, genestrengthToAdd); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"trainerID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"genestrengthAdded","type":"uint256"}],"name":"GenestrengthGained","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"itemID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"slot","type":"uint256"}],"name":"ItemUsed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"itemID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"}],"name":"ShopPurchase","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"hp","type":"uint256"},{"internalType":"uint256","name":"attack","type":"uint256"},{"internalType":"uint256","name":"defense","type":"uint256"},{"internalType":"uint256","name":"speed","type":"uint256"},{"internalType":"uint256","name":"intelligence","type":"uint256"},{"internalType":"uint256","name":"genestrength","type":"uint256"},{"internalType":"uint256","name":"range","type":"uint256"},{"internalType":"uint256","name":"special","type":"uint256"}],"indexed":false,"internalType":"struct S.Unit","name":"AfterUnit","type":"tuple"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"family","type":"uint256"},{"internalType":"uint256","name":"stage","type":"uint256"}],"indexed":false,"internalType":"struct S.Status","name":"AfterStatus","type":"tuple"},{"components":[{"internalType":"uint256","name":"bond","type":"uint256"},{"internalType":"uint256","name":"stamina","type":"uint256"},{"internalType":"uint256","name":"hunger","type":"uint256"}],"indexed":false,"internalType":"struct S.Time","name":"AfterTime","type":"tuple"}],"name":"StatChangedResult","type":"event"},{"inputs":[],"name":"accountAddressToProceed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shopIndex","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"buyItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractITEMS","outputs":[{"internalType":"contract IFARPGItemsToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractRAM","outputs":[{"internalType":"contract FARPG_RAMInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStorage","outputs":[{"internalType":"contract IFARPG_Storage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getShopItems","outputs":[{"internalType":"uint256[20]","name":"itemIDs","type":"uint256[20]"},{"internalType":"uint256[20]","name":"itemPrices","type":"uint256[20]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_itemID","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setShopItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"shopItemIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"shopItemPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateITEMContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateRAMContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateStorageContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemID","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"uint256","name":"_slot","type":"uint256"}],"name":"useItemOnLing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemID","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"useTrainingStory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61030060405260026080908152600360a0525f60c081905260e08190526101008190526101208190526101408190526101608190526101808190526101a08190526101c08190526101e08190526102008190526102208190526102408190526102608190526102808190526102a08190526102c08190526102e0526100889060069060146101a7565b506040805161028081018252605f815261019060208201525f918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101829052610240810182905261026081019190915261013990601a9060146101ea565b50348015610145575f5ffd5b5061014f33610158565b60018055610232565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82601481019282156101da579160200282015b828111156101da578251829060ff169055916020019190600101906101ba565b506101e692915061021e565b5090565b82601481019282156101da579160200282015b828111156101da578251829061ffff169055916020019190600101906101fd565b5b808211156101e6575f815560010161021f565b6118718061023f5f395ff3fe608060405234801561000f575f5ffd5b5060043610610111575f3560e01c80638da5cb5b1161009e5780639ad56dd51161006e5780639ad56dd514610218578063b9f54f2c1461022b578063e56066591461023e578063e7d52adf14610251578063f2fde38b14610264575f5ffd5b80638da5cb5b146101da5780638e27841f146101ea57806396a33dc5146101fd5780639979c00914610205575f5ffd5b80634af2fe6f116100e45780634af2fe6f1461018357806357ce52c61461019657806365e17540146101a9578063715018a6146101bf5780637e68369a146101c7575f5ffd5b80630549b27e1461011557806306f94913146101455780630b70f57c1461015a5780633ccfd60b1461017b575b5f5ffd5b600254610128906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015861015336600461147c565b610277565b005b61016d61016836600461149e565b6102d0565b60405190815260200161013c565b6101586102e6565b600354610128906001600160a01b031681565b6101586101a43660046114b5565b610369565b6101b16106fc565b60405161013c9291906114fd565b61015861077b565b6101586101d536600461151a565b61078e565b5f546001600160a01b0316610128565b61016d6101f836600461149e565b610d54565b610128610d63565b6101586102133660046114b5565b610ded565b61015861022636600461147c565b611118565b61015861023936600461147c565b611168565b600454610128906001600160a01b031681565b61015861025f36600461151a565b6111b8565b61015861027236600461147c565b611236565b61027f6112ac565b6001600160a01b0381166102ae5760405162461bcd60e51b81526004016102a590611543565b60405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b601a81601481106102df575f80fd5b0154905081565b6102ee6112ac565b5f471161033d5760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f000000000000000060448201526064016102a5565b60405133904780156108fc02915f818181858888f19350505050158015610366573d5f5f3e3d5ffd5b50565b610371611305565b61037c33600161135e565b5f610385610d63565b905082606514806103965750826069145b806103a1575082606a145b6103ed5760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420547261696e696e672053746f7279206974656d204944000060448201526064016102a5565b5f821180156104045750610402603c83611580565b155b61045a5760405162461bcd60e51b815260206004820152602160248201527f5175616e74697479206d7573742062652061206d756c7469706c65206f6620366044820152600360fc1b60648201526084016102a5565b5f610466603c846115a7565b90505f6104746065866115ba565b60048054604051627eeac760e11b81526001600160a01b0387811693820193909352602481018990529293505f9291169062fdd58e90604401602060405180830381865afa1580156104c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ec91906115d3565b90508481101561054d5760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f75676820547261696e696e672053746f7279206974656d7320604482015265746f2075736560d01b60648201526084016102a5565b60048054604051637a94c56560e11b81526001600160a01b0387811693820193909352602481018990526044810188905291169063f5298aca906064015f604051808303815f87803b1580156105a1575f5ffd5b505af11580156105b3573d5f5f3e3d5ffd5b50506002546040516315f67cf360e31b81526001600160a01b038881166004830152602482018790525f9450909116915063afb3e79890604401602060405180830381865afa158015610608573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062c91906115d3565b90505f61063985836115ea565b600254604051635af875f760e01b81526001600160a01b0389811660048301526024820188905260448201849052929350911690635af875f7906064015f604051808303815f87803b15801561068d575f5ffd5b505af115801561069f573d5f5f3e3d5ffd5b5050604080518a8152602081018990528793506001600160a01b038a1692507f596c3e4040a0c17f5d2f992561d68ae69fb6d2809d1f46b24c3e700a51652b1f910160405180910390a35050505050506106f860018055565b5050565b610704611449565b61070c611449565b60408051610280810191829052600691601a9190839060149082845b8154815260200190600101908083116107285750506040805161028081019182905294965085935060149250905082845b8154815260200190600101908083116107595750505050509050915091509091565b6107836112ac565b61078c5f6113fa565b565b610796611305565b6107a133600161135e565b5f82116107e95760405162461bcd60e51b8152602060048201526016602482015275145d585b9d1a5d1e4f4c081b9bdd08185b1b1bddd95960521b60448201526064016102a5565b60048211156108605760405162461bcd60e51b815260206004820152603c60248201527f436f6e6669726d20616761696e2c20796f7520646f6e74206e65656420746f2060448201527f6665656420736f206d7563682c20636170206174203234686f7572730000000060648201526084016102a5565b5f610869610d63565b60048054604051627eeac760e11b81526001600160a01b0380851693820193909352602481018890529293505f9291169062fdd58e90604401602060405180830381865afa1580156108bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e191906115d3565b9050838110156109335760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768206974656d2062616c616e636500000000000000000060448201526064016102a5565b60048054604051637a94c56560e11b81526001600160a01b0385811693820193909352602481018890526044810187905291169063f5298aca906064015f604051808303815f87803b158015610987575f5ffd5b505af1158015610999573d5f5f3e3d5ffd5b505050505f856002036109b9576109b2856154606115fd565b9050610a22565b856003036109ce576109b285620151806115fd565b60405162461bcd60e51b8152602060048201526024808201527f496e76616c6964206974656d20666f72207374616d696e6120726573746f72616044820152633a34b7b760e11b60648201526084016102a5565b6002546040516388e6c74d60e01b81526001600160a01b038581166004830152602482018790525f9216906388e6c74d90604401606060405180830381865afa158015610a71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9591906116ad565b8051909150610ae65760405162461bcd60e51b815260206004820152601e60248201527f656d70747920736c6f742c206e6f7468696e6720746f20726573746f7265000060448201526064016102a5565b60025460405163fd45e19160e01b81526001600160a01b038681166004830152602482018890525f92169063fd45e19190604401606060405180830381865afa158015610b35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5991906116ad565b905080602001518310610bca5760405162461bcd60e51b815260206004820152603360248201527f526573746f72656420746f6f206d7563682c20736f6d657468696e672077726f6044820152721b99cb081cdd185b5a5b98481b9bdd081cd95d606a1b60648201526084016102a5565b8281602001818151610bdc91906115ba565b90525060025460405163108b074f60e31b81526001600160a01b03909116906384583a7890610c139088908a9086906004016116c7565b5f604051808303815f87803b158015610c2a575f5ffd5b505af1158015610c3c573d5f5f3e3d5ffd5b5050600254604051636802761f60e01b81526001600160a01b038981166004830152602482018b90525f94509091169150636802761f9060440161010060405180830381865afa158015610c92573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb69190611707565b905088866001600160a01b03167f9f1a0bd21656b4c554fcd876acb4d53960e31eda253ca02fa1ed7259627b698b8a8a604051610cfd929190918252602082015260400190565b60405180910390a37fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd818484604051610d3893929190611775565b60405180910390a1505050505050610d4f60018055565b505050565b600681601481106102df575f80fd5b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015610dad573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd1919061180c565b90506001600160a01b038116610de8573391505090565b919050565b610df5611305565b610e0033600161135e565b60148210610e455760405162461bcd60e51b8152602060048201526012602482015271092dcecc2d8d2c840e6d0dee040d2dcc8caf60731b60448201526064016102a5565b5f8111610e8d5760405162461bcd60e51b8152602060048201526016602482015275145d585b9d1a5d1e4f4c081b9bdd08185b1b1bddd95960521b60448201526064016102a5565b5f610e96610d63565b90505f601a8460148110610eac57610eac611827565b015490505f8111610eff5760405162461bcd60e51b815260206004820152601a60248201527f4e6f206974656d207265676973746572656420696e2073686f7000000000000060448201526064016102a5565b5f610f0a84836115fd565b60025460405163b353312f60e01b81526001600160a01b0386811660048301529293505f929091169063b353312f90602401602060405180830381865afa158015610f57573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b91906115d3565b905081811015610fcd5760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f75676820706f696e743120746f20627579000000000000000060448201526064016102a5565b6002546001600160a01b031663f9a4b87685610fe985856115ba565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b15801561102c575f5ffd5b505af115801561103e573d5f5f3e3d5ffd5b505050505f6006876014811061105657611056611827565b01546004805460405163020da84160e61b81529182018990526001600160a01b03888116602484015260448301849052929350919091169063836a1040906064015f604051808303815f87803b1580156110ae575f5ffd5b505af11580156110c0573d5f5f3e3d5ffd5b505060408051898152602081018790528493506001600160a01b03891692507f74022aa36b4af139aaf2f58dbb405f964e34c494ea14ec755c56c4d688f988c2910160405180910390a350505050506106f860018055565b6111206112ac565b6001600160a01b0381166111465760405162461bcd60e51b81526004016102a590611543565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6111706112ac565b6001600160a01b0381166111965760405162461bcd60e51b81526004016102a590611543565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6111c06112ac565b601483106112055760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b60448201526064016102a5565b816006846014811061121957611219611827565b015580601a846014811061122f5761122f611827565b0155505050565b61123e6112ac565b6001600160a01b0381166112a35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a5565b610366816113fa565b5f546001600160a01b0316331461078c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a5565b6002600154036113575760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102a5565b6002600155565b6001600160a01b0382165f90815260056020526040902054819061138290426115ba565b10156113de5760405162461bcd60e51b815260206004820152602560248201527f4e6f6e2d5265656e7472616e742c20736c6f7720646f776e205458206174746560448201526436b83a399760d91b60648201526084016102a5565b506001600160a01b03165f908152600560205260409020429055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061028001604052806014906020820280368337509192915050565b6001600160a01b0381168114610366575f5ffd5b5f6020828403121561148c575f5ffd5b813561149781611468565b9392505050565b5f602082840312156114ae575f5ffd5b5035919050565b5f5f604083850312156114c6575f5ffd5b50508035926020909101359150565b805f5b60148110156114f75781518452602093840193909101906001016114d8565b50505050565b610500810161150c82856114d5565b6114976102808301846114d5565b5f5f5f6060848603121561152c575f5ffd5b505081359360208301359350604090920135919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b5f52601260045260245ffd5b5f8261158e5761158e61156c565b500690565b634e487b7160e01b5f52601160045260245ffd5b5f826115b5576115b561156c565b500490565b818103818111156115cd576115cd611593565b92915050565b5f602082840312156115e3575f5ffd5b5051919050565b808201808211156115cd576115cd611593565b80820281158282048414176115cd576115cd611593565b604051610100810167ffffffffffffffff8111828210171561164457634e487b7160e01b5f52604160045260245ffd5b60405290565b5f6060828403121561165a575f5ffd5b6040516060810167ffffffffffffffff8111828210171561168957634e487b7160e01b5f52604160045260245ffd5b60409081528351825260208085015190830152928301519281019290925250919050565b5f606082840312156116bd575f5ffd5b611497838361164a565b6001600160a01b03841681526020810183905260a081016116ff60408301848051825260208082015190830152604090810151910152565b949350505050565b5f610100828403128015611719575f5ffd5b50611722611614565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b5f6101c082019050845182526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c085015160c083015260e085015160e08301526117e96101008301858051825260208082015190830152604090810151910152565b8251610160830152602083015161018083015260408301516101a08301526116ff565b5f6020828403121561181c575f5ffd5b815161149781611468565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220f882c4b9aa6e7354a03db73d92bca0f68f261c77764b059743a056cda4fa321964736f6c634300081c0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610111575f3560e01c80638da5cb5b1161009e5780639ad56dd51161006e5780639ad56dd514610218578063b9f54f2c1461022b578063e56066591461023e578063e7d52adf14610251578063f2fde38b14610264575f5ffd5b80638da5cb5b146101da5780638e27841f146101ea57806396a33dc5146101fd5780639979c00914610205575f5ffd5b80634af2fe6f116100e45780634af2fe6f1461018357806357ce52c61461019657806365e17540146101a9578063715018a6146101bf5780637e68369a146101c7575f5ffd5b80630549b27e1461011557806306f94913146101455780630b70f57c1461015a5780633ccfd60b1461017b575b5f5ffd5b600254610128906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015861015336600461147c565b610277565b005b61016d61016836600461149e565b6102d0565b60405190815260200161013c565b6101586102e6565b600354610128906001600160a01b031681565b6101586101a43660046114b5565b610369565b6101b16106fc565b60405161013c9291906114fd565b61015861077b565b6101586101d536600461151a565b61078e565b5f546001600160a01b0316610128565b61016d6101f836600461149e565b610d54565b610128610d63565b6101586102133660046114b5565b610ded565b61015861022636600461147c565b611118565b61015861023936600461147c565b611168565b600454610128906001600160a01b031681565b61015861025f36600461151a565b6111b8565b61015861027236600461147c565b611236565b61027f6112ac565b6001600160a01b0381166102ae5760405162461bcd60e51b81526004016102a590611543565b60405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b601a81601481106102df575f80fd5b0154905081565b6102ee6112ac565b5f471161033d5760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f000000000000000060448201526064016102a5565b60405133904780156108fc02915f818181858888f19350505050158015610366573d5f5f3e3d5ffd5b50565b610371611305565b61037c33600161135e565b5f610385610d63565b905082606514806103965750826069145b806103a1575082606a145b6103ed5760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420547261696e696e672053746f7279206974656d204944000060448201526064016102a5565b5f821180156104045750610402603c83611580565b155b61045a5760405162461bcd60e51b815260206004820152602160248201527f5175616e74697479206d7573742062652061206d756c7469706c65206f6620366044820152600360fc1b60648201526084016102a5565b5f610466603c846115a7565b90505f6104746065866115ba565b60048054604051627eeac760e11b81526001600160a01b0387811693820193909352602481018990529293505f9291169062fdd58e90604401602060405180830381865afa1580156104c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ec91906115d3565b90508481101561054d5760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f75676820547261696e696e672053746f7279206974656d7320604482015265746f2075736560d01b60648201526084016102a5565b60048054604051637a94c56560e11b81526001600160a01b0387811693820193909352602481018990526044810188905291169063f5298aca906064015f604051808303815f87803b1580156105a1575f5ffd5b505af11580156105b3573d5f5f3e3d5ffd5b50506002546040516315f67cf360e31b81526001600160a01b038881166004830152602482018790525f9450909116915063afb3e79890604401602060405180830381865afa158015610608573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062c91906115d3565b90505f61063985836115ea565b600254604051635af875f760e01b81526001600160a01b0389811660048301526024820188905260448201849052929350911690635af875f7906064015f604051808303815f87803b15801561068d575f5ffd5b505af115801561069f573d5f5f3e3d5ffd5b5050604080518a8152602081018990528793506001600160a01b038a1692507f596c3e4040a0c17f5d2f992561d68ae69fb6d2809d1f46b24c3e700a51652b1f910160405180910390a35050505050506106f860018055565b5050565b610704611449565b61070c611449565b60408051610280810191829052600691601a9190839060149082845b8154815260200190600101908083116107285750506040805161028081019182905294965085935060149250905082845b8154815260200190600101908083116107595750505050509050915091509091565b6107836112ac565b61078c5f6113fa565b565b610796611305565b6107a133600161135e565b5f82116107e95760405162461bcd60e51b8152602060048201526016602482015275145d585b9d1a5d1e4f4c081b9bdd08185b1b1bddd95960521b60448201526064016102a5565b60048211156108605760405162461bcd60e51b815260206004820152603c60248201527f436f6e6669726d20616761696e2c20796f7520646f6e74206e65656420746f2060448201527f6665656420736f206d7563682c20636170206174203234686f7572730000000060648201526084016102a5565b5f610869610d63565b60048054604051627eeac760e11b81526001600160a01b0380851693820193909352602481018890529293505f9291169062fdd58e90604401602060405180830381865afa1580156108bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e191906115d3565b9050838110156109335760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768206974656d2062616c616e636500000000000000000060448201526064016102a5565b60048054604051637a94c56560e11b81526001600160a01b0385811693820193909352602481018890526044810187905291169063f5298aca906064015f604051808303815f87803b158015610987575f5ffd5b505af1158015610999573d5f5f3e3d5ffd5b505050505f856002036109b9576109b2856154606115fd565b9050610a22565b856003036109ce576109b285620151806115fd565b60405162461bcd60e51b8152602060048201526024808201527f496e76616c6964206974656d20666f72207374616d696e6120726573746f72616044820152633a34b7b760e11b60648201526084016102a5565b6002546040516388e6c74d60e01b81526001600160a01b038581166004830152602482018790525f9216906388e6c74d90604401606060405180830381865afa158015610a71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9591906116ad565b8051909150610ae65760405162461bcd60e51b815260206004820152601e60248201527f656d70747920736c6f742c206e6f7468696e6720746f20726573746f7265000060448201526064016102a5565b60025460405163fd45e19160e01b81526001600160a01b038681166004830152602482018890525f92169063fd45e19190604401606060405180830381865afa158015610b35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5991906116ad565b905080602001518310610bca5760405162461bcd60e51b815260206004820152603360248201527f526573746f72656420746f6f206d7563682c20736f6d657468696e672077726f6044820152721b99cb081cdd185b5a5b98481b9bdd081cd95d606a1b60648201526084016102a5565b8281602001818151610bdc91906115ba565b90525060025460405163108b074f60e31b81526001600160a01b03909116906384583a7890610c139088908a9086906004016116c7565b5f604051808303815f87803b158015610c2a575f5ffd5b505af1158015610c3c573d5f5f3e3d5ffd5b5050600254604051636802761f60e01b81526001600160a01b038981166004830152602482018b90525f94509091169150636802761f9060440161010060405180830381865afa158015610c92573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb69190611707565b905088866001600160a01b03167f9f1a0bd21656b4c554fcd876acb4d53960e31eda253ca02fa1ed7259627b698b8a8a604051610cfd929190918252602082015260400190565b60405180910390a37fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd818484604051610d3893929190611775565b60405180910390a1505050505050610d4f60018055565b505050565b600681601481106102df575f80fd5b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015610dad573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd1919061180c565b90506001600160a01b038116610de8573391505090565b919050565b610df5611305565b610e0033600161135e565b60148210610e455760405162461bcd60e51b8152602060048201526012602482015271092dcecc2d8d2c840e6d0dee040d2dcc8caf60731b60448201526064016102a5565b5f8111610e8d5760405162461bcd60e51b8152602060048201526016602482015275145d585b9d1a5d1e4f4c081b9bdd08185b1b1bddd95960521b60448201526064016102a5565b5f610e96610d63565b90505f601a8460148110610eac57610eac611827565b015490505f8111610eff5760405162461bcd60e51b815260206004820152601a60248201527f4e6f206974656d207265676973746572656420696e2073686f7000000000000060448201526064016102a5565b5f610f0a84836115fd565b60025460405163b353312f60e01b81526001600160a01b0386811660048301529293505f929091169063b353312f90602401602060405180830381865afa158015610f57573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b91906115d3565b905081811015610fcd5760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f75676820706f696e743120746f20627579000000000000000060448201526064016102a5565b6002546001600160a01b031663f9a4b87685610fe985856115ba565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b15801561102c575f5ffd5b505af115801561103e573d5f5f3e3d5ffd5b505050505f6006876014811061105657611056611827565b01546004805460405163020da84160e61b81529182018990526001600160a01b03888116602484015260448301849052929350919091169063836a1040906064015f604051808303815f87803b1580156110ae575f5ffd5b505af11580156110c0573d5f5f3e3d5ffd5b505060408051898152602081018790528493506001600160a01b03891692507f74022aa36b4af139aaf2f58dbb405f964e34c494ea14ec755c56c4d688f988c2910160405180910390a350505050506106f860018055565b6111206112ac565b6001600160a01b0381166111465760405162461bcd60e51b81526004016102a590611543565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6111706112ac565b6001600160a01b0381166111965760405162461bcd60e51b81526004016102a590611543565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6111c06112ac565b601483106112055760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b60448201526064016102a5565b816006846014811061121957611219611827565b015580601a846014811061122f5761122f611827565b0155505050565b61123e6112ac565b6001600160a01b0381166112a35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a5565b610366816113fa565b5f546001600160a01b0316331461078c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a5565b6002600154036113575760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102a5565b6002600155565b6001600160a01b0382165f90815260056020526040902054819061138290426115ba565b10156113de5760405162461bcd60e51b815260206004820152602560248201527f4e6f6e2d5265656e7472616e742c20736c6f7720646f776e205458206174746560448201526436b83a399760d91b60648201526084016102a5565b506001600160a01b03165f908152600560205260409020429055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061028001604052806014906020820280368337509192915050565b6001600160a01b0381168114610366575f5ffd5b5f6020828403121561148c575f5ffd5b813561149781611468565b9392505050565b5f602082840312156114ae575f5ffd5b5035919050565b5f5f604083850312156114c6575f5ffd5b50508035926020909101359150565b805f5b60148110156114f75781518452602093840193909101906001016114d8565b50505050565b610500810161150c82856114d5565b6114976102808301846114d5565b5f5f5f6060848603121561152c575f5ffd5b505081359360208301359350604090920135919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b5f52601260045260245ffd5b5f8261158e5761158e61156c565b500690565b634e487b7160e01b5f52601160045260245ffd5b5f826115b5576115b561156c565b500490565b818103818111156115cd576115cd611593565b92915050565b5f602082840312156115e3575f5ffd5b5051919050565b808201808211156115cd576115cd611593565b80820281158282048414176115cd576115cd611593565b604051610100810167ffffffffffffffff8111828210171561164457634e487b7160e01b5f52604160045260245ffd5b60405290565b5f6060828403121561165a575f5ffd5b6040516060810167ffffffffffffffff8111828210171561168957634e487b7160e01b5f52604160045260245ffd5b60409081528351825260208085015190830152928301519281019290925250919050565b5f606082840312156116bd575f5ffd5b611497838361164a565b6001600160a01b03841681526020810183905260a081016116ff60408301848051825260208082015190830152604090810151910152565b949350505050565b5f610100828403128015611719575f5ffd5b50611722611614565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b5f6101c082019050845182526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c085015160c083015260e085015160e08301526117e96101008301858051825260208082015190830152604090810151910152565b8251610160830152602083015161018083015260408301516101a08301526116ff565b5f6020828403121561181c575f5ffd5b815161149781611468565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220f882c4b9aa6e7354a03db73d92bca0f68f261c77764b059743a056cda4fa321964736f6c634300081c0033
Deployed Bytecode Sourcemap
26811:9054:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26869:37;;;;;-1:-1:-1;;;;;26869:37:0;;;;;;-1:-1:-1;;;;;201:32:1;;;183:51;;171:2;156:18;26869:37:0;;;;;;;;29073:230;;;;;;:::i;:::-;;:::i;:::-;;27520:77;;;;;;:::i;:::-;;:::i;:::-;;;1010:25:1;;;998:2;983:18;27520:77:0;864:177:1;29552:257:0;;;:::i;26913:37::-;;;;;-1:-1:-1;;;;;26913:37:0;;;34545:1309;;;;;;:::i;:::-;;:::i;34256:155::-;;;:::i;:::-;;;;;;;;:::i;2788:103::-;;;:::i;32501:1747::-;;;;;;:::i;:::-;;:::i;2140:87::-;2186:7;2213:6;-1:-1:-1;;;;;2213:6:0;2140:87;;27442:71;;;;;;:::i;:::-;;:::i;31014:441::-;;;:::i;31490:1001::-;;;;;;:::i;:::-;;:::i;29309:231::-;;;;;;:::i;:::-;;:::i;28833:234::-;;;;;;:::i;:::-;;:::i;26985:37::-;;;;;-1:-1:-1;;;;;26985:37:0;;;29820:223;;;;;;:::i;:::-;;:::i;3046:201::-;;;;;;:::i;:::-;;:::i;29073:230::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;29176:34:0;::::1;29168:62;;;;-1:-1:-1::0;;;29168:62:0::1;;;;;;;:::i;:::-;;;;;;;;;29241:11;:54:::0;;-1:-1:-1;;;;;;29241:54:0::1;-1:-1:-1::0;;;;;29241:54:0;;;::::1;::::0;;;::::1;::::0;;29073:230::o;27520:77::-;;;;;;;;;;;;;;;-1:-1:-1;27520:77:0;:::o;29552:257::-;2026:13;:11;:13::i;:::-;29709:1:::1;29685:21;:25;29677:62;;;::::0;-1:-1:-1;;;29677:62:0;;3786:2:1;29677:62:0::1;::::0;::::1;3768:21:1::0;3825:2;3805:18;;;3798:30;3864:26;3844:18;;;3837:54;3908:18;;29677:62:0::1;3584:348:1::0;29677:62:0::1;29750:51;::::0;29758:10:::1;::::0;29779:21:::1;29750:51:::0;::::1;;;::::0;::::1;::::0;;;29779:21;29758:10;29750:51;::::1;;;;;;;;;;;;;;;;;;;;29552:257::o:0;34545:1309::-;7139:21;:19;:21::i;:::-;34634:33:::1;34653:10;34665:1;34634:18;:33::i;:::-;34712:21;34736:25;:23;:25::i;:::-;34712:49;;34838:7;34849:3;34838:14;:46;;;;34870:7;34881:3;34870:14;34838:46;:78;;;;34902:7;34913:3;34902:14;34838:78;34816:158;;;::::0;-1:-1:-1;;;34816:158:0;;4139:2:1;34816:158:0::1;::::0;::::1;4121:21:1::0;4178:2;4158:18;;;4151:30;4217:32;4197:18;;;4190:60;4267:18;;34816:158:0::1;3937:354:1::0;34816:158:0::1;35007:1;34995:9;:13;:36;;;;-1:-1:-1::0;35012:14:0::1;35024:2;35012:9:::0;:14:::1;:::i;:::-;:19:::0;34995:36:::1;34987:82;;;::::0;-1:-1:-1;;;34987:82:0;;4747:2:1;34987:82:0::1;::::0;::::1;4729:21:1::0;4786:2;4766:18;;;4759:30;4825:34;4805:18;;;4798:62;-1:-1:-1;;;4876:18:1;;;4869:31;4917:19;;34987:82:0::1;4545:397:1::0;34987:82:0::1;35084:22;35109:14;35121:2;35109:9:::0;:14:::1;:::i;:::-;35084:39:::0;-1:-1:-1;35136:18:0::1;35157:13;35167:3;35157:7:::0;:13:::1;:::i;:::-;35251;::::0;;:47:::1;::::0;-1:-1:-1;;;35251:47:0;;-1:-1:-1;;;;;5529:32:1;;;35251:47:0;;::::1;5511:51:1::0;;;;5578:18;;;5571:34;;;35136::0;;-1:-1:-1;35226:22:0::1;::::0;35251:13;::::1;::::0;:23:::1;::::0;5484:18:1;;35251:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35226:72;;35338:9;35317:17;:30;;35309:81;;;::::0;-1:-1:-1;;;35309:81:0;;6053:2:1;35309:81:0::1;::::0;::::1;6035:21:1::0;6092:2;6072:18;;;6065:30;6131:34;6111:18;;;6104:62;-1:-1:-1;;;6182:18:1;;;6175:36;6228:19;;35309:81:0::1;5851:402:1::0;35309:81:0::1;35410:13;::::0;;:53:::1;::::0;-1:-1:-1;;;35410:53:0;;-1:-1:-1;;;;;6478:32:1;;;35410:53:0;;::::1;6460:51:1::0;;;;6527:18;;;6520:34;;;6570:18;;;6563:34;;;35410:13:0;::::1;::::0;:18:::1;::::0;6433::1;;35410:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;35511:15:0::1;::::0;:67:::1;::::0;-1:-1:-1;;;35511:67:0;;-1:-1:-1;;;;;5529:32:1;;;35511:67:0::1;::::0;::::1;5511:51:1::0;5578:18;;;5571:34;;;35484:24:0::1;::::0;-1:-1:-1;35511:15:0;;::::1;::::0;-1:-1:-1;35511:37:0::1;::::0;5484:18:1;;35511:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35484:94:::0;-1:-1:-1;35589:20:0::1;35612:39;35634:17:::0;35484:94;35612:39:::1;:::i;:::-;35662:15;::::0;:84:::1;::::0;-1:-1:-1;;;35662:84:0;;-1:-1:-1;;;;;6478:32:1;;;35662:84:0::1;::::0;::::1;6460:51:1::0;6527:18;;;6520:34;;;6570:18;;;6563:34;;;35589:62:0;;-1:-1:-1;35662:15:0;::::1;::::0;:37:::1;::::0;6433:18:1;;35662:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;35768:78:0::1;::::0;;6912:25:1;;;6968:2;6953:18;;6946:34;;;35802:13:0;;-1:-1:-1;;;;;;35768:78:0;::::1;::::0;-1:-1:-1;35768:78:0::1;::::0;6885:18:1;35768:78:0::1;;;;;;;34623:1231;;;;;;7183:20:::0;6577:1;7703:22;;7520:213;7183:20;34545:1309;;:::o;34256:155::-;34303:23;;:::i;:::-;34328:26;;:::i;:::-;34367:36;;;;;;;;;;34375:11;;34388:14;;34367:36;34375:11;;34367:36;;34375:11;34367:36;;;;;;;;;;;;;;;;;-1:-1:-1;;34367:36:0;;;;;;;;;;;;-1:-1:-1;34367:36:0;;-1:-1:-1;34367:36:0;;-1:-1:-1;34367:36:0;-1:-1:-1;34367:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34256:155;;:::o;2788:103::-;2026:13;:11;:13::i;:::-;2853:30:::1;2880:1;2853:18;:30::i;:::-;2788:103::o:0;32501:1747::-;7139:21;:19;:21::i;:::-;32599:33:::1;32618:10;32630:1;32599:18;:33::i;:::-;32663:1;32651:9;:13;32643:48;;;::::0;-1:-1:-1;;;32643:48:0;;7193:2:1;32643:48:0::1;::::0;::::1;7175:21:1::0;7232:2;7212:18;;;7205:30;-1:-1:-1;;;7251:18:1;;;7244:52;7313:18;;32643:48:0::1;6991:346:1::0;32643:48:0::1;32723:1;32710:9;:14;;32702:87;;;::::0;-1:-1:-1;;;32702:87:0;;7544:2:1;32702:87:0::1;::::0;::::1;7526:21:1::0;7583:2;7563:18;;;7556:30;7622:34;7602:18;;;7595:62;7693:30;7673:18;;;7666:58;7741:19;;32702:87:0::1;7342:424:1::0;32702:87:0::1;32802:21;32826:25;:23;:25::i;:::-;32911:13;::::0;;:47:::1;::::0;-1:-1:-1;;;32911:47:0;;-1:-1:-1;;;;;5529:32:1;;;32911:47:0;;::::1;5511:51:1::0;;;;5578:18;;;5571:34;;;32802:49:0;;-1:-1:-1;32890:18:0::1;::::0;32911:13;::::1;::::0;:23:::1;::::0;5484:18:1;;32911:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32890:68;;32994:9;32977:13;:26;;32969:62;;;::::0;-1:-1:-1;;;32969:62:0;;7973:2:1;32969:62:0::1;::::0;::::1;7955:21:1::0;8012:2;7992:18;;;7985:30;8051:25;8031:18;;;8024:53;8094:18;;32969:62:0::1;7771:347:1::0;32969:62:0::1;33067:13;::::0;;:53:::1;::::0;-1:-1:-1;;;33067:53:0;;-1:-1:-1;;;;;6478:32:1;;;33067:53:0;;::::1;6460:51:1::0;;;;6527:18;;;6520:34;;;6570:18;;;6563:34;;;33067:13:0;::::1;::::0;:18:::1;::::0;6433::1;;33067:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33142:16;33173:7;33184:1;33173:12:::0;33169:334:::1;;33260:19;33270:9:::0;33260:7:::1;:19;:::i;:::-;33246:33;;33169:334;;;33301:7;33312:1;33301:12:::0;33297:206:::1;;33392:20;33403:9:::0;33392:8:::1;:20;:::i;33297:206::-;33445:46;::::0;-1:-1:-1;;;33445:46:0;;8498:2:1;33445:46:0::1;::::0;::::1;8480:21:1::0;8537:2;8517:18;;;8510:30;8576:34;8556:18;;;8549:62;-1:-1:-1;;;8627:18:1;;;8620:34;8671:19;;33445:46:0::1;8296:400:1::0;33297:206:0::1;33542:15;::::0;:52:::1;::::0;-1:-1:-1;;;33542:52:0;;-1:-1:-1;;;;;5529:32:1;;;33542:52:0::1;::::0;::::1;5511:51:1::0;5578:18;;;5571:34;;;33513:26:0::1;::::0;33542:15:::1;::::0;:30:::1;::::0;5484:18:1;;33542:52:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33613:13:::0;;33513:81;;-1:-1:-1;33605:60:0::1;;;::::0;-1:-1:-1;;;33605:60:0;;10308:2:1;33605:60:0::1;::::0;::::1;10290:21:1::0;10347:2;10327:18;;;10320:30;10386:32;10366:18;;;10359:60;10436:18;;33605:60:0::1;10106:354:1::0;33605:60:0::1;33711:15;::::0;:49:::1;::::0;-1:-1:-1;;;33711:49:0;;-1:-1:-1;;;;;5529:32:1;;;33711:49:0::1;::::0;::::1;5511:51:1::0;5578:18;;;5571:34;;;33687:21:0::1;::::0;33711:15:::1;::::0;:27:::1;::::0;5484:18:1;;33711:49:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33687:73;;33793:7;:15;;;33779:11;:29;33771:93;;;::::0;-1:-1:-1;;;33771:93:0;;10916:2:1;33771:93:0::1;::::0;::::1;10898:21:1::0;10955:2;10935:18;;;10928:30;10994:34;10974:18;;;10967:62;-1:-1:-1;;;11045:18:1;;;11038:49;11104:19;;33771:93:0::1;10714:415:1::0;33771:93:0::1;33914:11;33895:7;:15;;:30;;;;;;;:::i;:::-;::::0;;-1:-1:-1;33948:15:0::1;::::0;:58:::1;::::0;-1:-1:-1;;;33948:58:0;;-1:-1:-1;;;;;33948:15:0;;::::1;::::0;:27:::1;::::0;:58:::1;::::0;33976:13;;33991:5;;33998:7;;33948:58:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34047:15:0::1;::::0;:49:::1;::::0;-1:-1:-1;;;34047:49:0;;-1:-1:-1;;;;;5529:32:1;;;34047:49:0::1;::::0;::::1;5511:51:1::0;5578:18;;;5571:34;;;34019:25:0::1;::::0;-1:-1:-1;34047:15:0;;::::1;::::0;-1:-1:-1;34047:27:0::1;::::0;5484:18:1;;34047:49:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34019:77;;34147:7;34132:13;-1:-1:-1::0;;;;;34123:50:0::1;;34156:9;34167:5;34123:50;;;;;;6912:25:1::0;;;6968:2;6953:18;;6946:34;6900:2;6885:18;;6738:248;34123:50:0::1;;;;;;;;34189:51;34207:11;34220:10;34232:7;34189:51;;;;;;;;:::i;:::-;;;;;;;;32588:1660;;;;;;7183:20:::0;6577:1;7703:22;;7520:213;7183:20;32501:1747;;;:::o;27442:71::-;;;;;;;;;;;31014:441;31265:15;;:42;;-1:-1:-1;;;31265:42:0;;31296:10;31265:42;;;183:51:1;31070:7:0;;;;-1:-1:-1;;;;;31265:15:0;;;;:30;;156:18:1;;31265:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31241:66;-1:-1:-1;;;;;;31322:27:0;;31318:130;;31373:10;31366:17;;;31014:441;:::o;31318:130::-;31423:13;31014:441;-1:-1:-1;31014:441:0:o;31490:1001::-;7139:21;:19;:21::i;:::-;31573:33:::1;31592:10;31604:1;31573:18;:33::i;:::-;31664:2;31651:10;:15;31643:46;;;::::0;-1:-1:-1;;;31643:46:0;;14290:2:1;31643:46:0::1;::::0;::::1;14272:21:1::0;14329:2;14309:18;;;14302:30;-1:-1:-1;;;14348:18:1;;;14341:48;14406:18;;31643:46:0::1;14088:342:1::0;31643:46:0::1;31720:1;31708:9;:13;31700:48;;;::::0;-1:-1:-1;;;31700:48:0;;7193:2:1;31700:48:0::1;::::0;::::1;7175:21:1::0;7232:2;7212:18;;;7205:30;-1:-1:-1;;;7251:18:1;;;7244:52;7313:18;;31700:48:0::1;6991:346:1::0;31700:48:0::1;31761:14;31778:25;:23;:25::i;:::-;31761:42;;31814:13;31830:14;31845:10;31830:26;;;;;;;:::i;:::-;;;31814:42;;31886:1;31875:8;:12;31867:51;;;::::0;-1:-1:-1;;;31867:51:0;;14769:2:1;31867:51:0::1;::::0;::::1;14751:21:1::0;14808:2;14788:18;;;14781:30;14847:28;14827:18;;;14820:56;14893:18;;31867:51:0::1;14567:350:1::0;31867:51:0::1;31962:14;31979:20;31990:9:::0;31979:8;:20:::1;:::i;:::-;32075:15;::::0;:33:::1;::::0;-1:-1:-1;;;32075:33:0;;-1:-1:-1;;;;;201:32:1;;;32075:33:0::1;::::0;::::1;183:51:1::0;31962:37:0;;-1:-1:-1;32055:17:0::1;::::0;32075:15;;::::1;::::0;:25:::1;::::0;156:18:1;;32075:33:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32055:53;;32143:9;32127:12;:25;;32119:62;;;::::0;-1:-1:-1;;;32119:62:0;;15124:2:1;32119:62:0::1;::::0;::::1;15106:21:1::0;15163:2;15143:18;;;15136:30;15202:26;15182:18;;;15175:54;15246:18;;32119:62:0::1;14922:348:1::0;32119:62:0::1;32218:15;::::0;-1:-1:-1;;;;;32218:15:0::1;:25;32244:6:::0;32252:24:::1;32267:9:::0;32252:12;:24:::1;:::i;:::-;32218:59;::::0;-1:-1:-1;;;;;;32218:59:0::1;::::0;;;;;;-1:-1:-1;;;;;5529:32:1;;;32218:59:0::1;::::0;::::1;5511:51:1::0;5578:18;;;5571:34;5484:18;;32218:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32322:11;32336;32348:10;32336:23;;;;;;;:::i;:::-;;::::0;32370:13:::1;::::0;;:45:::1;::::0;-1:-1:-1;;;32370:45:0;;;;::::1;15477:25:1::0;;;-1:-1:-1;;;;;15538:32:1;;;15518:18;;;15511:60;15587:18;;;15580:34;;;32336:23:0;;-1:-1:-1;32370:13:0;;;::::1;::::0;:18:::1;::::0;15450::1;;32370:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32433:50:0::1;::::0;;6912:25:1;;;6968:2;6953:18;;6946:34;;;32454:6:0;;-1:-1:-1;;;;;;32433:50:0;::::1;::::0;-1:-1:-1;32433:50:0::1;::::0;6885:18:1;32433:50:0::1;;;;;;;31562:929;;;;;7183:20:::0;6577:1;7703:22;;7520:213;29309:231;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;29413:34:0;::::1;29405:62;;;;-1:-1:-1::0;;;29405:62:0::1;;;;;;;:::i;:::-;29478:13;:54:::0;;-1:-1:-1;;;;;;29478:54:0::1;-1:-1:-1::0;;;;;29478:54:0;;;::::1;::::0;;;::::1;::::0;;29309:231::o;28833:234::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;28940:34:0;::::1;28932:62;;;;-1:-1:-1::0;;;28932:62:0::1;;;;;;;:::i;:::-;29005:15;:54:::0;;-1:-1:-1;;;;;;29005:54:0::1;-1:-1:-1::0;;;;;29005:54:0;;;::::1;::::0;;;::::1;::::0;;28833:234::o;29820:223::-;2026:13;:11;:13::i;:::-;29928:2:::1;29919:6;:11;29911:42;;;::::0;-1:-1:-1;;;29911:42:0;;15827:2:1;29911:42:0::1;::::0;::::1;15809:21:1::0;15866:2;15846:18;;;15839:30;-1:-1:-1;;;15885:18:1;;;15878:48;15943:18;;29911:42:0::1;15625:342:1::0;29911:42:0::1;29986:7;29964:11;29976:6;29964:19;;;;;;;:::i;:::-;;:29:::0;30029:6;30004:14:::1;30019:6:::0;30004:22:::1;::::0;::::1;;;;;:::i;:::-;;:31:::0;-1:-1:-1;;;29820:223:0:o;3046:201::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;3135:22:0;::::1;3127:73;;;::::0;-1:-1:-1;;;3127:73:0;;16174:2:1;3127:73:0::1;::::0;::::1;16156:21:1::0;16213:2;16193:18;;;16186:30;16252:34;16232:18;;;16225:62;-1:-1:-1;;;16303:18:1;;;16296:36;16349:19;;3127:73:0::1;15972:402:1::0;3127:73:0::1;3211:28;3230:8;3211:18;:28::i;2305:132::-:0;2186:7;2213:6;-1:-1:-1;;;;;2213:6:0;765:10;2369:23;2361:68;;;;-1:-1:-1;;;2361:68:0;;16581:2:1;2361:68:0;;;16563:21:1;;;16600:18;;;16593:30;16659:34;16639:18;;;16632:62;16711:18;;2361:68:0;16379:356:1;7219:293:0;6621:1;7353:7;;:19;7345:63;;;;-1:-1:-1;;;7345:63:0;;16942:2:1;7345:63:0;;;16924:21:1;16981:2;16961:18;;;16954:30;17020:33;17000:18;;;16993:61;17071:18;;7345:63:0;16740:355:1;7345:63:0;6621:1;7486:7;:18;7219:293::o;30551:441::-;-1:-1:-1;;;;;30855:22:0;;;;;;:14;:22;;;;;;30881:11;;30837:40;;:15;:40;:::i;:::-;:55;;30829:104;;;;-1:-1:-1;;;30829:104:0;;17302:2:1;30829:104:0;;;17284:21:1;17341:2;17321:18;;;17314:30;17380:34;17360:18;;;17353:62;-1:-1:-1;;;17431:18:1;;;17424:35;17476:19;;30829:104:0;17100:401:1;30829:104:0;-1:-1:-1;;;;;;30944:22:0;;;;;:14;:22;;;;;30969:15;30944:40;;30551:441::o;3407:191::-;3481:16;3500:6;;-1:-1:-1;;;;;3517:17:0;;;-1:-1:-1;;;;;;3517:17:0;;;;;;3550:40;;3500:6;;;;;;;3550:40;;3481:16;3550:40;3470:128;3407:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;245:131:1:-;-1:-1:-1;;;;;320:31:1;;310:42;;300:70;;366:1;363;356:12;381:247;440:6;493:2;481:9;472:7;468:23;464:32;461:52;;;509:1;506;499:12;461:52;548:9;535:23;567:31;592:5;567:31;:::i;:::-;617:5;381:247;-1:-1:-1;;;381:247:1:o;633:226::-;692:6;745:2;733:9;724:7;720:23;716:32;713:52;;;761:1;758;751:12;713:52;-1:-1:-1;806:23:1;;633:226;-1:-1:-1;633:226:1:o;1281:346::-;1349:6;1357;1410:2;1398:9;1389:7;1385:23;1381:32;1378:52;;;1426:1;1423;1416:12;1378:52;-1:-1:-1;;1471:23:1;;;1591:2;1576:18;;;1563:32;;-1:-1:-1;1281:346:1:o;1632:303::-;1725:5;1748:1;1758:171;1772:4;1769:1;1766:11;1758:171;;;1831:13;;1819:26;;1874:4;1865:14;;;;1902:17;;;;1792:1;1785:9;1758:171;;;1762:3;;1632:303;;:::o;1940:383::-;2198:4;2183:20;;2212:43;2187:9;2237:6;2212:43;:::i;:::-;2264:53;2312:3;2301:9;2297:19;2289:6;2264:53;:::i;2328:466::-;2405:6;2413;2421;2474:2;2462:9;2453:7;2449:23;2445:32;2442:52;;;2490:1;2487;2480:12;2442:52;-1:-1:-1;;2535:23:1;;;2655:2;2640:18;;2627:32;;-1:-1:-1;2758:2:1;2743:18;;;2730:32;;2328:466;-1:-1:-1;2328:466:1:o;3240:339::-;3442:2;3424:21;;;3481:2;3461:18;;;3454:30;-1:-1:-1;;;3515:2:1;3500:18;;3493:45;3570:2;3555:18;;3240:339::o;4296:127::-;4357:10;4352:3;4348:20;4345:1;4338:31;4388:4;4385:1;4378:15;4412:4;4409:1;4402:15;4428:112;4460:1;4486;4476:35;;4491:18;;:::i;:::-;-1:-1:-1;4525:9:1;;4428:112::o;4947:127::-;5008:10;5003:3;4999:20;4996:1;4989:31;5039:4;5036:1;5029:15;5063:4;5060:1;5053:15;5079:120;5119:1;5145;5135:35;;5150:18;;:::i;:::-;-1:-1:-1;5184:9:1;;5079:120::o;5204:128::-;5271:9;;;5292:11;;;5289:37;;;5306:18;;:::i;:::-;5204:128;;;;:::o;5616:230::-;5686:6;5739:2;5727:9;5718:7;5714:23;5710:32;5707:52;;;5755:1;5752;5745:12;5707:52;-1:-1:-1;5800:16:1;;5616:230;-1:-1:-1;5616:230:1:o;6608:125::-;6673:9;;;6694:10;;;6691:36;;;6707:18;;:::i;8123:168::-;8196:9;;;8227;;8244:15;;;8238:22;;8224:37;8214:71;;8265:18;;:::i;8701:344::-;8768:2;8762:9;8810:3;8798:16;;8844:18;8829:34;;8865:22;;;8826:62;8823:185;;;8930:10;8925:3;8921:20;8918:1;8911:31;8965:4;8962:1;8955:15;8993:4;8990:1;8983:15;8823:185;9024:2;9017:22;8701:344;:::o;9050:800::-;9114:5;9162:4;9150:9;9145:3;9141:19;9137:30;9134:50;;;9180:1;9177;9170:12;9134:50;9233:2;9227:9;9275:4;9263:17;;9310:18;9295:34;;9331:22;;;9292:62;9289:185;;;9396:10;9391:3;9387:20;9384:1;9377:31;9431:4;9428:1;9421:15;9459:4;9456:1;9449:15;9289:185;9490:2;9483:22;;;9574:16;;9599:23;;9688:2;9673:18;;;9667:25;9708:15;;;9701:32;9784:18;;;9778:25;9819:15;;;9812:32;;;;-1:-1:-1;9523:6:1;9050:800;-1:-1:-1;9050:800:1:o;9855:246::-;9948:6;10001:2;9989:9;9980:7;9976:23;9972:32;9969:52;;;10017:1;10014;10007:12;9969:52;10040:55;10087:7;10076:9;10040:55;:::i;11340:404::-;-1:-1:-1;;;;;11603:32:1;;11585:51;;11667:2;11652:18;;11645:34;;;11572:3;11557:19;;11688:50;11734:2;11719:18;;11711:6;11204:12;;11192:25;;11266:4;11255:16;;;11249:23;11233:14;;;11226:47;11322:4;11311:16;;;11305:23;11289:14;;11282:47;11134:201;11688:50;11340:404;;;;;;:::o;11749:1141::-;11840:6;11900:3;11888:9;11879:7;11875:23;11871:33;11916:2;11913:22;;;11931:1;11928;11921:12;11913:22;-1:-1:-1;11973:17:1;;:::i;:::-;12035:16;;12060:22;;12148:2;12133:18;;;12127:25;12168:14;;;12161:31;12258:2;12243:18;;;12237:25;12278:14;;;12271:31;12368:2;12353:18;;;12347:25;12388:14;;;12381:31;12478:3;12463:19;;;12457:26;12499:15;;;12492:32;12590:3;12575:19;;;12569:26;12611:15;;;12604:32;12702:3;12687:19;;;12681:26;12723:15;;;12716:32;12814:3;12799:19;;;12793:26;12835:15;;;12828:32;;;;-1:-1:-1;12067:5:1;11749:1141;-1:-1:-1;11749:1141:1:o;12895:932::-;13173:4;13215:3;13204:9;13200:19;13192:27;;13252:6;13246:13;13235:9;13228:32;13316:4;13308:6;13304:17;13298:24;13291:4;13280:9;13276:20;13269:54;13379:4;13371:6;13367:17;13361:24;13354:4;13343:9;13339:20;13332:54;13442:4;13434:6;13430:17;13424:24;13417:4;13406:9;13402:20;13395:54;13505:4;13497:6;13493:17;13487:24;13480:4;13469:9;13465:20;13458:54;13568:4;13560:6;13556:17;13550:24;13543:4;13532:9;13528:20;13521:54;13631:4;13623:6;13619:17;13613:24;13606:4;13595:9;13591:20;13584:54;13694:4;13686:6;13682:17;13676:24;13669:4;13658:9;13654:20;13647:54;13710:51;13756:3;13745:9;13741:19;13733:6;11204:12;;11192:25;;11266:4;11255:16;;;11249:23;11233:14;;;11226:47;11322:4;11311:16;;;11305:23;11289:14;;11282:47;11134:201;13710:51;11204:12;;13816:3;13801:19;;11192:25;11266:4;11255:16;;11249:23;11233:14;;;11226:47;11322:4;11311:16;;11305:23;11289:14;;;11282:47;13770:51;11134:201;13832:251;13902:6;13955:2;13943:9;13934:7;13930:23;13926:32;13923:52;;;13971:1;13968;13961:12;13923:52;14003:9;13997:16;14022:31;14047:5;14022:31;:::i;14435:127::-;14496:10;14491:3;14487:20;14484:1;14477:31;14527:4;14524:1;14517:15;14551:4;14548:1;14541:15
Swarm Source
ipfs://f882c4b9aa6e7354a03db73d92bca0f68f261c77764b059743a056cda4fa3219
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.