Source Code
Overview
GLMR Balance
GLMR Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 24 from a total of 24 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Features Per... | 3178365 | 1050 days ago | IN | 0 GLMR | 0.0048116 | ||||
| Set Features Per... | 3178363 | 1050 days ago | IN | 0 GLMR | 0.0048116 | ||||
| Set Contract | 3178353 | 1050 days ago | IN | 0 GLMR | 0.002812 | ||||
| Set Contract | 3178351 | 1050 days ago | IN | 0 GLMR | 0.0028102 | ||||
| Set Contract | 3178349 | 1050 days ago | IN | 0 GLMR | 0.0028073 | ||||
| Set Contract | 3178347 | 1050 days ago | IN | 0 GLMR | 0.0028044 | ||||
| Set Contract | 3178345 | 1050 days ago | IN | 0 GLMR | 0.0028015 | ||||
| Set Contract | 3178343 | 1050 days ago | IN | 0 GLMR | 0.0027986 | ||||
| Set Contract | 3178341 | 1050 days ago | IN | 0 GLMR | 0.0027957 | ||||
| Set Contract | 3178339 | 1050 days ago | IN | 0 GLMR | 0.0027928 | ||||
| Set Contract | 3178337 | 1050 days ago | IN | 0 GLMR | 0.0027899 | ||||
| Set Contract | 3178335 | 1050 days ago | IN | 0 GLMR | 0.002787 | ||||
| Set Contract | 3178333 | 1050 days ago | IN | 0 GLMR | 0.0027841 | ||||
| Set Contract | 3178314 | 1050 days ago | IN | 0 GLMR | 0.004802 | ||||
| Set Contract | 3178311 | 1050 days ago | IN | 0 GLMR | 0.0048002 | ||||
| Set Contract | 3178309 | 1050 days ago | IN | 0 GLMR | 0.0047973 | ||||
| Set Contract | 3178307 | 1050 days ago | IN | 0 GLMR | 0.0047944 | ||||
| Set Contract | 3178305 | 1050 days ago | IN | 0 GLMR | 0.0047915 | ||||
| Set Contract | 3178303 | 1050 days ago | IN | 0 GLMR | 0.0047886 | ||||
| Set Contract | 3178301 | 1050 days ago | IN | 0 GLMR | 0.0047857 | ||||
| Set Contract | 3178299 | 1050 days ago | IN | 0 GLMR | 0.0047828 | ||||
| Set Contract | 3178297 | 1050 days ago | IN | 0 GLMR | 0.0047799 | ||||
| Set Contract | 3178295 | 1050 days ago | IN | 0 GLMR | 0.004777 | ||||
| Set Contract | 3178293 | 1050 days ago | IN | 0 GLMR | 0.0047741 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386480 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR | ||||
| 3386475 | 1020 days ago | 0 GLMR |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DPSGameEngine
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
import "@openzeppelin/contracts/access/Ownable.sol";
import "./interfaces/DPSStructs.sol";
import "./interfaces/DPSInterfaces.sol";
import "./../interfaces/IERC20MintableBurnable.sol";
import "hardhat/console.sol";
contract DPSGameEngine is DPSGameEngineI, Ownable {
DPSQRNGI public random;
DPSSupportShipI public supportShip;
MintableBurnableIERC1155 public artifact;
DPSCartographerI public cartographer;
DPSGameSettingsI public gameSettings;
DPSGameEngineI public gameEngine;
DPSDocksI public docks;
DPSDoubloonMinterI public doubloonsMinter;
DPSChestsIV2 public chests;
DPSCrewForCoinI public crewForCoin;
address public treasury;
address public plunderers;
/// @notice an array that keeps for each pirate contract, a contract to get the features out of
mapping(IERC721 => DPSPirateFeaturesI) public featuresPerPirate;
/// @notice mapping to keep a nonce for an user at each random action
mapping(address => uint256) public nonces;
event SetContract(uint256 _target, address _contract);
event TreasuryUpdate(uint256 _amount);
event WonLockBocks(address indexed _user, uint256 _amount);
event ChangedTreasury(address _newTreasury);
event OpenedLockBox(address indexed _owner, ARTIFACT_TYPE _type);
event FeaturesPerPirateChanged(IERC721 indexed _pirate, DPSPirateFeaturesI _feature);
event RandomNumberGeneratedRewardChest(address indexed owner, uint256 randomResult);
event RandomNumberGeneratedRewardLockedBox(address indexed owner, uint256 randomResult);
/**
* @notice computes skills for the flagship based on the level of the part of the flagship + base skills of the flagship
* @param levels levels for each part, needs to respect the order of the levels from flagship
* @param _claimingRewardsCache the cache object that contains the skill points per skill type
* @return cached object with the skill points updated
*/
function computeFlagShipSkills(
uint8[7] memory levels,
VoyageStatusCache memory _claimingRewardsCache
) private view returns (VoyageStatusCache memory) {
unchecked {
uint16[7] memory skillsPerPart = gameSettings.getSkillsPerFlagshipParts();
uint8[7] memory skillTypes = gameSettings.getSkillTypeOfEachFlagshipPart();
uint256 flagshipBaseSkills = gameSettings.flagshipBaseSkills();
_claimingRewardsCache.luck += flagshipBaseSkills;
_claimingRewardsCache.navigation += flagshipBaseSkills;
_claimingRewardsCache.strength += flagshipBaseSkills;
for (uint256 i; i < 7; ++i) {
if (skillTypes[i] == uint8(SKILL_TYPE.LUCK)) _claimingRewardsCache.luck += skillsPerPart[i] * levels[i];
if (skillTypes[i] == uint8(SKILL_TYPE.NAVIGATION))
_claimingRewardsCache.navigation += skillsPerPart[i] * levels[i];
if (skillTypes[i] == uint8(SKILL_TYPE.STRENGTH))
_claimingRewardsCache.strength += skillsPerPart[i] * levels[i];
}
return _claimingRewardsCache;
}
}
/**
* @notice computes skills for the support ships as there are multiple types that apply skills to different skill type: navigation, luck, strength
* @param _supportShips the array of support ships
* @param _artifactIds the array of artifacts
* @param _claimingRewardsCache the cache object that contains the skill points per skill type
* @return cached object with the skill points updated
*/
function computeSupportSkills(
uint8[9] memory _supportShips,
uint16[13] memory _artifactIds,
VoyageStatusCache memory _claimingRewardsCache
) private view returns (VoyageStatusCache memory) {
unchecked {
uint16 skill;
for (uint256 i = 1; i < 13; ++i) {
ARTIFACT_TYPE _type = ARTIFACT_TYPE(i);
if (_artifactIds[i] == 0) continue;
skill = gameSettings.artifactsSkillBoosts(_type);
if (
_type == ARTIFACT_TYPE.COMMON_STRENGTH ||
_type == ARTIFACT_TYPE.RARE_STRENGTH ||
_type == ARTIFACT_TYPE.EPIC_STRENGTH ||
_type == ARTIFACT_TYPE.LEGENDARY_STRENGTH
) _claimingRewardsCache.strength += skill * _artifactIds[i];
else if (
_type == ARTIFACT_TYPE.COMMON_LUCK ||
_type == ARTIFACT_TYPE.RARE_LUCK ||
_type == ARTIFACT_TYPE.EPIC_LUCK ||
_type == ARTIFACT_TYPE.LEGENDARY_LUCK
) _claimingRewardsCache.luck += skill * _artifactIds[i];
else if (
_type == ARTIFACT_TYPE.COMMON_NAVIGATION ||
_type == ARTIFACT_TYPE.RARE_NAVIGATION ||
_type == ARTIFACT_TYPE.EPIC_NAVIGATION ||
_type == ARTIFACT_TYPE.LEGENDARY_NAVIGATION
) _claimingRewardsCache.navigation += skill * _artifactIds[i];
}
for (uint256 i; i < 9; ++i) {
if (_supportShips[i] == 0) continue;
SUPPORT_SHIP_TYPE supportShipType = SUPPORT_SHIP_TYPE(i);
skill = gameSettings.supportShipsSkillBoosts(supportShipType);
if (
supportShipType == SUPPORT_SHIP_TYPE.SLOOP_STRENGTH ||
supportShipType == SUPPORT_SHIP_TYPE.CARAVEL_STRENGTH ||
supportShipType == SUPPORT_SHIP_TYPE.GALLEON_STRENGTH
) _claimingRewardsCache.strength += skill * _supportShips[i];
else if (
supportShipType == SUPPORT_SHIP_TYPE.SLOOP_LUCK ||
supportShipType == SUPPORT_SHIP_TYPE.CARAVEL_LUCK ||
supportShipType == SUPPORT_SHIP_TYPE.GALLEON_LUCK
) _claimingRewardsCache.luck += skill * _supportShips[i];
else if (
supportShipType == SUPPORT_SHIP_TYPE.SLOOP_NAVIGATION ||
supportShipType == SUPPORT_SHIP_TYPE.CARAVEL_NAVIGATION ||
supportShipType == SUPPORT_SHIP_TYPE.GALLEON_NAVIGATION
) _claimingRewardsCache.navigation += skill * _supportShips[i];
}
return _claimingRewardsCache;
}
}
/**
* @notice interprets a randomness result, meaning that based on the skill points accumulated from base pirate skills,
* flagship + support ships, we do a comparison between the result of the randomness and the skill points.
* if random > skill points than this interaction fails. Things to notice: if STORM or ENEMY fails then we
* destroy a support ship (if exists) or do health damage of 100% which will result in skipping all the upcoming
* interactions
* @param _result - random number generated
* @param _voyageResult - the result object that is cached and sent along for later on saving into storage
* @param _lockedVoyage - locked voyage that contains the support ship objects that will get modified (sent as storage) if interaction failed
* @param _claimingRewardsCache - cache object sent along for points updates
* @param _interaction - interaction that we compute the outcome for
* @param _index - current index of interaction, used to update the outcome
* @return updated voyage results and claimingRewardsCache (this updates in case of a support ship getting destroyed)
*/
function interpretResults(
uint256 _result,
VoyageResult memory _voyageResult,
LockedVoyageV2 memory _lockedVoyage,
VoyageStatusCache memory _claimingRewardsCache,
INTERACTION _interaction,
uint256 _randomNumber,
uint256 _index
) private view returns (VoyageResult memory, VoyageStatusCache memory) {
if (_interaction == INTERACTION.CHEST && _result <= _claimingRewardsCache.luck) {
_voyageResult.awardedChests++;
_voyageResult.interactionResults[_index] = 1;
} else if (
(_interaction == INTERACTION.STORM && _result > _claimingRewardsCache.navigation) ||
(_interaction == INTERACTION.ENEMY && _result > _claimingRewardsCache.strength)
) {
if (_lockedVoyage.totalSupportShips - _voyageResult.totalSupportShipsDestroyed > 0) {
_voyageResult.totalSupportShipsDestroyed++;
uint256 supportShipTypesLength;
for (uint256 i; i < 9; ++i) {
if (
_lockedVoyage.supportShips[i] > _voyageResult.destroyedSupportShips[i] &&
_lockedVoyage.supportShips[i] - _voyageResult.destroyedSupportShips[i] > 0
) supportShipTypesLength++;
}
uint256[] memory supportShipTypes = new uint256[](supportShipTypesLength);
uint256 j;
for (uint256 i; i < 9; ++i) {
if (
_lockedVoyage.supportShips[i] > _voyageResult.destroyedSupportShips[i] &&
_lockedVoyage.supportShips[i] - _voyageResult.destroyedSupportShips[i] > 0
) {
supportShipTypes[j] = i;
j++;
}
}
uint256 chosenType = random.getRandomNumber(
_randomNumber,
_lockedVoyage.lockedBlock,
string(abi.encode("SUPPORT_SHIP_", _index)),
uint8(1),
supportShipTypesLength
) % (supportShipTypesLength);
SUPPORT_SHIP_TYPE supportShipType = SUPPORT_SHIP_TYPE.SLOOP_STRENGTH;
for (uint256 i; i < supportShipTypesLength; ++i) {
if (chosenType == i) {
supportShipType = SUPPORT_SHIP_TYPE(supportShipTypes[i]);
}
}
_voyageResult.destroyedSupportShips[uint8(supportShipType)]++;
_voyageResult.intDestroyedSupportShips[_index] = uint8(supportShipType);
uint16 points = gameSettings.supportShipsSkillBoosts(supportShipType);
if (
supportShipType == SUPPORT_SHIP_TYPE.SLOOP_STRENGTH ||
supportShipType == SUPPORT_SHIP_TYPE.CARAVEL_STRENGTH ||
supportShipType == SUPPORT_SHIP_TYPE.GALLEON_STRENGTH
) _claimingRewardsCache.strength -= points;
else if (
supportShipType == SUPPORT_SHIP_TYPE.SLOOP_LUCK ||
supportShipType == SUPPORT_SHIP_TYPE.CARAVEL_LUCK ||
supportShipType == SUPPORT_SHIP_TYPE.GALLEON_LUCK
) _claimingRewardsCache.luck -= points;
else if (
supportShipType == SUPPORT_SHIP_TYPE.SLOOP_NAVIGATION ||
supportShipType == SUPPORT_SHIP_TYPE.CARAVEL_NAVIGATION ||
supportShipType == SUPPORT_SHIP_TYPE.GALLEON_NAVIGATION
) _claimingRewardsCache.navigation -= points;
} else {
_voyageResult.healthDamage = 100;
}
} else if (_interaction != INTERACTION.CHEST) {
_voyageResult.interactionResults[_index] = 1;
}
return (_voyageResult, _claimingRewardsCache);
}
function debuffVoyage(
uint16 _voyageType,
VoyageStatusCache memory _claimingRewardsCache
) private view returns (VoyageStatusCache memory) {
uint16 debuffs = gameSettings.voyageDebuffs(uint256(_voyageType));
if (_claimingRewardsCache.strength > debuffs) _claimingRewardsCache.strength -= debuffs;
else _claimingRewardsCache.strength = 0;
if (_claimingRewardsCache.luck > debuffs) _claimingRewardsCache.luck -= debuffs;
else _claimingRewardsCache.luck = 0;
if (_claimingRewardsCache.navigation > debuffs) _claimingRewardsCache.navigation -= debuffs;
else _claimingRewardsCache.navigation = 0;
return _claimingRewardsCache;
}
function sanityCheckLockVoyages(
LockedVoyageV2 memory _existingVoyage,
LockedVoyageV2 memory _finishedVoyage,
LockedVoyageV2 memory _lockedVoyage,
VoyageConfigV2 memory _voyageConfig,
uint256 _totalSupportShips,
DPSFlagshipI _flagship
) external view override {
// if flagship is unhealthy
if (_flagship.getPartsLevel(_lockedVoyage.flagshipId)[uint256(FLAGSHIP_PART.HEALTH)] != 100) revert Unhealthy();
// if it is already started
if (_existingVoyage.voyageId != 0) revert WrongState(1);
// if it is already finished
if (_finishedVoyage.voyageId != 0) revert WrongState(2);
uint256 totalArtifacts;
for (uint256 i; i < 13; ++i) {
if (_lockedVoyage.artifactIds[i] > 0) totalArtifacts += _lockedVoyage.artifactIds[i];
}
if (totalArtifacts > gameSettings.maxArtifactsPerVoyage(_voyageConfig.typeOfVoyage)) revert WrongParams(1);
// too many support ships
if (
_totalSupportShips > gameSettings.maxSupportShipsPerVoyageType(_voyageConfig.typeOfVoyage) ||
_totalSupportShips != _lockedVoyage.totalSupportShips
) revert WrongState(3);
}
/**
* @notice computing voyage state based on the locked voyage skills and config and causality params
* @param _lockedVoyage - locked voyage items
* @param _sequence - sequence of interactions
* @param _randomNumber - the random number generated for this voyage
* @return VoyageResult - containing the results of a voyage based on interactions
*/
function computeVoyageState(
LockedVoyageV2 memory _lockedVoyage,
uint8[] memory _sequence,
uint256 _randomNumber
) external view override returns (VoyageResult memory) {
uint16[3] memory features;
DPSPirateFeaturesI dpsFeatures = featuresPerPirate[_lockedVoyage.pirate];
if (address(dpsFeatures) != address(0)) {
(, features) = dpsFeatures.getTraitsAndSkills(uint16(_lockedVoyage.dpsId));
} else {
features[0] = 150;
features[1] = 150;
features[2] = 150;
}
VoyageStatusCache memory claimingRewardsCache;
// traits not set
if (features[0] == 0) revert WrongState(6);
unchecked {
claimingRewardsCache.luck += features[0];
claimingRewardsCache.navigation += features[1];
claimingRewardsCache.strength += features[2];
claimingRewardsCache = computeFlagShipSkills(
_lockedVoyage.flagship.getPartsLevel(_lockedVoyage.flagshipId),
claimingRewardsCache
);
claimingRewardsCache = computeSupportSkills(
_lockedVoyage.supportShips,
_lockedVoyage.artifactIds,
claimingRewardsCache
);
VoyageResult memory voyageResult;
uint256 maxRollCap = gameSettings.maxRollCap();
voyageResult.interactionResults = new uint8[](_sequence.length);
voyageResult.interactionRNGs = new uint16[](_sequence.length);
voyageResult.intDestroyedSupportShips = new uint8[](_sequence.length);
claimingRewardsCache = debuffVoyage(_lockedVoyage.voyageType, claimingRewardsCache);
claimingRewardsCache = applyMaxSkillCap(claimingRewardsCache);
for (uint256 i; i < _sequence.length; ++i) {
INTERACTION interaction = INTERACTION(_sequence[i]);
if (interaction == INTERACTION.NONE || voyageResult.healthDamage == 100) {
voyageResult.skippedInteractions++;
continue;
}
claimingRewardsCache.entropy = string(abi.encode("INTERACTION_RESULT_", i, "_", _lockedVoyage.voyageId));
uint256 result = random.getRandomNumber(
_randomNumber,
_lockedVoyage.lockedBlock,
claimingRewardsCache.entropy,
0,
maxRollCap
);
(voyageResult, claimingRewardsCache) = interpretResults(
result,
voyageResult,
_lockedVoyage,
claimingRewardsCache,
interaction,
_randomNumber,
i
);
voyageResult.interactionRNGs[i] = uint16(result);
}
return voyageResult;
}
}
function rewardChest(uint256 _randomNumber, uint256 _amount, uint256 voyageType, address _owner) external override {
if (msg.sender != plunderers && msg.sender != owner()) revert Unauthorized();
uint256 maxRoll = gameSettings.maxRollPerChest(voyageType);
uint256 rewardedLockBox = 0;
uint256 doubloonsRewards;
for (uint256 i; i < _amount; ++i) {
uint256 result = random.getRandomNumber(
_randomNumber,
nonces[_owner]++,
string(abi.encode("REWARDS_TYPE_", i)),
0,
10000
);
emit RandomNumberGeneratedRewardChest(_owner, result);
if (result <= maxRoll) rewardedLockBox++;
}
doubloonsRewards = gameSettings.chestDoubloonRewards(voyageType) * _amount;
if (doubloonsRewards > 0) {
doubloonsMinter.mintDoubloons(_owner, doubloonsRewards);
uint256 doubloonsRewardForTreasury = (doubloonsRewards * 5) / 100;
// 5% goes is minted to the treasury
doubloonsMinter.mintDoubloons(treasury, doubloonsRewardForTreasury);
emit TreasuryUpdate(doubloonsRewardForTreasury);
}
if (rewardedLockBox > 0) {
// minting lock boxes
chests.mint(_owner, 4, rewardedLockBox);
emit WonLockBocks(_owner, rewardedLockBox);
}
}
function rewardLockedBox(uint256 _randomNumber, uint256 _amount, address _owner) external override {
if (msg.sender != plunderers && msg.sender != owner()) revert Unauthorized();
ARTIFACT_TYPE[] memory artifacts = new ARTIFACT_TYPE[](_amount);
for (uint i; i < _amount; ++i) {
uint256 result = random.getRandomNumber(
_randomNumber,
nonces[_owner]++,
string(abi.encode("LOCK_BOX_", i)),
0,
gameSettings.maxRollCapLockBoxes()
);
emit RandomNumberGeneratedRewardLockedBox(_owner, result);
artifacts[i] = interpretLockedBoxResult(result);
}
for (uint i; i < _amount; ++i) {
ARTIFACT_TYPE rewardType = artifacts[i];
if (rewardType == ARTIFACT_TYPE.NONE) continue;
artifact.mint(_owner, uint256(rewardType), 1);
emit OpenedLockBox(_owner, rewardType);
}
}
/**
* @notice in case the pirate or flagship was borrowed, the owners can claim so they can claim their assets back once they expired
* or if none are borrowed, then the owner must be the msg.sender
* @param _claimer who claims the voyage
* @param _lockedVoyage the voyage we want to claim
* @param _ownerOfVoyage the owner of the voyage stored in the docks
*/
function checkIfViableClaimer(
address _claimer,
LockedVoyageV2 memory _lockedVoyage,
address _ownerOfVoyage
) external view returns (bool) {
DPSCrewForCoinI.Asset memory assetDPS = crewForCoin.isDPSInMarket(_lockedVoyage.dpsId);
DPSCrewForCoinI.Asset memory assetFlagship = crewForCoin.isFlagshipInMarket(_lockedVoyage.flagshipId);
if (assetDPS.borrower != address(0) || assetFlagship.borrower != address(0)) {
return
(assetDPS.endTime <= block.timestamp && assetDPS.lender == _claimer) ||
assetDPS.borrower == _claimer ||
(assetFlagship.endTime <= block.timestamp && assetFlagship.lender == _claimer) ||
assetFlagship.borrower == _claimer;
} else return _claimer == _ownerOfVoyage;
}
/**
* @notice determines what type of artifact to give as reward
* @param _result of randomness
*/
function interpretLockedBoxResult(uint256 _result) internal view returns (ARTIFACT_TYPE) {
unchecked {
for (uint256 i = 1; i <= 12; ++i) {
uint16[2] memory limits = gameSettings.getLockBoxesDistribution(ARTIFACT_TYPE(i));
if (_result >= limits[0] && _result <= limits[1]) return ARTIFACT_TYPE(i);
}
return ARTIFACT_TYPE.NONE;
}
}
function getLockedVoyageByOwnerAndId(
address _owner,
uint256 _voyageId,
DPSVoyageIV2 _voyage
) external view returns (LockedVoyageV2 memory locked) {
LockedVoyageV2[] memory cachedVoyages = docks.getLockedVoyagesForOwner(_owner, 0, _voyage.maxMintedId());
for (uint256 i; i < cachedVoyages.length; ++i) {
if (cachedVoyages[i].voyageId == _voyageId) return cachedVoyages[i];
}
}
function getFinishedVoyageByOwnerAndId(
address _owner,
uint256 _voyageId,
DPSVoyageIV2 _voyage
) external view returns (LockedVoyageV2 memory locked) {
LockedVoyageV2[] memory cachedVoyages = docks.getFinishedVoyagesForOwner(_owner, 0, _voyage.maxMintedId());
for (uint256 i; i < cachedVoyages.length; ++i) {
if (cachedVoyages[i].voyageId == _voyageId) return cachedVoyages[i];
}
}
function applyMaxSkillCap(
VoyageStatusCache memory _claimingRewardsCache
) internal view returns (VoyageStatusCache memory modifiedCached) {
uint256 maxSkillsCap = gameSettings.maxSkillsCap();
if (_claimingRewardsCache.navigation > maxSkillsCap) _claimingRewardsCache.navigation = maxSkillsCap;
if (_claimingRewardsCache.luck > maxSkillsCap) _claimingRewardsCache.luck = maxSkillsCap;
if (_claimingRewardsCache.strength > maxSkillsCap) _claimingRewardsCache.strength = maxSkillsCap;
modifiedCached = _claimingRewardsCache;
}
/**
* SETTERS & GETTERS
*/
function setContract(address _contract, uint8 _target) external onlyOwner {
if (_target == 1) random = DPSQRNGI(_contract);
else if (_target == 2) supportShip = DPSSupportShipI(_contract);
else if (_target == 3) artifact = MintableBurnableIERC1155(_contract);
else if (_target == 4) gameSettings = DPSGameSettingsI(_contract);
else if (_target == 5) cartographer = DPSCartographerI(_contract);
else if (_target == 6) chests = DPSChestsIV2(_contract);
else if (_target == 7) docks = DPSDocksI(_contract);
else if (_target == 8) doubloonsMinter = DPSDoubloonMinterI(_contract);
else if (_target == 9) treasury = _contract;
else if (_target == 10) plunderers = _contract;
else if (_target == 11) crewForCoin = DPSCrewForCoinI(_contract);
emit SetContract(_target, _contract);
}
function setFeaturesPerPirate(IERC721 _pirate, DPSPirateFeaturesI _feature) external onlyOwner {
featuresPerPirate[_pirate] = _feature;
emit FeaturesPerPirateChanged(_pirate, _feature);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC20Mintable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
/**
* @dev Interface of the ERC20 expanded to include mint and burn functionality
* @dev
*/
interface IERC20MintableBurnable is IERC20Mintable, IERC20 {
/**
* @dev burns `amount` from `receiver`
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits an {BURN} event.
*/
function burn(address _from, uint256 _amount) external;
}//SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
import "./DPSStructs.sol";
interface DPSVoyageI is IERC721Enumerable {
function mint(address _owner, uint256 _tokenId, VoyageConfig calldata config) external;
function burn(uint256 _tokenId) external;
function getVoyageConfig(uint256 _voyageId) external view returns (VoyageConfig memory config);
function tokensOfOwner(address _owner) external view returns (uint256[] memory);
function exists(uint256 _tokenId) external view returns (bool);
function maxMintedId() external view returns (uint256);
function maxMintedId(uint16 _voyageType) external view returns (uint256);
}
interface DPSVoyageIV2 is IERC721Enumerable {
function mint(address _owner, uint256 _tokenId, VoyageConfigV2 calldata config) external;
function burn(uint256 _tokenId) external;
function getVoyageConfig(uint256 _voyageId) external view returns (VoyageConfigV2 memory config);
function tokensOfOwner(address _owner) external view returns (uint256[] memory);
function exists(uint256 _tokenId) external view returns (bool);
function maxMintedId() external view returns (uint256);
function maxMintedId(uint16 _voyageType) external view returns (uint256);
}
interface DPSRandomI {
function getRandomBatch(
address _address,
uint256[] memory _blockNumber,
bytes32[] memory _hash1,
bytes32[] memory _hash2,
uint256[] memory _timestamp,
bytes[] calldata _signature,
string[] calldata _entropy,
uint256 _min,
uint256 _max
) external view returns (uint256[] memory randoms);
function getRandomUnverifiedBatch(
address _address,
uint256[] memory _blockNumber,
bytes32[] memory _hash1,
bytes32[] memory _hash2,
uint256[] memory _timestamp,
string[] calldata _entropy,
uint256 _min,
uint256 _max
) external pure returns (uint256[] memory randoms);
function getRandom(
address _address,
uint256 _blockNumber,
bytes32 _hash1,
bytes32 _hash2,
uint256 _timestamp,
bytes calldata _signature,
string calldata _entropy,
uint256 _min,
uint256 _max
) external view returns (uint256 randoms);
function getRandomUnverified(
address _address,
uint256 _blockNumber,
bytes32 _hash1,
bytes32 _hash2,
uint256 _timestamp,
string calldata _entropy,
uint256 _min,
uint256 _max
) external pure returns (uint256 randoms);
function checkCausalityParams(
CausalityParams calldata _causalityParams,
VoyageConfigV2 calldata _voyageConfig,
LockedVoyageV2 calldata _lockedVoyage
) external pure;
}
interface DPSGameSettingsI {
function voyageConfigPerType(uint256 _type) external view returns (CartographerConfig memory);
function maxSkillsCap() external view returns (uint16);
function maxRollCap() external view returns (uint16);
function flagshipBaseSkills() external view returns (uint16);
function maxOpenLockBoxes() external view returns (uint256);
function getSkillsPerFlagshipParts() external view returns (uint16[7] memory skills);
function getSkillTypeOfEachFlagshipPart() external view returns (uint8[7] memory skillTypes);
function tmapPerVoyage(uint256 _type) external view returns (uint256);
function gapBetweenVoyagesCreation() external view returns (uint256);
function isPaused(uint8 _component) external returns (uint8);
function isPausedNonReentrant(uint8 _component) external view;
function tmapPerDoubloon() external view returns (uint256);
function repairFlagshipCost() external view returns (uint256);
function doubloonPerFlagshipUpgradePerLevel(uint256 _level) external view returns (uint256);
function voyageDebuffs(uint256 _type) external view returns (uint16);
function maxArtifactsPerVoyage(uint16 _type) external view returns (uint256);
function chestDoubloonRewards(uint256 _type) external view returns (uint256);
function doubloonsPerSupportShipType(SUPPORT_SHIP_TYPE _type) external view returns (uint256);
function supportShipsSkillBoosts(SUPPORT_SHIP_TYPE _type) external view returns (uint16);
function maxSupportShipsPerVoyageType(uint256 _type) external view returns (uint8);
function maxRollPerChest(uint256 _type) external view returns (uint256);
function maxRollCapLockBoxes() external view returns (uint16);
function lockBoxesDistribution(ARTIFACT_TYPE _type) external view returns (uint16[2] memory);
function getLockBoxesDistribution(ARTIFACT_TYPE _type) external view returns (uint16[2] memory);
function artifactsSkillBoosts(ARTIFACT_TYPE _type) external view returns (uint16);
}
interface DPSGameEngineI {
function sanityCheckLockVoyages(
LockedVoyageV2 memory existingVoyage,
LockedVoyageV2 memory finishedVoyage,
LockedVoyageV2 memory lockedVoyage,
VoyageConfigV2 memory voyageConfig,
uint256 totalSupportShips,
DPSFlagshipI _flagship
) external view;
function computeVoyageState(
LockedVoyageV2 memory _lockedVoyage,
uint8[] memory _sequence,
uint256 _randomNumber
) external view returns (VoyageResult memory);
function rewardChest(
uint256 _randomNumber,
uint256 _amount,
uint256 _voyageType,
address _owner
) external;
function rewardLockedBox(
uint256 _randomNumber,
uint256 _amount,
address _owner
) external;
function checkIfViableClaimer(
address _claimer,
LockedVoyageV2 memory _lockedVoyage,
address _ownerOfVoyage
) external view returns (bool);
}
interface DPSPirateFeaturesI {
function getTraitsAndSkills(uint16 _dpsId) external view returns (string[8] memory, uint16[3] memory);
}
interface DPSSupportShipI is IERC1155 {
function burn(address _from, uint256 _type, uint256 _amount) external;
function mint(address _owner, uint256 _type, uint256 _amount) external;
}
interface DPSFlagshipI is IERC721 {
function mint(address _owner, uint256 _id) external;
function burn(uint256 _id) external;
function upgradePart(FLAGSHIP_PART _trait, uint256 _tokenId, uint8 _level) external;
function getPartsLevel(uint256 _flagshipId) external view returns (uint8[7] memory);
function tokensOfOwner(address _owner) external view returns (uint256[] memory);
function exists(uint256 _tokenId) external view returns (bool);
}
interface DPSCartographerI {
function viewVoyageConfiguration(
uint256 _voyageId,
DPSVoyageIV2 _voyage
) external view returns (VoyageConfigV2 memory voyageConfig);
function buyers(uint256 _voyageId) external view returns (address);
}
interface DPSChestsI is IERC1155 {
function mint(address _to, uint16 _voyageType, uint256 _amount) external;
function burn(address _from, uint16 _voyageType, uint256 _amount) external;
}
interface DPSChestsIV2 is IERC1155 {
function mint(address _to, uint256 _type, uint256 _amount) external;
function burn(address _from, uint256 _type, uint256 _amount) external;
}
interface MintableBurnableIERC1155 is IERC1155 {
function mint(address _to, uint256 _type, uint256 _amount) external;
function burn(address _from, uint256 _type, uint256 _amount) external;
}
interface DPSDocksI {
function getFinishedVoyagesForOwner(
address _owner,
uint256 _start,
uint256 _stop
) external view returns (LockedVoyageV2[] memory finished);
function getLockedVoyagesForOwner(
address _owner,
uint256 _start,
uint256 _stop
) external view returns (LockedVoyageV2[] memory locked);
}
interface DPSQRNGI {
function makeRequestUint256(bytes calldata _uniqueId) external;
function makeRequestUint256Array(uint256 _size, bytes32 _uniqueId) external;
function getRandomResult(bytes calldata _uniqueId) external view returns (uint256);
function getRandomResultArray(bytes32 _uniqueId) external view returns (uint256[] memory);
function getRandomNumber(
uint256 _randomNumber,
uint256 _blockNumber,
string calldata _entropy,
uint256 _min,
uint256 _max
) external pure returns (uint256);
}
interface DPSCrewForCoinI {
struct Asset {
uint32 targetId;
bool borrowed;
address borrower;
uint32 epochs;
address lender;
uint64 startTime;
uint64 endTime;
uint256 doubloonsPerEpoch;
}
function isDPSInMarket(uint256 _tokenId) external view returns (Asset memory);
function isFlagshipInMarket(uint256 _tokenId) external view returns (Asset memory);
}
interface DPSDoubloonMinterI {
function mintDoubloons(address _to, uint256 _amount) external;
function burnDoubloons(address _from, uint256 _amount) external;
}//SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "./DPSInterfaces.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
enum VOYAGE_TYPE {
EASY,
MEDIUM,
HARD,
LEGENDARY,
CUSTOM
}
enum SUPPORT_SHIP_TYPE {
SLOOP_STRENGTH,
SLOOP_LUCK,
SLOOP_NAVIGATION,
CARAVEL_STRENGTH,
CARAVEL_LUCK,
CARAVEL_NAVIGATION,
GALLEON_STRENGTH,
GALLEON_LUCK,
GALLEON_NAVIGATION
}
enum ARTIFACT_TYPE {
NONE,
COMMON_STRENGTH,
COMMON_LUCK,
COMMON_NAVIGATION,
RARE_STRENGTH,
RARE_LUCK,
RARE_NAVIGATION,
EPIC_STRENGTH,
EPIC_LUCK,
EPIC_NAVIGATION,
LEGENDARY_STRENGTH,
LEGENDARY_LUCK,
LEGENDARY_NAVIGATION
}
enum INTERACTION {
NONE,
CHEST,
STORM,
ENEMY
}
enum FLAGSHIP_PART {
HEALTH,
CANNON,
HULL,
SAILS,
HELM,
FLAG,
FIGUREHEAD
}
enum SKILL_TYPE {
LUCK,
STRENGTH,
NAVIGATION
}
struct VoyageConfig {
VOYAGE_TYPE typeOfVoyage;
uint8 noOfInteractions;
uint16 noOfBlockJumps;
// 1 - Chest 2 - Storm 3 - Enemy
uint8[] sequence;
uint256 boughtAt;
uint256 gapBetweenInteractions;
}
struct VoyageConfigV2 {
uint16 typeOfVoyage;
uint8 noOfInteractions;
// 1 - Chest 2 - Storm 3 - Enemy
uint8[] sequence;
uint256 boughtAt;
uint256 gapBetweenInteractions;
bytes uniqueId;
}
struct CartographerConfig {
uint8 minNoOfChests;
uint8 maxNoOfChests;
uint8 minNoOfStorms;
uint8 maxNoOfStorms;
uint8 minNoOfEnemies;
uint8 maxNoOfEnemies;
uint8 totalInteractions;
uint256 gapBetweenInteractions;
}
struct RandomInteractions {
uint256 randomNoOfChests;
uint256 randomNoOfStorms;
uint256 randomNoOfEnemies;
uint8 generatedChests;
uint8 generatedStorms;
uint8 generatedEnemies;
uint256[] positionsForGeneratingInteractions;
uint256 randomPosition;
}
struct CausalityParams {
uint256[] blockNumber;
bytes32[] hash1;
bytes32[] hash2;
uint256[] timestamp;
bytes[] signature;
}
struct LockedVoyage {
uint8 totalSupportShips;
VOYAGE_TYPE voyageType;
ARTIFACT_TYPE artifactId;
uint8[9] supportShips; //this should be an array for each type, expressing the quantities he took on a trip
uint8[] sequence;
uint16 navigation;
uint16 luck;
uint16 strength;
uint256 voyageId;
uint256 dpsId;
uint256 flagshipId;
uint256 lockedBlock;
uint256 lockedTimestamp;
uint256 claimedTime;
}
struct LockedVoyageV2 {
uint8 totalSupportShips;
uint16 voyageType;
uint16[13] artifactIds;
uint8[9] supportShips; //this should be an array for each type, expressing the quantities he took on a trip
uint8[] sequence;
uint16 navigation;
uint16 luck;
uint16 strength;
uint256 voyageId;
uint256 dpsId;
uint256 flagshipId;
uint256 lockedBlock;
uint256 lockedTimestamp;
uint256 claimedTime;
bytes uniqueId;
DPSVoyageIV2 voyage;
IERC721Metadata pirate;
DPSFlagshipI flagship;
}
struct VoyageResult {
uint16 awardedChests;
uint8[9] destroyedSupportShips;
uint8 totalSupportShipsDestroyed;
uint8 healthDamage;
uint16 skippedInteractions;
uint16[] interactionRNGs;
uint8[] interactionResults;
uint8[] intDestroyedSupportShips;
}
struct VoyageStatusCache {
uint256 strength;
uint256 luck;
uint256 navigation;
string entropy;
}
error AddressZero();
error Paused();
error WrongParams(uint256 _location);
error WrongState(uint256 _state);
error Unauthorized();
error NotEnoughTokens();
error Unhealthy();
error ExternalCallFailed();
error NotFulfilled();
error NotViableClaimer();// 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(int256 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
}
function logUint(uint256 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", 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(uint256 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", 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(uint256 p0, uint256 p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1));
}
function log(uint256 p0, string memory p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1));
}
function log(uint256 p0, bool p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1));
}
function log(uint256 p0, address p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1));
}
function log(string memory p0, uint256 p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256)", 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, uint256 p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", 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, uint256 p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256)", 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(uint256 p0, uint256 p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2));
}
function log(uint256 p0, bool p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2));
}
function log(uint256 p0, bool p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2));
}
function log(uint256 p0, bool p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2));
}
function log(uint256 p0, bool p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2));
}
function log(uint256 p0, address p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2));
}
function log(uint256 p0, address p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2));
}
function log(uint256 p0, address p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2));
}
function log(uint256 p0, address p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2));
}
function log(string memory p0, string memory p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", 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, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", 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, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", 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, uint256 p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2));
}
function log(bool p0, uint256 p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2));
}
function log(bool p0, uint256 p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2));
}
function log(bool p0, uint256 p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2));
}
function log(bool p0, string memory p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", 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, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", 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, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", 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, uint256 p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2));
}
function log(address p0, uint256 p1, string memory p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2));
}
function log(address p0, uint256 p1, bool p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2));
}
function log(address p0, uint256 p1, address p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2));
}
function log(address p0, string memory p1, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", 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, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", 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, uint256 p2) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", 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(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", 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, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", 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, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", 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, uint256 p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", 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, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", 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, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", 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, uint256 p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", 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, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", 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, uint256 p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, string memory p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, bool p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, address p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", 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, uint256 p3) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", 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));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 expanded to include mint functionality
* @dev
*/
interface IERC20Mintable {
/**
* @dev mints `amount` to `receiver`
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits an {Minted} event.
*/
function mint(address receiver, uint256 amount) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
import "../IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @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 (last updated v4.7.0) (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 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.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// 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;
}
}{
"metadata": {
"bytecodeHash": "none",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"Unhealthy","type":"error"},{"inputs":[{"internalType":"uint256","name":"_location","type":"uint256"}],"name":"WrongParams","type":"error"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"WrongState","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newTreasury","type":"address"}],"name":"ChangedTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC721","name":"_pirate","type":"address"},{"indexed":false,"internalType":"contract DPSPirateFeaturesI","name":"_feature","type":"address"}],"name":"FeaturesPerPirateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"enum ARTIFACT_TYPE","name":"_type","type":"uint8"}],"name":"OpenedLockBox","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":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"randomResult","type":"uint256"}],"name":"RandomNumberGeneratedRewardChest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"randomResult","type":"uint256"}],"name":"RandomNumberGeneratedRewardLockedBox","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_target","type":"uint256"},{"indexed":false,"internalType":"address","name":"_contract","type":"address"}],"name":"SetContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TreasuryUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"WonLockBocks","type":"event"},{"inputs":[],"name":"artifact","outputs":[{"internalType":"contract MintableBurnableIERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cartographer","outputs":[{"internalType":"contract DPSCartographerI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_claimer","type":"address"},{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2","name":"_lockedVoyage","type":"tuple"},{"internalType":"address","name":"_ownerOfVoyage","type":"address"}],"name":"checkIfViableClaimer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chests","outputs":[{"internalType":"contract DPSChestsIV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2","name":"_lockedVoyage","type":"tuple"},{"internalType":"uint8[]","name":"_sequence","type":"uint8[]"},{"internalType":"uint256","name":"_randomNumber","type":"uint256"}],"name":"computeVoyageState","outputs":[{"components":[{"internalType":"uint16","name":"awardedChests","type":"uint16"},{"internalType":"uint8[9]","name":"destroyedSupportShips","type":"uint8[9]"},{"internalType":"uint8","name":"totalSupportShipsDestroyed","type":"uint8"},{"internalType":"uint8","name":"healthDamage","type":"uint8"},{"internalType":"uint16","name":"skippedInteractions","type":"uint16"},{"internalType":"uint16[]","name":"interactionRNGs","type":"uint16[]"},{"internalType":"uint8[]","name":"interactionResults","type":"uint8[]"},{"internalType":"uint8[]","name":"intDestroyedSupportShips","type":"uint8[]"}],"internalType":"struct VoyageResult","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crewForCoin","outputs":[{"internalType":"contract DPSCrewForCoinI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"docks","outputs":[{"internalType":"contract DPSDocksI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doubloonsMinter","outputs":[{"internalType":"contract DPSDoubloonMinterI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"name":"featuresPerPirate","outputs":[{"internalType":"contract DPSPirateFeaturesI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameEngine","outputs":[{"internalType":"contract DPSGameEngineI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameSettings","outputs":[{"internalType":"contract DPSGameSettingsI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_voyageId","type":"uint256"},{"internalType":"contract DPSVoyageIV2","name":"_voyage","type":"address"}],"name":"getFinishedVoyageByOwnerAndId","outputs":[{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2","name":"locked","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_voyageId","type":"uint256"},{"internalType":"contract DPSVoyageIV2","name":"_voyage","type":"address"}],"name":"getLockedVoyageByOwnerAndId","outputs":[{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2","name":"locked","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"plunderers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"random","outputs":[{"internalType":"contract DPSQRNGI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_randomNumber","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"voyageType","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"name":"rewardChest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_randomNumber","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"name":"rewardLockedBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2","name":"_existingVoyage","type":"tuple"},{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2","name":"_finishedVoyage","type":"tuple"},{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2","name":"_lockedVoyage","type":"tuple"},{"components":[{"internalType":"uint16","name":"typeOfVoyage","type":"uint16"},{"internalType":"uint8","name":"noOfInteractions","type":"uint8"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint256","name":"boughtAt","type":"uint256"},{"internalType":"uint256","name":"gapBetweenInteractions","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"}],"internalType":"struct VoyageConfigV2","name":"_voyageConfig","type":"tuple"},{"internalType":"uint256","name":"_totalSupportShips","type":"uint256"},{"internalType":"contract DPSFlagshipI","name":"_flagship","type":"address"}],"name":"sanityCheckLockVoyages","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint8","name":"_target","type":"uint8"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"_pirate","type":"address"},{"internalType":"contract DPSPirateFeaturesI","name":"_feature","type":"address"}],"name":"setFeaturesPerPirate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supportShip","outputs":[{"internalType":"contract DPSSupportShipI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506200001d3362000023565b62000073565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61440280620000836000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80637ecebe00116100de578063bc89416911610097578063e533627611610071578063e5336276146103a6578063f0514d49146103b9578063f2fde38b146103cc578063f4fe46a2146103df57600080fd5b8063bc89416914610350578063c5e815c714610370578063c8ff2c921461039357600080fd5b80637ecebe00146102c55780638da5cb5b146102f35780639f33d88114610304578063a225632614610317578063b0aa111b1461032a578063b7297cf31461033d57600080fd5b80634cb5bca81161014b57806362c2fd6b1161012557806362c2fd6b14610284578063647aba3014610297578063715018a6146102aa578063797f87ba146102b257600080fd5b80634cb5bca8146102495780635ec01e4d1461025e57806361d027b31461027157600080fd5b80630745742a1461019357806308b59f57146101bc5780632baf4596146101e757806331891228146101fa5780633c2f22bc146102235780634054eaa414610236575b600080fd5b6101a66101a1366004612fb9565b6103f2565b6040516101b391906130dc565b60405180910390f35b600c546101cf906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b600a546101cf906001600160a01b031681565b6101cf610208366004613234565b600d602052600090815260409020546001600160a01b031681565b6002546101cf906001600160a01b031681565b6007546101cf906001600160a01b031681565b61025c61025736600461376d565b610558565b005b6001546101cf906001600160a01b031681565b600b546101cf906001600160a01b031681565b6003546101cf906001600160a01b031681565b6004546101cf906001600160a01b031681565b61025c6107f7565b6009546101cf906001600160a01b031681565b6102e56102d3366004613234565b600e6020526000908152604090205481565b6040519081526020016101b3565b6000546001600160a01b03166101cf565b61025c610312366004613832565b61080b565b61025c61032536600461386b565b610a30565b6101a6610338366004612fb9565b610dd5565b6005546101cf906001600160a01b031681565b61036361035e366004613899565b610f20565b6040516101b39190613939565b61038361037e3660046139f2565b611456565b60405190151581526020016101b3565b6008546101cf906001600160a01b031681565b6006546101cf906001600160a01b031681565b61025c6103c7366004613a4a565b611655565b61025c6103da366004613234565b6116c4565b61025c6103ed366004613a78565b61173d565b6103fa612e23565b6000600760009054906101000a90046001600160a01b03166001600160a01b0316637bc53f3e866000866001600160a01b03166307c560016040518163ffffffff1660e01b8152600401602060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190613ab9565b6040518463ffffffff1660e01b81526004016104a393929190613ad2565b600060405180830381865afa1580156104c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e89190810190613c66565b905060005b815181101561054e578482828151811061050957610509613e73565b602002602001015161010001510361053e5781818151811061052d5761052d613e73565b602002602001015192505050610551565b61054781613e9f565b90506104ed565b50505b9392505050565b61014084015160405163a3df934f60e01b815260048101919091526001600160a01b0382169063a3df934f9060240160e060405180830381865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c89190613eb8565b5160ff166064146105ec57604051631f6de81d60e21b815260040160405180910390fd5b61010086015115610618576040516328d7be8d60e11b8152600160048201526024015b60405180910390fd5b6101008501511561063f576040516328d7be8d60e11b81526002600482015260240161060f565b6000805b600d8110156106af576000866040015182600d811061066457610664613e73565b602002015161ffff16111561069f57856040015181600d811061068957610689613e73565b602002015161069c9061ffff1683613f2c565b91505b6106a881613e9f565b9050610643565b50600554845160405163058c9e0560e01b815261ffff90911660048201526001600160a01b039091169063058c9e0590602401602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107239190613ab9565b81111561074657604051632473a0d360e11b81526001600482015260240161060f565b60055484516040516321c4e01760e01b815261ffff90911660048201526001600160a01b03909116906321c4e01790602401602060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b99190613f3f565b60ff168311806107cd5750845160ff168314155b156107ee576040516328d7be8d60e11b81526003600482015260240161060f565b50505050505050565b6107ff611ba7565b6108096000611c01565b565b610813611ba7565b8060ff1660010361083e57600180546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660020361086957600280546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660030361089457600380546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff166004036108bf57600580546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff166005036108ea57600480546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660060361091557600980546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660070361094057600780546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660080361096b57600880546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660090361099657600b80546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff16600a036109c157600c80546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff16600b036109e857600a80546001600160a01b0319166001600160a01b0384161790555b6040805160ff831681526001600160a01b03841660208201527fd58da2325ce084e36b92ea4c1a90706ffa665d07ec064f887de9dbb8f15f4995910160405180910390a15050565b600c546001600160a01b03163314801590610a5657506000546001600160a01b03163314155b15610a73576040516282b42960e81b815260040160405180910390fd5b6000826001600160401b03811115610a8d57610a8d613251565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b50905060005b83811015610cab576001546001600160a01b038481166000908152600e602052604081208054919392909216916355f5423091899185610afb83613e9f565b90915550604080516020810182905260096060820152684c4f434b5f424f585f60b81b608082015290810187905260a00160408051601f198184030181528282526005546309c9dcb160e01b8452915190926000926001600160a01b0316916309c9dcb1916004808201926020929091908290030181865afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba99190613f5c565b6040518663ffffffff1660e01b8152600401610bc9959493929190613f79565b602060405180830381865afa158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0a9190613ab9565b9050836001600160a01b03167f8e7792cc94f9d8cc0ee7971f922d5f561e7dcca1ce9e8d1b666d7377d777f73182604051610c4791815260200190565b60405180910390a2610c5881611c51565b838381518110610c6a57610c6a613e73565b6020026020010190600c811115610c8357610c83613f16565b9081600c811115610c9657610c96613f16565b905250610ca4905081613e9f565b9050610abc565b5060005b83811015610dce576000828281518110610ccb57610ccb613e73565b602002602001015190506000600c811115610ce857610ce8613f16565b81600c811115610cfa57610cfa613f16565b03610d055750610dbe565b6003546001600160a01b031663156e29f68583600c811115610d2957610d29613f16565b60016040518463ffffffff1660e01b8152600401610d4993929190613ad2565b600060405180830381600087803b158015610d6357600080fd5b505af1158015610d77573d6000803e3d6000fd5b50505050836001600160a01b03167f363c1ce153bd4ee16fa06d5456b2b65bfbe89a83c25a18c0c8e435b403f4f4fe82604051610db49190613fb4565b60405180910390a2505b610dc781613e9f565b9050610caf565b5050505050565b610ddd612e23565b6000600760009054906101000a90046001600160a01b03166001600160a01b0316639b610b0a866000866001600160a01b03166307c560016040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e689190613ab9565b6040518463ffffffff1660e01b8152600401610e8693929190613ad2565b600060405180830381865afa158015610ea3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ecb9190810190613c66565b905060005b815181101561054e5784828281518110610eec57610eec613e73565b6020026020010151610100015103610f105781818151811061052d5761052d613e73565b610f1981613e9f565b9050610ed0565b610f28612edf565b610f30612f38565b6102008501516001600160a01b039081166000908152600d6020526040902054168015610fd7576101208601516040516306814e3960e31b815261ffff90911660048201526001600160a01b0382169063340a71c890602401600060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fce9190810190614044565b9250610fe99050565b60968083526020830181905260408301525b6110146040518060800160405280600081526020016000815260200160008152602001606081525090565b825161ffff1660000361103d576040516328d7be8d60e11b81526006600482015260240161060f565b825160208201805161ffff909216909101905282600160200201516040828101805161ffff93841601905284810151835192169091018252610220880151610140890151915163a3df934f60e01b815260048101929092526110f5916001600160a01b039091169063a3df934f9060240160e060405180830381865afa1580156110cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ef9190613eb8565b82611d31565b905061110a8760600151886040015183612032565b9050611114612edf565b6005546040805163dc5fa7ab60e01b815290516000926001600160a01b03169163dc5fa7ab9160048083019260209291908290030181865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190613f5c565b61ffff16905087516001600160401b038111156111a1576111a1613251565b6040519080825280602002602001820160405280156111ca578160200160208202803683370190505b5060c083015287516001600160401b038111156111e9576111e9613251565b604051908082528060200260200182016040528015611212578160200160208202803683370190505b5060a083015287516001600160401b0381111561123157611231613251565b60405190808252806020026020018201604052801561125a578160200160208202803683370190505b5060e0830152602089015161126f9084612544565b925061127a83612688565b925060005b885181101561144857600089828151811061129c5761129c613e73565b602002602001015160ff1660038111156112b8576112b8613f16565b905060008160038111156112ce576112ce613f16565b14806112e15750836060015160ff166064145b156112fb575060808301805160010161ffff169052611440565b6101008b0151604051611361918491602001608080825260139082015272494e544552414354494f4e5f524553554c545f60681b60a0820152602081019290925260c060408301819052600190830152605f60f81b60e083015260608201526101000190565b60408051601f19818403018152918152606087018290526001546101608e0151915163055f542360e41b81526000936001600160a01b03909216926355f54230926113b6928f92919087908b9060040161410a565b602060405180830381865afa1580156113d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f79190613ab9565b905061140881868e89868f89612763565b8097508196505050808560a00151848151811061142757611427613e73565b602002602001019061ffff16908161ffff168152505050505b60010161127f565b509098975050505050505050565b600a546101208301516040516353a901bf60e11b815260009283926001600160a01b039091169163a752037e916114939160040190815260200190565b61010060405180830381865afa1580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190614168565b600a5461014086015160405163608ad89160e01b81529293506000926001600160a01b039092169163608ad891916115139160040190815260200190565b61010060405180830381865afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190614168565b60408301519091506001600160a01b031615158061157f575060408101516001600160a01b031615155b1561163757428260c001516001600160401b0316111580156115b65750856001600160a01b031682608001516001600160a01b0316145b806115d65750856001600160a01b031682604001516001600160a01b0316145b8061160e5750428160c001516001600160401b03161115801561160e5750856001600160a01b031681608001516001600160a01b0316145b8061162e5750856001600160a01b031681604001516001600160a01b0316145b92505050610551565b836001600160a01b0316866001600160a01b03161492505050610551565b61165d611ba7565b6001600160a01b038281166000818152600d602090815260409182902080546001600160a01b0319169486169485179055905192835290917fb8fe955c54b89d88fb80eead555ff305d6cf025b2ebe917b38b1e7282592b9f6910160405180910390a25050565b6116cc611ba7565b6001600160a01b0381166117315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060f565b61173a81611c01565b50565b600c546001600160a01b0316331480159061176357506000546001600160a01b03163314155b15611780576040516282b42960e81b815260040160405180910390fd5b600554604051631df5e93560e01b8152600481018490526000916001600160a01b031690631df5e93590602401602060405180830381865afa1580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee9190613ab9565b9050600080805b86811015611949576001546001600160a01b038681166000908152600e602052604081208054919392909216916355f54230918c918561183483613e9f565b909155506040805160208101829052600d60608201526c524557415244535f545950455f60981b608082015290810187905260a00160405160208183030381529060405260006127106040518663ffffffff1660e01b815260040161189d95949392919061410a565b602060405180830381865afa1580156118ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118de9190613ab9565b9050856001600160a01b03167f455cdc926e241c130ef73b19f38723a632ef3ce7e4b2f5e563b6dabfd87fbcb08260405161191b91815260200190565b60405180910390a2848111611938578361193481613e9f565b9450505b5061194281613e9f565b90506117f5565b50600554604051632532304160e21b81526004810187905287916001600160a01b0316906394c8c10490602401602060405180830381865afa158015611993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b79190613ab9565b6119c1919061420f565b90508015611aef5760085460405163160493e760e01b81526001600160a01b038681166004830152602482018490529091169063160493e790604401600060405180830381600087803b158015611a1757600080fd5b505af1158015611a2b573d6000803e3d6000fd5b5050505060006064826005611a40919061420f565b611a4a919061423c565b600854600b5460405163160493e760e01b81526001600160a01b03918216600482015260248101849052929350169063160493e790604401600060405180830381600087803b158015611a9c57600080fd5b505af1158015611ab0573d6000803e3d6000fd5b505050507f715f224bde15d12b6a2a3fc1a65c87cae96f02f715a0d38cc3409776a462c54781604051611ae591815260200190565b60405180910390a1505b81156107ee57600954604051630ab714fb60e11b81526001600160a01b039091169063156e29f690611b2990879060049087908201613ad2565b600060405180830381600087803b158015611b4357600080fd5b505af1158015611b57573d6000803e3d6000fd5b50505050836001600160a01b03167f1b2d624122656c0cbbf3659d7b3dcaf0baea306d057563681987029962c869e583604051611b9691815260200190565b60405180910390a250505050505050565b6000546001600160a01b031633146108095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060015b600c8111611d28576005546000906001600160a01b0316632e06b2c183600c811115611c8457611c84613f16565b6040518263ffffffff1660e01b8152600401611ca09190613fb4565b6040805180830381865afa158015611cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce09190614250565b805190915061ffff168410801590611d005750602081015161ffff168411155b15611d1f5781600c811115611d1757611d17613f16565b949350505050565b50600101611c56565b50600092915050565b611d5c6040518060800160405280600081526020016000815260200160008152602001606081525090565b6005546040805163017ba3c160e71b815290516000926001600160a01b03169163bdd1e0809160048083019260e09291908290030181865afa158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca91906142cd565b90506000600560009054906101000a90046001600160a01b03166001600160a01b031663904b33d36040518163ffffffff1660e01b815260040160e060405180830381865afa158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e459190613eb8565b90506000600560009054906101000a90046001600160a01b03166001600160a01b0316638601b2296040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec09190613f5c565b60208601805161ffff92909216918201905260408601805182019052855181018652905060005b6007811015612024576000838260078110611f0457611f04613e73565b602002015160ff1603611f5757868160078110611f2357611f23613e73565b602002015160ff16848260078110611f3d57611f3d613e73565b60200201510261ffff168660200181815101915081815250505b6002838260078110611f6b57611f6b613e73565b602002015160ff1603611fbe57868160078110611f8a57611f8a613e73565b602002015160ff16848260078110611fa457611fa4613e73565b60200201510261ffff168660400181815101915081815250505b6001838260078110611fd257611fd2613e73565b602002015160ff160361201c57868160078110611ff157611ff1613e73565b602002015160ff1684826007811061200b5761200b613e73565b60200201518751910261ffff160186525b600101611ee7565b508493505050505b92915050565b61205d6040518060800160405280600081526020016000815260200160008152602001606081525090565b600060015b600d8110156122f657600081600c81111561207f5761207f613f16565b90508582600d811061209357612093613e73565b602002015161ffff166000036120a957506122ee565b600554604051637bc3a0cb60e01b81526001600160a01b0390911690637bc3a0cb906120d9908490600401613fb4565b602060405180830381865afa1580156120f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211a9190613f5c565b9250600181600c81111561213057612130613f16565b148061214d5750600481600c81111561214b5761214b613f16565b145b806121695750600781600c81111561216757612167613f16565b145b806121855750600a81600c81111561218357612183613f16565b145b156121b2578582600d811061219c5761219c613e73565b6020020151855190840261ffff160185526122ec565b600281600c8111156121c6576121c6613f16565b14806121e35750600581600c8111156121e1576121e1613f16565b145b806121ff5750600881600c8111156121fd576121fd613f16565b145b8061221b5750600b81600c81111561221957612219613f16565b145b15612251578582600d811061223257612232613e73565b6020020151830261ffff168560200181815101915081815250506122ec565b600381600c81111561226557612265613f16565b14806122825750600681600c81111561228057612280613f16565b145b8061229e5750600981600c81111561229c5761229c613f16565b145b806122ba5750600c81600c8111156122b8576122b8613f16565b145b156122ec578582600d81106122d1576122d1613e73565b6020020151830261ffff168560400181815101915081815250505b505b600101612062565b5060005b600981101561253a5785816009811061231557612315613e73565b602002015160ff161561253257600081600881111561233657612336613f16565b60055460405163e68c751960e01b81529192506001600160a01b03169063e68c75199061236790849060040161432b565b602060405180830381865afa158015612384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a89190613f5c565b925060008160088111156123be576123be613f16565b14806123db575060038160088111156123d9576123d9613f16565b145b806123f7575060068160088111156123f5576123f5613f16565b145b156124285786826009811061240e5761240e613e73565b6020020151855160ff909116840261ffff16018552612530565b600181600881111561243c5761243c613f16565b14806124595750600481600881111561245757612457613f16565b145b806124755750600781600881111561247357612473613f16565b145b156124ae5786826009811061248c5761248c613e73565b602002015160ff16830261ffff16856020018181510191508181525050612530565b60028160088111156124c2576124c2613f16565b14806124df575060058160088111156124dd576124dd613f16565b145b806124fb575060088160088111156124f9576124f9613f16565b145b156125305786826009811061251257612512613e73565b602002015160ff16830261ffff168560400181815101915081815250505b505b6001016122fa565b5091949350505050565b61256f6040518060800160405280600081526020016000815260200160008152602001606081525090565b6005546040516292538760e11b815261ffff851660048201526000916001600160a01b031690630124a70e90602401602060405180830381865afa1580156125bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125df9190613f5c565b90508061ffff168360000151111561260f578061ffff1683600001818151612607919061433f565b905250612614565b600083525b8061ffff1683602001511115612642578061ffff168360200181815161263a919061433f565b90525061264a565b600060208401525b8061ffff1683604001511115612678578061ffff1683604001818151612670919061433f565b905250612680565b600060408401525b509092915050565b6126b36040518060800160405280600081526020016000815260200160008152602001606081525090565b60055460408051632999d5b960e11b815290516000926001600160a01b031691635333ab729160048083019260209291908290030181865afa1580156126fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127219190613f5c565b61ffff169050808360400151111561273b57604083018190525b808360200151111561274f57602083018190525b825181101561275c578083525b5090919050565b61276b612edf565b6127966040518060800160405280600081526020016000815260200160008152602001606081525090565b60018560038111156127aa576127aa613f16565b1480156127bb575085602001518911155b15612809578751886127cc82614352565b61ffff1661ffff168152505060018860c0015184815181106127f0576127f0613e73565b602002602001019060ff16908160ff1681525050612e14565b600285600381111561281d5761281d613f16565b14801561282d5750856040015189115b806128545750600385600381111561284757612847613f16565b1480156128545750855189115b15612dce576040880151875160009161286c91614373565b60ff161115612dc257604088018051906128858261438c565b60ff169052506000805b600981101561294657896020015181600981106128ae576128ae613e73565b602002015160ff16896060015182600981106128cc576128cc613e73565b602002015160ff16118015612923575060008a6020015182600981106128f4576128f4613e73565b60200201518a60600151836009811061290f5761290f613e73565b602002015161291e9190614373565b60ff16115b15612936578161293281613e9f565b9250505b61293f81613e9f565b905061288f565b506000816001600160401b0381111561296157612961613251565b60405190808252806020026020018201604052801561298a578160200160208202803683370190505b5090506000805b6009811015612a66578b6020015181600981106129b0576129b0613e73565b602002015160ff168b6060015182600981106129ce576129ce613e73565b602002015160ff16118015612a25575060008c6020015182600981106129f6576129f6613e73565b60200201518c606001518360098110612a1157612a11613e73565b6020020151612a209190614373565b60ff16115b15612a565780838381518110612a3d57612a3d613e73565b602090810291909101015281612a5281613e9f565b9250505b612a5f81613e9f565b9050612991565b50600180546101608c01516040805160208101829052600d60608201526c535550504f52545f534849505f60981b6080808301919091528183018c90528251808303909101815260a082019283905263055f542360e41b90925260009488946001600160a01b0316936355f5423093612ae6938f9390889060a4016143ab565b602060405180830381865afa158015612b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b279190613ab9565b612b3191906143e1565b90506000805b85811015612b8457808303612b7457848181518110612b5857612b58613e73565b60200260200101516008811115612b7157612b71613f16565b91505b612b7d81613e9f565b9050612b37565b508c60200151816008811115612b9c57612b9c613f16565b60ff1660098110612baf57612baf613e73565b60200201805190612bbf8261438c565b60ff16905250806008811115612bd757612bd7613f16565b8d60e001518981518110612bed57612bed613e73565b60ff9092166020928302919091019091015260055460405163e68c751960e01b81526000916001600160a01b03169063e68c751990612c3090859060040161432b565b602060405180830381865afa158015612c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c719190613f5c565b90506000826008811115612c8757612c87613f16565b1480612ca457506003826008811115612ca257612ca2613f16565b145b80612cc057506006826008811115612cbe57612cbe613f16565b145b15612ce3578061ffff168c600001818151612cdb919061433f565b905250612db7565b6001826008811115612cf757612cf7613f16565b1480612d1457506004826008811115612d1257612d12613f16565b145b80612d3057506007826008811115612d2e57612d2e613f16565b145b15612d4b578061ffff168c602001818151612cdb919061433f565b6002826008811115612d5f57612d5f613f16565b1480612d7c57506005826008811115612d7a57612d7a613f16565b145b80612d9857506008826008811115612d9657612d96613f16565b145b15612db7578061ffff168c604001818151612db3919061433f565b9052505b505050505050612e14565b60646060890152612e14565b6001856003811115612de257612de2613f16565b14612e145760018860c001518481518110612dff57612dff613e73565b602002602001019060ff16908160ff16815250505b50959793965092945050505050565b604080516102408101825260008082526020820152908101612e43612f56565b8152602001612e50612f75565b815260200160608152602001600061ffff168152602001600061ffff168152602001600061ffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b604051806101000160405280600061ffff168152602001612efe612f75565b8152602001600060ff168152602001600060ff168152602001600061ffff1681526020016060815260200160608152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b604051806101a00160405280600d906020820280368337509192915050565b6040518061012001604052806009906020820280368337509192915050565b6001600160a01b038116811461173a57600080fd5b8035612fb481612f94565b919050565b600080600060608486031215612fce57600080fd5b8335612fd981612f94565b9250602084013591506040840135612ff081612f94565b809150509250925092565b8060005b600d81101561302257815161ffff16845260209384019390910190600101612fff565b50505050565b8060005b600981101561302257815160ff1684526020938401939091019060010161302c565b600081518084526020808501945080840160005b8381101561308157815160ff1687529582019590820190600101613062565b509495945050505050565b60005b838110156130a757818101518382015260200161308f565b50506000910152565b600081518084526130c881602086016020860161308c565b601f01601f19169290920160200192915050565b602081526130f060208201835160ff169052565b60006020830151613107604084018261ffff169052565b50604083015161311a6060840182612ffb565b50606083015161020061312f81850183613028565b608085015191506104c08061032086015261314e6104e086018461304e565b925060a086015161316661034087018261ffff169052565b5060c086015161ffff90811661036087015260e0870151166103808601526101008601516103a08601526101208601516103c08601526101408601516103e08601526101608601516104008601526101808601516104208601526101a08601516104408601526101c0860151858403601f19016104608701526131e984826130b0565b9350506101e08601516132086104808701826001600160a01b03169052565b50908501516001600160a01b039081166104a08601526102209095015190941692909301919091525090565b60006020828403121561324657600080fd5b813561055181612f94565b634e487b7160e01b600052604160045260246000fd5b60405161024081016001600160401b038111828210171561328a5761328a613251565b60405290565b60405160c081016001600160401b038111828210171561328a5761328a613251565b60405161010081016001600160401b038111828210171561328a5761328a613251565b6040516101a081016001600160401b038111828210171561328a5761328a613251565b60405161012081016001600160401b038111828210171561328a5761328a613251565b60405160e081016001600160401b038111828210171561328a5761328a613251565b604051601f8201601f191681016001600160401b038111828210171561336557613365613251565b604052919050565b60ff8116811461173a57600080fd5b8035612fb48161336d565b61ffff8116811461173a57600080fd5b8035612fb481613387565b600082601f8301126133b357600080fd5b6133bb6132d5565b806101a08401858111156133ce57600080fd5b845b818110156133f15780356133e381613387565b8452602093840193016133d0565b509095945050505050565b600082601f83011261340d57600080fd5b6134156132f8565b8061012084018581111561342857600080fd5b845b818110156133f157803561343d8161336d565b84526020938401930161342a565b60006001600160401b0382111561346457613464613251565b5060051b60200190565b600082601f83011261347f57600080fd5b8135602061349461348f8361344b565b61333d565b82815260059290921b840181019181810190868411156134b357600080fd5b8286015b848110156134d75780356134ca8161336d565b83529183019183016134b7565b509695505050505050565b60006001600160401b038211156134fb576134fb613251565b50601f01601f191660200190565b600082601f83011261351a57600080fd5b813561352861348f826134e2565b81815284602083860101111561353d57600080fd5b816020850160208301376000918101602001919091529392505050565b60006104c0828403121561356d57600080fd5b613575613267565b90506135808261337c565b815261358e60208301613397565b60208201526135a083604084016133a2565b60408201526101e06135b4848285016133fc565b60608301526103008301356001600160401b03808211156135d457600080fd5b6135e08683870161346e565b60808501526135f26103208601613397565b60a08501526136046103408601613397565b60c08501526136166103608601613397565b60e08501526103808501356101008501526103a08501356101208501526103c08501356101408501526103e08501356101608501526104008501356101808501526104208501356101a085015261044085013591508082111561367857600080fd5b5061368585828601613509565b6101c0840152506136996104608401612fa9565b908201526136aa6104808301612fa9565b6102008201526136bd6104a08301612fa9565b61022082015292915050565b600060c082840312156136db57600080fd5b6136e3613290565b90506136ee82613397565b81526136fc6020830161337c565b602082015260408201356001600160401b038082111561371b57600080fd5b6137278583860161346e565b6040840152606084013560608401526080840135608084015260a084013591508082111561375457600080fd5b5061376184828501613509565b60a08301525092915050565b60008060008060008060c0878903121561378657600080fd5b86356001600160401b038082111561379d57600080fd5b6137a98a838b0161355a565b975060208901359150808211156137bf57600080fd5b6137cb8a838b0161355a565b965060408901359150808211156137e157600080fd5b6137ed8a838b0161355a565b9550606089013591508082111561380357600080fd5b5061381089828a016136c9565b9350506080870135915061382660a08801612fa9565b90509295509295509295565b6000806040838503121561384557600080fd5b823561385081612f94565b915060208301356138608161336d565b809150509250929050565b60008060006060848603121561388057600080fd5b83359250602084013591506040840135612ff081612f94565b6000806000606084860312156138ae57600080fd5b83356001600160401b03808211156138c557600080fd5b6138d18783880161355a565b945060208601359150808211156138e757600080fd5b506138f48682870161346e565b925050604084013590509250925092565b600081518084526020808501945080840160005b8381101561308157815161ffff1687529582019590820190600101613919565b6020815261394e60208201835161ffff169052565b600060208301516139626040840182613028565b50604083015160ff908116610160840152606084015116610180830152608083015161ffff166101a083015260a08301516102006101c084018190526139ac610220850183613905565b915060c0850151601f1980868503016101e08701526139cb848361304e565b935060e08701519150808685030183870152506139e8838261304e565b9695505050505050565b600080600060608486031215613a0757600080fd5b8335613a1281612f94565b925060208401356001600160401b03811115613a2d57600080fd5b613a398682870161355a565b9250506040840135612ff081612f94565b60008060408385031215613a5d57600080fd5b8235613a6881612f94565b9150602083013561386081612f94565b60008060008060808587031215613a8e57600080fd5b8435935060208501359250604085013591506060850135613aae81612f94565b939692955090935050565b600060208284031215613acb57600080fd5b5051919050565b6001600160a01b039390931683526020830191909152604082015260600190565b8051612fb48161336d565b8051612fb481613387565b600082601f830112613b1a57600080fd5b613b226132d5565b806101a0840185811115613b3557600080fd5b845b818110156133f1578051613b4a81613387565b845260209384019301613b37565b600082601f830112613b6957600080fd5b613b716132f8565b80610120840185811115613b8457600080fd5b845b818110156133f1578051613b998161336d565b845260209384019301613b86565b600082601f830112613bb857600080fd5b81516020613bc861348f8361344b565b82815260059290921b84018101918181019086841115613be757600080fd5b8286015b848110156134d7578051613bfe8161336d565b8352918301918301613beb565b6000613c1961348f846134e2565b9050828152838383011115613c2d57600080fd5b61055183602083018461308c565b600082601f830112613c4c57600080fd5b61055183835160208501613c0b565b8051612fb481612f94565b60006020808385031215613c7957600080fd5b82516001600160401b0380821115613c9057600080fd5b818501915085601f830112613ca457600080fd5b8151613cb261348f8261344b565b81815260059190911b83018401908481019088831115613cd157600080fd5b8585015b83811015613e6657805185811115613ced5760008081fd5b86016104c0818c03601f1901811315613d065760008081fd5b613d0e613267565b613d198a8401613af3565b81526040613d28818501613afe565b8b8301526060613d3a8f828701613b09565b828401526102009150613d4f8f838701613b58565b9083015261032084015189811115613d675760008081fd5b613d758f8d83880101613ba7565b608084015250613d886103408501613afe565b60a0830152613d9a6103608501613afe565b60c0830152613dac6103808501613afe565b60e08301526103a08401516101008301526103c08401516101208301526103e08401516101408301526104008401516101608301526104208401516101808301526104408401516101a083015261046084015189811115613e0d5760008081fd5b613e1b8f8d83880101613c3b565b6101c084015250613e2f6104808501613c5b565b6101e0830152613e426104a08501613c5b565b90820152613e51838301613c5b565b61022082015285525050918601918601613cd5565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613eb157613eb1613e89565b5060010190565b600060e08284031215613eca57600080fd5b82601f830112613ed957600080fd5b613ee161331b565b8060e0840185811115613ef357600080fd5b845b818110156133f1578051613f088161336d565b845260209384019301613ef5565b634e487b7160e01b600052602160045260246000fd5b8082018082111561202c5761202c613e89565b600060208284031215613f5157600080fd5b81516105518161336d565b600060208284031215613f6e57600080fd5b815161055181613387565b85815284602082015260a060408201526000613f9860a08301866130b0565b905083606083015261ffff831660808301529695505050505050565b60208101600d8310613fc857613fc8613f16565b91905290565b600082601f830112613fdf57600080fd5b604051606081018181106001600160401b038211171561400157614001613251565b60405280606084018581111561401657600080fd5b845b8181101561403957805161402b81613387565b835260209283019201614018565b509195945050505050565b6000806080838503121561405757600080fd5b82516001600160401b038082111561406e57600080fd5b8185019150601f868184011261408357600080fd5b61408b6132b2565b8061010085018981111561409e57600080fd5b855b818110156140ea578051868111156140b85760008081fd5b87018581018c136140c95760008081fd5b805160206140da8e83838601613c0b565b87529095019450506020016140a0565b505080965050505050506141018460208501613fce565b90509250929050565b85815284602082015260a06040820152600061412960a08301866130b0565b606083019490945250608001529392505050565b805163ffffffff81168114612fb457600080fd5b80516001600160401b0381168114612fb457600080fd5b6000610100828403121561417b57600080fd5b6141836132b2565b61418c8361413d565b8152602083015180151581146141a157600080fd5b60208201526141b260408401613c5b565b60408201526141c36060840161413d565b60608201526141d460808401613c5b565b60808201526141e560a08401614151565b60a08201526141f660c08401614151565b60c082015260e083015160e08201528091505092915050565b808202811582820484141761202c5761202c613e89565b634e487b7160e01b600052601260045260246000fd5b60008261424b5761424b614226565b500490565b60006040828403121561426257600080fd5b82601f83011261427157600080fd5b604051604081018181106001600160401b038211171561429357614293613251565b80604052508060408401858111156142aa57600080fd5b845b818110156140395780516142bf81613387565b8352602092830192016142ac565b600060e082840312156142df57600080fd5b82601f8301126142ee57600080fd5b6142f661331b565b8060e084018581111561430857600080fd5b845b818110156133f157805161431d81613387565b84526020938401930161430a565b6020810160098310613fc857613fc8613f16565b8181038181111561202c5761202c613e89565b600061ffff80831681810361436957614369613e89565b6001019392505050565b60ff828116828216039081111561202c5761202c613e89565b600060ff821660ff81036143a2576143a2613e89565b60010192915050565b85815284602082015260a0604082015260006143ca60a08301866130b0565b60ff94909416606083015250608001529392505050565b6000826143f0576143f0614226565b50069056fea164736f6c6343000811000a
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80637ecebe00116100de578063bc89416911610097578063e533627611610071578063e5336276146103a6578063f0514d49146103b9578063f2fde38b146103cc578063f4fe46a2146103df57600080fd5b8063bc89416914610350578063c5e815c714610370578063c8ff2c921461039357600080fd5b80637ecebe00146102c55780638da5cb5b146102f35780639f33d88114610304578063a225632614610317578063b0aa111b1461032a578063b7297cf31461033d57600080fd5b80634cb5bca81161014b57806362c2fd6b1161012557806362c2fd6b14610284578063647aba3014610297578063715018a6146102aa578063797f87ba146102b257600080fd5b80634cb5bca8146102495780635ec01e4d1461025e57806361d027b31461027157600080fd5b80630745742a1461019357806308b59f57146101bc5780632baf4596146101e757806331891228146101fa5780633c2f22bc146102235780634054eaa414610236575b600080fd5b6101a66101a1366004612fb9565b6103f2565b6040516101b391906130dc565b60405180910390f35b600c546101cf906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b600a546101cf906001600160a01b031681565b6101cf610208366004613234565b600d602052600090815260409020546001600160a01b031681565b6002546101cf906001600160a01b031681565b6007546101cf906001600160a01b031681565b61025c61025736600461376d565b610558565b005b6001546101cf906001600160a01b031681565b600b546101cf906001600160a01b031681565b6003546101cf906001600160a01b031681565b6004546101cf906001600160a01b031681565b61025c6107f7565b6009546101cf906001600160a01b031681565b6102e56102d3366004613234565b600e6020526000908152604090205481565b6040519081526020016101b3565b6000546001600160a01b03166101cf565b61025c610312366004613832565b61080b565b61025c61032536600461386b565b610a30565b6101a6610338366004612fb9565b610dd5565b6005546101cf906001600160a01b031681565b61036361035e366004613899565b610f20565b6040516101b39190613939565b61038361037e3660046139f2565b611456565b60405190151581526020016101b3565b6008546101cf906001600160a01b031681565b6006546101cf906001600160a01b031681565b61025c6103c7366004613a4a565b611655565b61025c6103da366004613234565b6116c4565b61025c6103ed366004613a78565b61173d565b6103fa612e23565b6000600760009054906101000a90046001600160a01b03166001600160a01b0316637bc53f3e866000866001600160a01b03166307c560016040518163ffffffff1660e01b8152600401602060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190613ab9565b6040518463ffffffff1660e01b81526004016104a393929190613ad2565b600060405180830381865afa1580156104c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e89190810190613c66565b905060005b815181101561054e578482828151811061050957610509613e73565b602002602001015161010001510361053e5781818151811061052d5761052d613e73565b602002602001015192505050610551565b61054781613e9f565b90506104ed565b50505b9392505050565b61014084015160405163a3df934f60e01b815260048101919091526001600160a01b0382169063a3df934f9060240160e060405180830381865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c89190613eb8565b5160ff166064146105ec57604051631f6de81d60e21b815260040160405180910390fd5b61010086015115610618576040516328d7be8d60e11b8152600160048201526024015b60405180910390fd5b6101008501511561063f576040516328d7be8d60e11b81526002600482015260240161060f565b6000805b600d8110156106af576000866040015182600d811061066457610664613e73565b602002015161ffff16111561069f57856040015181600d811061068957610689613e73565b602002015161069c9061ffff1683613f2c565b91505b6106a881613e9f565b9050610643565b50600554845160405163058c9e0560e01b815261ffff90911660048201526001600160a01b039091169063058c9e0590602401602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107239190613ab9565b81111561074657604051632473a0d360e11b81526001600482015260240161060f565b60055484516040516321c4e01760e01b815261ffff90911660048201526001600160a01b03909116906321c4e01790602401602060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b99190613f3f565b60ff168311806107cd5750845160ff168314155b156107ee576040516328d7be8d60e11b81526003600482015260240161060f565b50505050505050565b6107ff611ba7565b6108096000611c01565b565b610813611ba7565b8060ff1660010361083e57600180546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660020361086957600280546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660030361089457600380546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff166004036108bf57600580546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff166005036108ea57600480546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660060361091557600980546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660070361094057600780546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660080361096b57600880546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff1660090361099657600b80546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff16600a036109c157600c80546001600160a01b0319166001600160a01b0384161790556109e8565b8060ff16600b036109e857600a80546001600160a01b0319166001600160a01b0384161790555b6040805160ff831681526001600160a01b03841660208201527fd58da2325ce084e36b92ea4c1a90706ffa665d07ec064f887de9dbb8f15f4995910160405180910390a15050565b600c546001600160a01b03163314801590610a5657506000546001600160a01b03163314155b15610a73576040516282b42960e81b815260040160405180910390fd5b6000826001600160401b03811115610a8d57610a8d613251565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b50905060005b83811015610cab576001546001600160a01b038481166000908152600e602052604081208054919392909216916355f5423091899185610afb83613e9f565b90915550604080516020810182905260096060820152684c4f434b5f424f585f60b81b608082015290810187905260a00160408051601f198184030181528282526005546309c9dcb160e01b8452915190926000926001600160a01b0316916309c9dcb1916004808201926020929091908290030181865afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba99190613f5c565b6040518663ffffffff1660e01b8152600401610bc9959493929190613f79565b602060405180830381865afa158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0a9190613ab9565b9050836001600160a01b03167f8e7792cc94f9d8cc0ee7971f922d5f561e7dcca1ce9e8d1b666d7377d777f73182604051610c4791815260200190565b60405180910390a2610c5881611c51565b838381518110610c6a57610c6a613e73565b6020026020010190600c811115610c8357610c83613f16565b9081600c811115610c9657610c96613f16565b905250610ca4905081613e9f565b9050610abc565b5060005b83811015610dce576000828281518110610ccb57610ccb613e73565b602002602001015190506000600c811115610ce857610ce8613f16565b81600c811115610cfa57610cfa613f16565b03610d055750610dbe565b6003546001600160a01b031663156e29f68583600c811115610d2957610d29613f16565b60016040518463ffffffff1660e01b8152600401610d4993929190613ad2565b600060405180830381600087803b158015610d6357600080fd5b505af1158015610d77573d6000803e3d6000fd5b50505050836001600160a01b03167f363c1ce153bd4ee16fa06d5456b2b65bfbe89a83c25a18c0c8e435b403f4f4fe82604051610db49190613fb4565b60405180910390a2505b610dc781613e9f565b9050610caf565b5050505050565b610ddd612e23565b6000600760009054906101000a90046001600160a01b03166001600160a01b0316639b610b0a866000866001600160a01b03166307c560016040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e689190613ab9565b6040518463ffffffff1660e01b8152600401610e8693929190613ad2565b600060405180830381865afa158015610ea3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ecb9190810190613c66565b905060005b815181101561054e5784828281518110610eec57610eec613e73565b6020026020010151610100015103610f105781818151811061052d5761052d613e73565b610f1981613e9f565b9050610ed0565b610f28612edf565b610f30612f38565b6102008501516001600160a01b039081166000908152600d6020526040902054168015610fd7576101208601516040516306814e3960e31b815261ffff90911660048201526001600160a01b0382169063340a71c890602401600060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fce9190810190614044565b9250610fe99050565b60968083526020830181905260408301525b6110146040518060800160405280600081526020016000815260200160008152602001606081525090565b825161ffff1660000361103d576040516328d7be8d60e11b81526006600482015260240161060f565b825160208201805161ffff909216909101905282600160200201516040828101805161ffff93841601905284810151835192169091018252610220880151610140890151915163a3df934f60e01b815260048101929092526110f5916001600160a01b039091169063a3df934f9060240160e060405180830381865afa1580156110cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ef9190613eb8565b82611d31565b905061110a8760600151886040015183612032565b9050611114612edf565b6005546040805163dc5fa7ab60e01b815290516000926001600160a01b03169163dc5fa7ab9160048083019260209291908290030181865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190613f5c565b61ffff16905087516001600160401b038111156111a1576111a1613251565b6040519080825280602002602001820160405280156111ca578160200160208202803683370190505b5060c083015287516001600160401b038111156111e9576111e9613251565b604051908082528060200260200182016040528015611212578160200160208202803683370190505b5060a083015287516001600160401b0381111561123157611231613251565b60405190808252806020026020018201604052801561125a578160200160208202803683370190505b5060e0830152602089015161126f9084612544565b925061127a83612688565b925060005b885181101561144857600089828151811061129c5761129c613e73565b602002602001015160ff1660038111156112b8576112b8613f16565b905060008160038111156112ce576112ce613f16565b14806112e15750836060015160ff166064145b156112fb575060808301805160010161ffff169052611440565b6101008b0151604051611361918491602001608080825260139082015272494e544552414354494f4e5f524553554c545f60681b60a0820152602081019290925260c060408301819052600190830152605f60f81b60e083015260608201526101000190565b60408051601f19818403018152918152606087018290526001546101608e0151915163055f542360e41b81526000936001600160a01b03909216926355f54230926113b6928f92919087908b9060040161410a565b602060405180830381865afa1580156113d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f79190613ab9565b905061140881868e89868f89612763565b8097508196505050808560a00151848151811061142757611427613e73565b602002602001019061ffff16908161ffff168152505050505b60010161127f565b509098975050505050505050565b600a546101208301516040516353a901bf60e11b815260009283926001600160a01b039091169163a752037e916114939160040190815260200190565b61010060405180830381865afa1580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190614168565b600a5461014086015160405163608ad89160e01b81529293506000926001600160a01b039092169163608ad891916115139160040190815260200190565b61010060405180830381865afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190614168565b60408301519091506001600160a01b031615158061157f575060408101516001600160a01b031615155b1561163757428260c001516001600160401b0316111580156115b65750856001600160a01b031682608001516001600160a01b0316145b806115d65750856001600160a01b031682604001516001600160a01b0316145b8061160e5750428160c001516001600160401b03161115801561160e5750856001600160a01b031681608001516001600160a01b0316145b8061162e5750856001600160a01b031681604001516001600160a01b0316145b92505050610551565b836001600160a01b0316866001600160a01b03161492505050610551565b61165d611ba7565b6001600160a01b038281166000818152600d602090815260409182902080546001600160a01b0319169486169485179055905192835290917fb8fe955c54b89d88fb80eead555ff305d6cf025b2ebe917b38b1e7282592b9f6910160405180910390a25050565b6116cc611ba7565b6001600160a01b0381166117315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060f565b61173a81611c01565b50565b600c546001600160a01b0316331480159061176357506000546001600160a01b03163314155b15611780576040516282b42960e81b815260040160405180910390fd5b600554604051631df5e93560e01b8152600481018490526000916001600160a01b031690631df5e93590602401602060405180830381865afa1580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee9190613ab9565b9050600080805b86811015611949576001546001600160a01b038681166000908152600e602052604081208054919392909216916355f54230918c918561183483613e9f565b909155506040805160208101829052600d60608201526c524557415244535f545950455f60981b608082015290810187905260a00160405160208183030381529060405260006127106040518663ffffffff1660e01b815260040161189d95949392919061410a565b602060405180830381865afa1580156118ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118de9190613ab9565b9050856001600160a01b03167f455cdc926e241c130ef73b19f38723a632ef3ce7e4b2f5e563b6dabfd87fbcb08260405161191b91815260200190565b60405180910390a2848111611938578361193481613e9f565b9450505b5061194281613e9f565b90506117f5565b50600554604051632532304160e21b81526004810187905287916001600160a01b0316906394c8c10490602401602060405180830381865afa158015611993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b79190613ab9565b6119c1919061420f565b90508015611aef5760085460405163160493e760e01b81526001600160a01b038681166004830152602482018490529091169063160493e790604401600060405180830381600087803b158015611a1757600080fd5b505af1158015611a2b573d6000803e3d6000fd5b5050505060006064826005611a40919061420f565b611a4a919061423c565b600854600b5460405163160493e760e01b81526001600160a01b03918216600482015260248101849052929350169063160493e790604401600060405180830381600087803b158015611a9c57600080fd5b505af1158015611ab0573d6000803e3d6000fd5b505050507f715f224bde15d12b6a2a3fc1a65c87cae96f02f715a0d38cc3409776a462c54781604051611ae591815260200190565b60405180910390a1505b81156107ee57600954604051630ab714fb60e11b81526001600160a01b039091169063156e29f690611b2990879060049087908201613ad2565b600060405180830381600087803b158015611b4357600080fd5b505af1158015611b57573d6000803e3d6000fd5b50505050836001600160a01b03167f1b2d624122656c0cbbf3659d7b3dcaf0baea306d057563681987029962c869e583604051611b9691815260200190565b60405180910390a250505050505050565b6000546001600160a01b031633146108095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060015b600c8111611d28576005546000906001600160a01b0316632e06b2c183600c811115611c8457611c84613f16565b6040518263ffffffff1660e01b8152600401611ca09190613fb4565b6040805180830381865afa158015611cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce09190614250565b805190915061ffff168410801590611d005750602081015161ffff168411155b15611d1f5781600c811115611d1757611d17613f16565b949350505050565b50600101611c56565b50600092915050565b611d5c6040518060800160405280600081526020016000815260200160008152602001606081525090565b6005546040805163017ba3c160e71b815290516000926001600160a01b03169163bdd1e0809160048083019260e09291908290030181865afa158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca91906142cd565b90506000600560009054906101000a90046001600160a01b03166001600160a01b031663904b33d36040518163ffffffff1660e01b815260040160e060405180830381865afa158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e459190613eb8565b90506000600560009054906101000a90046001600160a01b03166001600160a01b0316638601b2296040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec09190613f5c565b60208601805161ffff92909216918201905260408601805182019052855181018652905060005b6007811015612024576000838260078110611f0457611f04613e73565b602002015160ff1603611f5757868160078110611f2357611f23613e73565b602002015160ff16848260078110611f3d57611f3d613e73565b60200201510261ffff168660200181815101915081815250505b6002838260078110611f6b57611f6b613e73565b602002015160ff1603611fbe57868160078110611f8a57611f8a613e73565b602002015160ff16848260078110611fa457611fa4613e73565b60200201510261ffff168660400181815101915081815250505b6001838260078110611fd257611fd2613e73565b602002015160ff160361201c57868160078110611ff157611ff1613e73565b602002015160ff1684826007811061200b5761200b613e73565b60200201518751910261ffff160186525b600101611ee7565b508493505050505b92915050565b61205d6040518060800160405280600081526020016000815260200160008152602001606081525090565b600060015b600d8110156122f657600081600c81111561207f5761207f613f16565b90508582600d811061209357612093613e73565b602002015161ffff166000036120a957506122ee565b600554604051637bc3a0cb60e01b81526001600160a01b0390911690637bc3a0cb906120d9908490600401613fb4565b602060405180830381865afa1580156120f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211a9190613f5c565b9250600181600c81111561213057612130613f16565b148061214d5750600481600c81111561214b5761214b613f16565b145b806121695750600781600c81111561216757612167613f16565b145b806121855750600a81600c81111561218357612183613f16565b145b156121b2578582600d811061219c5761219c613e73565b6020020151855190840261ffff160185526122ec565b600281600c8111156121c6576121c6613f16565b14806121e35750600581600c8111156121e1576121e1613f16565b145b806121ff5750600881600c8111156121fd576121fd613f16565b145b8061221b5750600b81600c81111561221957612219613f16565b145b15612251578582600d811061223257612232613e73565b6020020151830261ffff168560200181815101915081815250506122ec565b600381600c81111561226557612265613f16565b14806122825750600681600c81111561228057612280613f16565b145b8061229e5750600981600c81111561229c5761229c613f16565b145b806122ba5750600c81600c8111156122b8576122b8613f16565b145b156122ec578582600d81106122d1576122d1613e73565b6020020151830261ffff168560400181815101915081815250505b505b600101612062565b5060005b600981101561253a5785816009811061231557612315613e73565b602002015160ff161561253257600081600881111561233657612336613f16565b60055460405163e68c751960e01b81529192506001600160a01b03169063e68c75199061236790849060040161432b565b602060405180830381865afa158015612384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a89190613f5c565b925060008160088111156123be576123be613f16565b14806123db575060038160088111156123d9576123d9613f16565b145b806123f7575060068160088111156123f5576123f5613f16565b145b156124285786826009811061240e5761240e613e73565b6020020151855160ff909116840261ffff16018552612530565b600181600881111561243c5761243c613f16565b14806124595750600481600881111561245757612457613f16565b145b806124755750600781600881111561247357612473613f16565b145b156124ae5786826009811061248c5761248c613e73565b602002015160ff16830261ffff16856020018181510191508181525050612530565b60028160088111156124c2576124c2613f16565b14806124df575060058160088111156124dd576124dd613f16565b145b806124fb575060088160088111156124f9576124f9613f16565b145b156125305786826009811061251257612512613e73565b602002015160ff16830261ffff168560400181815101915081815250505b505b6001016122fa565b5091949350505050565b61256f6040518060800160405280600081526020016000815260200160008152602001606081525090565b6005546040516292538760e11b815261ffff851660048201526000916001600160a01b031690630124a70e90602401602060405180830381865afa1580156125bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125df9190613f5c565b90508061ffff168360000151111561260f578061ffff1683600001818151612607919061433f565b905250612614565b600083525b8061ffff1683602001511115612642578061ffff168360200181815161263a919061433f565b90525061264a565b600060208401525b8061ffff1683604001511115612678578061ffff1683604001818151612670919061433f565b905250612680565b600060408401525b509092915050565b6126b36040518060800160405280600081526020016000815260200160008152602001606081525090565b60055460408051632999d5b960e11b815290516000926001600160a01b031691635333ab729160048083019260209291908290030181865afa1580156126fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127219190613f5c565b61ffff169050808360400151111561273b57604083018190525b808360200151111561274f57602083018190525b825181101561275c578083525b5090919050565b61276b612edf565b6127966040518060800160405280600081526020016000815260200160008152602001606081525090565b60018560038111156127aa576127aa613f16565b1480156127bb575085602001518911155b15612809578751886127cc82614352565b61ffff1661ffff168152505060018860c0015184815181106127f0576127f0613e73565b602002602001019060ff16908160ff1681525050612e14565b600285600381111561281d5761281d613f16565b14801561282d5750856040015189115b806128545750600385600381111561284757612847613f16565b1480156128545750855189115b15612dce576040880151875160009161286c91614373565b60ff161115612dc257604088018051906128858261438c565b60ff169052506000805b600981101561294657896020015181600981106128ae576128ae613e73565b602002015160ff16896060015182600981106128cc576128cc613e73565b602002015160ff16118015612923575060008a6020015182600981106128f4576128f4613e73565b60200201518a60600151836009811061290f5761290f613e73565b602002015161291e9190614373565b60ff16115b15612936578161293281613e9f565b9250505b61293f81613e9f565b905061288f565b506000816001600160401b0381111561296157612961613251565b60405190808252806020026020018201604052801561298a578160200160208202803683370190505b5090506000805b6009811015612a66578b6020015181600981106129b0576129b0613e73565b602002015160ff168b6060015182600981106129ce576129ce613e73565b602002015160ff16118015612a25575060008c6020015182600981106129f6576129f6613e73565b60200201518c606001518360098110612a1157612a11613e73565b6020020151612a209190614373565b60ff16115b15612a565780838381518110612a3d57612a3d613e73565b602090810291909101015281612a5281613e9f565b9250505b612a5f81613e9f565b9050612991565b50600180546101608c01516040805160208101829052600d60608201526c535550504f52545f534849505f60981b6080808301919091528183018c90528251808303909101815260a082019283905263055f542360e41b90925260009488946001600160a01b0316936355f5423093612ae6938f9390889060a4016143ab565b602060405180830381865afa158015612b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b279190613ab9565b612b3191906143e1565b90506000805b85811015612b8457808303612b7457848181518110612b5857612b58613e73565b60200260200101516008811115612b7157612b71613f16565b91505b612b7d81613e9f565b9050612b37565b508c60200151816008811115612b9c57612b9c613f16565b60ff1660098110612baf57612baf613e73565b60200201805190612bbf8261438c565b60ff16905250806008811115612bd757612bd7613f16565b8d60e001518981518110612bed57612bed613e73565b60ff9092166020928302919091019091015260055460405163e68c751960e01b81526000916001600160a01b03169063e68c751990612c3090859060040161432b565b602060405180830381865afa158015612c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c719190613f5c565b90506000826008811115612c8757612c87613f16565b1480612ca457506003826008811115612ca257612ca2613f16565b145b80612cc057506006826008811115612cbe57612cbe613f16565b145b15612ce3578061ffff168c600001818151612cdb919061433f565b905250612db7565b6001826008811115612cf757612cf7613f16565b1480612d1457506004826008811115612d1257612d12613f16565b145b80612d3057506007826008811115612d2e57612d2e613f16565b145b15612d4b578061ffff168c602001818151612cdb919061433f565b6002826008811115612d5f57612d5f613f16565b1480612d7c57506005826008811115612d7a57612d7a613f16565b145b80612d9857506008826008811115612d9657612d96613f16565b145b15612db7578061ffff168c604001818151612db3919061433f565b9052505b505050505050612e14565b60646060890152612e14565b6001856003811115612de257612de2613f16565b14612e145760018860c001518481518110612dff57612dff613e73565b602002602001019060ff16908160ff16815250505b50959793965092945050505050565b604080516102408101825260008082526020820152908101612e43612f56565b8152602001612e50612f75565b815260200160608152602001600061ffff168152602001600061ffff168152602001600061ffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b604051806101000160405280600061ffff168152602001612efe612f75565b8152602001600060ff168152602001600060ff168152602001600061ffff1681526020016060815260200160608152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b604051806101a00160405280600d906020820280368337509192915050565b6040518061012001604052806009906020820280368337509192915050565b6001600160a01b038116811461173a57600080fd5b8035612fb481612f94565b919050565b600080600060608486031215612fce57600080fd5b8335612fd981612f94565b9250602084013591506040840135612ff081612f94565b809150509250925092565b8060005b600d81101561302257815161ffff16845260209384019390910190600101612fff565b50505050565b8060005b600981101561302257815160ff1684526020938401939091019060010161302c565b600081518084526020808501945080840160005b8381101561308157815160ff1687529582019590820190600101613062565b509495945050505050565b60005b838110156130a757818101518382015260200161308f565b50506000910152565b600081518084526130c881602086016020860161308c565b601f01601f19169290920160200192915050565b602081526130f060208201835160ff169052565b60006020830151613107604084018261ffff169052565b50604083015161311a6060840182612ffb565b50606083015161020061312f81850183613028565b608085015191506104c08061032086015261314e6104e086018461304e565b925060a086015161316661034087018261ffff169052565b5060c086015161ffff90811661036087015260e0870151166103808601526101008601516103a08601526101208601516103c08601526101408601516103e08601526101608601516104008601526101808601516104208601526101a08601516104408601526101c0860151858403601f19016104608701526131e984826130b0565b9350506101e08601516132086104808701826001600160a01b03169052565b50908501516001600160a01b039081166104a08601526102209095015190941692909301919091525090565b60006020828403121561324657600080fd5b813561055181612f94565b634e487b7160e01b600052604160045260246000fd5b60405161024081016001600160401b038111828210171561328a5761328a613251565b60405290565b60405160c081016001600160401b038111828210171561328a5761328a613251565b60405161010081016001600160401b038111828210171561328a5761328a613251565b6040516101a081016001600160401b038111828210171561328a5761328a613251565b60405161012081016001600160401b038111828210171561328a5761328a613251565b60405160e081016001600160401b038111828210171561328a5761328a613251565b604051601f8201601f191681016001600160401b038111828210171561336557613365613251565b604052919050565b60ff8116811461173a57600080fd5b8035612fb48161336d565b61ffff8116811461173a57600080fd5b8035612fb481613387565b600082601f8301126133b357600080fd5b6133bb6132d5565b806101a08401858111156133ce57600080fd5b845b818110156133f15780356133e381613387565b8452602093840193016133d0565b509095945050505050565b600082601f83011261340d57600080fd5b6134156132f8565b8061012084018581111561342857600080fd5b845b818110156133f157803561343d8161336d565b84526020938401930161342a565b60006001600160401b0382111561346457613464613251565b5060051b60200190565b600082601f83011261347f57600080fd5b8135602061349461348f8361344b565b61333d565b82815260059290921b840181019181810190868411156134b357600080fd5b8286015b848110156134d75780356134ca8161336d565b83529183019183016134b7565b509695505050505050565b60006001600160401b038211156134fb576134fb613251565b50601f01601f191660200190565b600082601f83011261351a57600080fd5b813561352861348f826134e2565b81815284602083860101111561353d57600080fd5b816020850160208301376000918101602001919091529392505050565b60006104c0828403121561356d57600080fd5b613575613267565b90506135808261337c565b815261358e60208301613397565b60208201526135a083604084016133a2565b60408201526101e06135b4848285016133fc565b60608301526103008301356001600160401b03808211156135d457600080fd5b6135e08683870161346e565b60808501526135f26103208601613397565b60a08501526136046103408601613397565b60c08501526136166103608601613397565b60e08501526103808501356101008501526103a08501356101208501526103c08501356101408501526103e08501356101608501526104008501356101808501526104208501356101a085015261044085013591508082111561367857600080fd5b5061368585828601613509565b6101c0840152506136996104608401612fa9565b908201526136aa6104808301612fa9565b6102008201526136bd6104a08301612fa9565b61022082015292915050565b600060c082840312156136db57600080fd5b6136e3613290565b90506136ee82613397565b81526136fc6020830161337c565b602082015260408201356001600160401b038082111561371b57600080fd5b6137278583860161346e565b6040840152606084013560608401526080840135608084015260a084013591508082111561375457600080fd5b5061376184828501613509565b60a08301525092915050565b60008060008060008060c0878903121561378657600080fd5b86356001600160401b038082111561379d57600080fd5b6137a98a838b0161355a565b975060208901359150808211156137bf57600080fd5b6137cb8a838b0161355a565b965060408901359150808211156137e157600080fd5b6137ed8a838b0161355a565b9550606089013591508082111561380357600080fd5b5061381089828a016136c9565b9350506080870135915061382660a08801612fa9565b90509295509295509295565b6000806040838503121561384557600080fd5b823561385081612f94565b915060208301356138608161336d565b809150509250929050565b60008060006060848603121561388057600080fd5b83359250602084013591506040840135612ff081612f94565b6000806000606084860312156138ae57600080fd5b83356001600160401b03808211156138c557600080fd5b6138d18783880161355a565b945060208601359150808211156138e757600080fd5b506138f48682870161346e565b925050604084013590509250925092565b600081518084526020808501945080840160005b8381101561308157815161ffff1687529582019590820190600101613919565b6020815261394e60208201835161ffff169052565b600060208301516139626040840182613028565b50604083015160ff908116610160840152606084015116610180830152608083015161ffff166101a083015260a08301516102006101c084018190526139ac610220850183613905565b915060c0850151601f1980868503016101e08701526139cb848361304e565b935060e08701519150808685030183870152506139e8838261304e565b9695505050505050565b600080600060608486031215613a0757600080fd5b8335613a1281612f94565b925060208401356001600160401b03811115613a2d57600080fd5b613a398682870161355a565b9250506040840135612ff081612f94565b60008060408385031215613a5d57600080fd5b8235613a6881612f94565b9150602083013561386081612f94565b60008060008060808587031215613a8e57600080fd5b8435935060208501359250604085013591506060850135613aae81612f94565b939692955090935050565b600060208284031215613acb57600080fd5b5051919050565b6001600160a01b039390931683526020830191909152604082015260600190565b8051612fb48161336d565b8051612fb481613387565b600082601f830112613b1a57600080fd5b613b226132d5565b806101a0840185811115613b3557600080fd5b845b818110156133f1578051613b4a81613387565b845260209384019301613b37565b600082601f830112613b6957600080fd5b613b716132f8565b80610120840185811115613b8457600080fd5b845b818110156133f1578051613b998161336d565b845260209384019301613b86565b600082601f830112613bb857600080fd5b81516020613bc861348f8361344b565b82815260059290921b84018101918181019086841115613be757600080fd5b8286015b848110156134d7578051613bfe8161336d565b8352918301918301613beb565b6000613c1961348f846134e2565b9050828152838383011115613c2d57600080fd5b61055183602083018461308c565b600082601f830112613c4c57600080fd5b61055183835160208501613c0b565b8051612fb481612f94565b60006020808385031215613c7957600080fd5b82516001600160401b0380821115613c9057600080fd5b818501915085601f830112613ca457600080fd5b8151613cb261348f8261344b565b81815260059190911b83018401908481019088831115613cd157600080fd5b8585015b83811015613e6657805185811115613ced5760008081fd5b86016104c0818c03601f1901811315613d065760008081fd5b613d0e613267565b613d198a8401613af3565b81526040613d28818501613afe565b8b8301526060613d3a8f828701613b09565b828401526102009150613d4f8f838701613b58565b9083015261032084015189811115613d675760008081fd5b613d758f8d83880101613ba7565b608084015250613d886103408501613afe565b60a0830152613d9a6103608501613afe565b60c0830152613dac6103808501613afe565b60e08301526103a08401516101008301526103c08401516101208301526103e08401516101408301526104008401516101608301526104208401516101808301526104408401516101a083015261046084015189811115613e0d5760008081fd5b613e1b8f8d83880101613c3b565b6101c084015250613e2f6104808501613c5b565b6101e0830152613e426104a08501613c5b565b90820152613e51838301613c5b565b61022082015285525050918601918601613cd5565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613eb157613eb1613e89565b5060010190565b600060e08284031215613eca57600080fd5b82601f830112613ed957600080fd5b613ee161331b565b8060e0840185811115613ef357600080fd5b845b818110156133f1578051613f088161336d565b845260209384019301613ef5565b634e487b7160e01b600052602160045260246000fd5b8082018082111561202c5761202c613e89565b600060208284031215613f5157600080fd5b81516105518161336d565b600060208284031215613f6e57600080fd5b815161055181613387565b85815284602082015260a060408201526000613f9860a08301866130b0565b905083606083015261ffff831660808301529695505050505050565b60208101600d8310613fc857613fc8613f16565b91905290565b600082601f830112613fdf57600080fd5b604051606081018181106001600160401b038211171561400157614001613251565b60405280606084018581111561401657600080fd5b845b8181101561403957805161402b81613387565b835260209283019201614018565b509195945050505050565b6000806080838503121561405757600080fd5b82516001600160401b038082111561406e57600080fd5b8185019150601f868184011261408357600080fd5b61408b6132b2565b8061010085018981111561409e57600080fd5b855b818110156140ea578051868111156140b85760008081fd5b87018581018c136140c95760008081fd5b805160206140da8e83838601613c0b565b87529095019450506020016140a0565b505080965050505050506141018460208501613fce565b90509250929050565b85815284602082015260a06040820152600061412960a08301866130b0565b606083019490945250608001529392505050565b805163ffffffff81168114612fb457600080fd5b80516001600160401b0381168114612fb457600080fd5b6000610100828403121561417b57600080fd5b6141836132b2565b61418c8361413d565b8152602083015180151581146141a157600080fd5b60208201526141b260408401613c5b565b60408201526141c36060840161413d565b60608201526141d460808401613c5b565b60808201526141e560a08401614151565b60a08201526141f660c08401614151565b60c082015260e083015160e08201528091505092915050565b808202811582820484141761202c5761202c613e89565b634e487b7160e01b600052601260045260246000fd5b60008261424b5761424b614226565b500490565b60006040828403121561426257600080fd5b82601f83011261427157600080fd5b604051604081018181106001600160401b038211171561429357614293613251565b80604052508060408401858111156142aa57600080fd5b845b818110156140395780516142bf81613387565b8352602092830192016142ac565b600060e082840312156142df57600080fd5b82601f8301126142ee57600080fd5b6142f661331b565b8060e084018581111561430857600080fd5b845b818110156133f157805161431d81613387565b84526020938401930161430a565b6020810160098310613fc857613fc8613f16565b8181038181111561202c5761202c613e89565b600061ffff80831681810361436957614369613e89565b6001019392505050565b60ff828116828216039081111561202c5761202c613e89565b600060ff821660ff81036143a2576143a2613e89565b60010192915050565b85815284602082015260a0604082015260006143ca60a08301866130b0565b60ff94909416606083015250608001529392505050565b6000826143f0576143f0614226565b50069056fea164736f6c6343000811000a
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.