Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x1db28405b387390453d156a93c4edffe422c7745b2b552e5ce5e9d4bc0e51630 | 14953344 | 38 days 5 hrs ago | 0x68d675bdb215f276a666eaf905ddba739021d1b3 | Contract Creation | 0 AVAX |
[ Download CSV Export ]
Contract Name:
AscendMembershipHelper
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; contract Pool is Ownable { IERC20 public ASCEND; constructor(address _ASCEND) { ASCEND = IERC20(_ASCEND); } function pay(address _to, uint _amount) external onlyOwner returns (bool) { return ASCEND.transfer(_to, _amount); } } interface AscendMembershipManager { function totalPrice(uint256 amount, address from) external view returns(uint256); function createNode(address account) external; function claim(address account, uint256 _id) external returns (uint); function getTaxFeeAscend(address from) external view returns (uint256); function getTaxFeePlatinum() external view returns (uint256); function getTaxFeeInfinite() external view returns (uint256); function getTaxFeeMeta(address from) external view returns (uint256); function getTaxFeeBase() external view returns (uint256); function getTaxFeeTreasury() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function migrateNodes( uint64[] memory _claims, address _to) external; function getMembershipsOf(address _account) external view returns (uint256[] memory); } interface AscendMembershipManagerV1 { function ownerOf(uint256 tokenId) external view returns (address); function getClaimOf(uint256 _id) external view returns (uint64); function transferFrom(address from, address to, uint256 tokenId) external; function balanceOf(address owner) external view returns (uint256 balance); function getMembershipsOf(address _account) external view returns (uint256[] memory); } interface PlatinumManager is IERC20 { function getPlatinumsOf(address _account) external view returns (uint256[] memory); function claim(address account, uint256 _id) external returns (uint); function nodeAscendMembershipPrice() external returns (uint256); } interface InfiniteManager is IERC20 { function getInfinitesOf(address _account) external view returns (uint256[] memory); function claim(address account, uint256 _id) external returns (uint); function nodeAscendMembershipPrice() external returns (uint256); function nodePlatinumPrice() external returns (uint256); } interface MetaManager is IERC20 { function getMetasOf(address _account) external view returns (uint256[] memory); function claim(address account, uint256 _id) external returns (uint); function nodeAscendMembershipPrice() external returns (uint256); function nodeInfinitePrice() external returns (uint256); } interface RewardsCalculator { function calculateAllRewards(address from) external view returns (uint); } contract AscendMembershipHelper is Ownable { IERC20 public ASCEND; AscendMembershipManager public amsManager; PlatinumManager public platinumManager; InfiniteManager public infiniteManager; MetaManager public metaManager; AscendMembershipManagerV1 public amsManagerV1; RewardsCalculator public calculator; address public metaFundWallet; address public treasuryWallet; address public liquidityWallet; Pool public pool; address public deadAddress = 0x000000000000000000000000000000000000dEaD; uint claimFeePrecision = 1000; uint public swapThreshold = 10; //upgradeable uint public maxWalletL1 = 30; //upgradeable uint public maxWalletL2 = 40; //upgradeable uint public maxWalletL3 = 50; //upgradeable uint public maxWalletL4 = 80; //upgradeable uint public maxTX = 20; //upgradeable uint256 maxtTokens = 20000000; using SafeMath for uint; using SafeMath for uint256; struct NodeRatios { uint16 poolFee; uint16 liquidityFee; uint16 treasuryFee; uint16 total; } NodeRatios public _nodeRatios = NodeRatios({ poolFee: 75, //rewards liquidityFee: 20, //liquidity treasuryFee: 5, //treasury total: 100 }); struct ClaimRatios { uint16 poolClaimFee; uint16 treasuryFee; uint16 metaFundFee; uint16 total; } ClaimRatios public _claimRatios = ClaimRatios({ poolClaimFee: 80, treasuryFee: 15, metaFundFee: 5, total: 100 }); struct ClaimRatiosWhale { uint16 poolClaimFee; uint16 treasuryFee; uint16 metaFundFee; uint16 liquidity; uint16 total; } ClaimRatiosWhale public _claimRatiosWhale = ClaimRatiosWhale({ poolClaimFee: 30, treasuryFee: 50, metaFundFee: 10, liquidity: 10, total: 100 }); event ClaimAms(address from, uint256 amount); event ClaimPlatinum(address from, uint256 amount); event ClaimInfinite(address from, uint256 amount); event ClaimMeta(address from, uint256 amount); event CreateMultipleAms(address from, uint amount); event CreateMultipleAmsRewards(address from, uint amount); event ClaimAll(address from, uint256 amount); constructor( address _amsManager, address _ASCEND, address _treasuryWallet, address _metaFundWallet, address _liquidityWallet) { amsManager = AscendMembershipManager(_amsManager); metaFundWallet = _metaFundWallet; treasuryWallet = _treasuryWallet; liquidityWallet = _liquidityWallet; ASCEND = IERC20(_ASCEND); pool = new Pool(_ASCEND); } function setAmsManagerV1(address _amsManagerV1 ) external onlyOwner { amsManagerV1 = AscendMembershipManagerV1(_amsManagerV1); } function setCalculator(address _calculator ) external onlyOwner { calculator = RewardsCalculator(_calculator); } function setManagers(address _amsManager, address _platinumMembershipManager, address _InfiniteManager, address _MetaManager) external onlyOwner { amsManager = AscendMembershipManager(_amsManager); platinumManager = PlatinumManager(_platinumMembershipManager); infiniteManager = InfiniteManager(_InfiniteManager); metaManager = MetaManager(_MetaManager); } function updatePoolAddress(address _pool) external onlyOwner { pool.pay(address(owner()), ASCEND.balanceOf(address(pool))); pool = new Pool(_pool); } function updateMaxWalletLevels(uint256 _maxWalletL1, uint256 _maxWalletL2, uint256 _maxWalletL3, uint256 _maxWalletL4) external onlyOwner { maxWalletL1 = _maxWalletL1; maxWalletL2 = _maxWalletL2; maxWalletL3 = _maxWalletL3; maxWalletL4 = _maxWalletL4; } function updateSwapThreshold(uint256 _swapThreshold) external onlyOwner { swapThreshold = _swapThreshold; } function updateMaxTX(uint256 _maxTX) external onlyOwner { maxTX = _maxTX; } function updateMetaFundWallet(address payable _metaFundWallet) external onlyOwner { metaFundWallet = _metaFundWallet; } function updateTreasuryWallet(address payable _treasuryWallet) external onlyOwner { treasuryWallet = _treasuryWallet; } function updateLiquidityWallet(address payable _liquidityWallet) external onlyOwner { liquidityWallet = _liquidityWallet; } function setNodeRatios(uint16 _poolFee, uint16 _liquidityFee,uint16 _treasuryFee) external onlyOwner { _nodeRatios.poolFee = _poolFee; _nodeRatios.liquidityFee = _liquidityFee; _nodeRatios.treasuryFee = _treasuryFee; _nodeRatios.total = _poolFee + _liquidityFee + _treasuryFee; } function setClaimRatios(uint16 _poolClaimFee, uint16 _treasuryFee, uint16 _metaFundFee) external onlyOwner { _claimRatios.poolClaimFee = _poolClaimFee; _claimRatios.treasuryFee = _treasuryFee; _claimRatios.metaFundFee = _metaFundFee; _claimRatios.total = _poolClaimFee + _metaFundFee + _treasuryFee; } function setClaimRatiosWhales(uint16 _poolClaimFee, uint16 _treasuryFee, uint16 _metaFundFee, uint16 _liquidity) external onlyOwner { _claimRatiosWhale.poolClaimFee = _poolClaimFee; _claimRatiosWhale.treasuryFee = _treasuryFee; _claimRatiosWhale.metaFundFee = _metaFundFee; _claimRatiosWhale.liquidity = _liquidity; } function getMaxMembershipsOf(address _address) public view returns (uint256) { if (metaManager.balanceOf(_address) > 0) { return maxWalletL4; } else if (infiniteManager.balanceOf(_address) > 0) { return maxWalletL3; } if (platinumManager.balanceOf(_address) > 0) { return maxWalletL2; } else { return maxWalletL1; } } function contractSwap(uint256 numTokensToSwap) internal { if (_nodeRatios.total == 0) { return; } uint256 amountToRewardsPool = (numTokensToSwap * _nodeRatios.poolFee) / (_nodeRatios.total); if(amountToRewardsPool > 0) { ASCEND.transfer(address(pool), amountToRewardsPool); } uint256 amountToTreasury = (numTokensToSwap * _nodeRatios.treasuryFee) / (_nodeRatios.total); if(amountToTreasury > 0) { ASCEND.transfer(treasuryWallet, amountToTreasury); } uint256 amountToLiquidity = (numTokensToSwap * _nodeRatios.liquidityFee) / (_nodeRatios.total); if(amountToLiquidity > 0) { ASCEND.transfer(liquidityWallet, amountToTreasury); } } function migrateNodes(uint64[] memory userNodes) public { address sender = _msgSender(); uint64[] memory _claims = new uint64[](userNodes.length); require(amsManager.balanceOf(sender) + userNodes.length <= maxWalletL4, "HELPER: Exceeds max memberships per wallet"); for (uint256 i = 0; i < userNodes.length; i++) { require(sender == amsManagerV1.ownerOf(userNodes[i]), "You are not the owner of the Node" ); _claims[i] = amsManagerV1.getClaimOf(userNodes[i]); amsManagerV1.transferFrom(_msgSender(), address(deadAddress), userNodes[i] ); } amsManager.migrateNodes(_claims, sender); } function claimRewardsForCompoundAms(address sender, uint256 nodePrice ) public returns (uint256) { return claimRewardsForCompound(sender, nodePrice, 0, 0, 0); } function claimRewardsForCompoundPlatinum(address sender, uint256 nodePrice ) public returns (uint256) { uint256 ams = platinumManager.nodeAscendMembershipPrice(); return claimRewardsForCompound(sender, nodePrice, ams, 0, 0); } function claimRewardsForCompoundInfinite(address sender, uint256 nodePrice ) public returns (uint256) { uint256 ams = infiniteManager.nodeAscendMembershipPrice(); uint256 platinum = infiniteManager.nodePlatinumPrice(); return claimRewardsForCompound(sender, nodePrice, ams, platinum, 0); } function claimRewardsForCompoundMeta(address sender, uint256 nodePrice ) public returns (uint256) { uint256 ams = metaManager.nodeAscendMembershipPrice(); uint256 infinite = metaManager.nodeInfinitePrice(); return claimRewardsForCompound(sender, nodePrice, ams, 0, infinite); } function claimRewardsForCompound(address sender, uint256 nodePrice, uint256 amsPrice, uint256 platinumPrice, uint256 infinitePrice) internal returns (uint256) { uint256 rewardAmount = 0; uint8 taxLayer = 1; uint256[] memory ams = amsManager.getMembershipsOf(sender); for (uint256 i = 0; i < ams.length; i++) { if (rewardAmount < nodePrice || i < amsPrice){ rewardAmount = rewardAmount + amsManager.claim(sender, ams[i]); } } if (rewardAmount < nodePrice || platinumPrice > 0){ uint256[] memory platinums = platinumManager.getPlatinumsOf(sender); for (uint256 i = 0; i < platinums.length; i++) { if (rewardAmount < nodePrice || i < platinumPrice ){ rewardAmount = rewardAmount + platinumManager.claim(sender, platinums[i]); } } taxLayer = 2; } if (rewardAmount < nodePrice || infinitePrice > 0){ uint256[] memory infinites = infiniteManager.getInfinitesOf(sender); for (uint256 i = 0; i < infinites.length; i++) { if (rewardAmount < nodePrice || i < infinitePrice ){ rewardAmount = rewardAmount + infiniteManager.claim(sender, infinites[i]); } } taxLayer = 3; } if (rewardAmount < nodePrice ){ uint256[] memory metas = metaManager.getMetasOf(sender); for (uint256 i = 0; i < metas.length; i++) { if (rewardAmount < nodePrice ){ rewardAmount = rewardAmount + metaManager.claim(sender, metas[i]); } } taxLayer = 4; } emit ClaimAll(sender, rewardAmount); if (rewardAmount > nodePrice){ uint256 whaleTax = 0; if (taxLayer == 1){ whaleTax = amsManager.getTaxFeeAscend(sender); } else if (taxLayer == 2){ whaleTax = amsManager.getTaxFeePlatinum(); } else if (taxLayer == 3){ whaleTax = amsManager.getTaxFeeInfinite(); } else { whaleTax = amsManager.getTaxFeeMeta(sender); } uint256 differenceA = rewardAmount - nodePrice; splitRewards(sender, differenceA, whaleTax); } return rewardAmount; } function createMultipleNodeWithRewards(uint amount) public { require(amount <= maxTX, "HELPER: Exceeds max memberships per transaction"); address sender = _msgSender(); require(sender != address(0), "HELPER: Creation from the zero address"); require(amsManager.totalPrice( amount, _msgSender()) > 0, "HELPER: amsManager is not working"); uint256 nodePrice = amsManager.totalPrice( amount, _msgSender()) * 10 ** 18; require(amsManager.balanceOf(sender) + amount <= getMaxMembershipsOf(sender), "HELPER: Exceeds max wallet amount"); uint256 allRewards = calculator.calculateAllRewards(sender) * 10 ** 18; require(allRewards.add(ASCEND.balanceOf(sender)) >= nodePrice, "HELPER: Balance too low for creation."); require(ASCEND.allowance(sender, address(this)) + allRewards >= nodePrice,"HELPER: Not authorized to spend ASND"); // Claim nodes AMS uint256 rewardsAmount = claimRewardsForCompoundAms( sender, nodePrice ); if (nodePrice > rewardsAmount ){ uint256 difference = nodePrice - rewardsAmount; ASCEND.transferFrom(sender, address(this), difference); } // mint the AMS for (uint256 i = 0; i < amount; i++) { amsManager.createNode(sender); } emit CreateMultipleAmsRewards(sender, amount); } function createMultipleNodeWithTokens(uint amount) public { require(amount <= maxTX, "HELPER: Exceeds max memberships per transaction"); address sender = _msgSender(); require(sender != address(0), "HELPER: Creation from the zero address"); require(amsManager.totalPrice( amount, _msgSender()) > 0, "HELPER: amsManager is not working"); uint256 nodePrice = amsManager.totalPrice( amount, _msgSender()) * 10 ** 18; require(getMaxMembershipsOf(sender) > 0, "HELPER: Incorrect getMaxMembershipsOf, check the configuration"); require(ASCEND.balanceOf(sender) >= nodePrice, "HELPER: Balance too low for creation."); require(amsManager.balanceOf(sender) + amount <= getMaxMembershipsOf(sender), "HELPER: Exceeds max wallet amount"); require(ASCEND.allowance(sender, address(this)) >= nodePrice,"HELPER: Insuficiente allowance"); ASCEND.transferFrom(_msgSender(), address(this), nodePrice); for (uint256 i = 0; i < amount; i++) { amsManager.createNode(sender); } if ((ASCEND.balanceOf(address(this)) > swapThreshold)) { uint256 contractTokenBalance = ASCEND.balanceOf(address(this)); contractSwap(contractTokenBalance); } emit CreateMultipleAms(sender, amount); } function calculateRewardsAmsAfterTaxes(address sender, uint256 rewardAmount ) public view returns (uint256) { uint256 whaleTax = amsManager.getTaxFeeAscend(sender); uint256 feeAmount = rewardAmount.mul(whaleTax).div(claimFeePrecision); uint256 feeAmountBase = rewardAmount.mul(amsManager.getTaxFeeBase()).div(claimFeePrecision); uint256 feeAmountTreasury = rewardAmount.mul(amsManager.getTaxFeeTreasury()).div(claimFeePrecision); return rewardAmount -feeAmount -feeAmountBase -feeAmountTreasury; } function calculateRewardsPlatinumAfterTaxes(uint256 rewardAmount ) public view returns (uint256) { uint256 whaleTax = amsManager.getTaxFeePlatinum(); uint256 feeAmount = rewardAmount.mul(whaleTax).div(claimFeePrecision); uint256 feeAmountBase = rewardAmount.mul(amsManager.getTaxFeeBase()).div(claimFeePrecision); uint256 feeAmountTreasury = rewardAmount.mul(amsManager.getTaxFeeTreasury()).div(claimFeePrecision); return rewardAmount -feeAmount -feeAmountBase -feeAmountTreasury; } function calculateRewardaInfiniteAfterTaxes( uint256 rewardAmount ) public view returns (uint256) { uint256 whaleTax = amsManager.getTaxFeeInfinite(); uint256 feeAmount = rewardAmount.mul(whaleTax).div(claimFeePrecision); uint256 feeAmountBase = rewardAmount.mul(amsManager.getTaxFeeBase()).div(claimFeePrecision); uint256 feeAmountTreasury = rewardAmount.mul(amsManager.getTaxFeeTreasury()).div(claimFeePrecision); return rewardAmount -feeAmount -feeAmountBase -feeAmountTreasury; } function calculateRewardaMetaAfterTaxes(address sender, uint256 rewardAmount ) public view returns (uint256) { uint256 whaleTax = amsManager.getTaxFeeMeta(sender); uint256 feeAmount = rewardAmount.mul(whaleTax).div(claimFeePrecision); uint256 feeAmountBase = rewardAmount.mul(amsManager.getTaxFeeBase()).div(claimFeePrecision); uint256 feeAmountTreasury = rewardAmount.mul(amsManager.getTaxFeeTreasury()).div(claimFeePrecision); return rewardAmount -feeAmount -feeAmountBase -feeAmountTreasury; } function splitRewards(address sender, uint256 rewardAmount, uint256 whaleTax ) internal { uint256 feeAmount = rewardAmount.mul(whaleTax).div(claimFeePrecision); uint256 feeAmountBase = rewardAmount.mul(amsManager.getTaxFeeBase()).div(claimFeePrecision); uint256 feeAmountTreasury = rewardAmount.mul(amsManager.getTaxFeeTreasury()).div(claimFeePrecision); uint256 realReward = rewardAmount -feeAmount -feeAmountBase -feeAmountTreasury; pool.pay(sender, realReward); uint256 amountToMetaFundWallet = (feeAmountBase * _claimRatios.metaFundFee) / (_claimRatios.total) + (feeAmount * _claimRatiosWhale.metaFundFee) / (_claimRatiosWhale.total); pool.pay(metaFundWallet, amountToMetaFundWallet); uint256 amountToCollectTreasury = (feeAmountBase * _claimRatios.treasuryFee) / (_claimRatios.total) + (feeAmount * _claimRatiosWhale.treasuryFee) / (_claimRatiosWhale.total) + feeAmountTreasury; pool.pay(treasuryWallet, amountToCollectTreasury); uint256 amountToLiquidityWallet = (feeAmount * _claimRatiosWhale.liquidity) / (_claimRatiosWhale.total); pool.pay(liquidityWallet, amountToLiquidityWallet); } function claimAms(uint64[] calldata _nodes) public { address sender = _msgSender(); require(sender != address(0), "HELPER: creation from the zero address"); uint256 rewardAmount = 0; for (uint256 i = 0; i < _nodes.length; i++) { rewardAmount = rewardAmount + amsManager.claim(_msgSender(), _nodes[i]); } require(rewardAmount > 0,"HELPER: You don't have enough reward to cash out"); uint256 whaleTax = amsManager.getTaxFeeAscend(sender); require(whaleTax > 0, "Helper: Error, invalid Claim Fee Tax"); splitRewards(sender, rewardAmount, whaleTax); emit ClaimAms(sender, rewardAmount); } function claimPlatinum(uint64[] calldata _nodes) public { address sender = _msgSender(); require(sender != address(0), "HELPER: creation from the zero address"); uint256 rewardAmount = 0; for (uint256 i = 0; i < _nodes.length; i++) { rewardAmount = rewardAmount + platinumManager.claim(_msgSender(), _nodes[i]); } require(rewardAmount > 0,"HELPER: You don't have enough reward to cash out"); uint256 whaleTax = amsManager.getTaxFeePlatinum(); require(whaleTax > 0, "Helper: Error, invalid Claim Fee Tax"); splitRewards(sender, rewardAmount, whaleTax); emit ClaimPlatinum(sender, rewardAmount); } function claimInfinite(uint64[] calldata _nodes) public { address sender = _msgSender(); require(sender != address(0), "HELPER: creation from the zero address"); uint256 rewardAmount = 0; for (uint256 i = 0; i < _nodes.length; i++) { rewardAmount = rewardAmount + infiniteManager.claim(_msgSender(), _nodes[i]); } require(rewardAmount > 0,"HELPER: You don't have enough reward to cash out"); uint256 whaleTax = amsManager.getTaxFeeInfinite(); require(whaleTax > 0, "Helper: Error, invalid Claim Fee Tax"); splitRewards(sender, rewardAmount, whaleTax); emit ClaimInfinite(sender, rewardAmount); } function claimMeta(uint64[] calldata _nodes) public { address sender = _msgSender(); require(sender != address(0), "HELPER: creation from the zero address"); uint256 rewardAmount = 0; for (uint256 i = 0; i < _nodes.length; i++) { rewardAmount = rewardAmount + metaManager.claim(_msgSender(), _nodes[i]); } require(rewardAmount > 0,"HELPER: You don't have enough reward to cash out"); uint256 whaleTax = amsManager.getTaxFeeMeta(sender); require(whaleTax > 0, "Helper: Error, invalid Claim Fee Tax"); splitRewards(sender, rewardAmount, whaleTax); emit ClaimMeta(sender, rewardAmount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts 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/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_amsManager","type":"address"},{"internalType":"address","name":"_ASCEND","type":"address"},{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_metaFundWallet","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimAms","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimInfinite","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimMeta","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimPlatinum","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CreateMultipleAms","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CreateMultipleAmsRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"ASCEND","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_claimRatios","outputs":[{"internalType":"uint16","name":"poolClaimFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"metaFundFee","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_claimRatiosWhale","outputs":[{"internalType":"uint16","name":"poolClaimFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"metaFundFee","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_nodeRatios","outputs":[{"internalType":"uint16","name":"poolFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amsManager","outputs":[{"internalType":"contract AscendMembershipManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amsManagerV1","outputs":[{"internalType":"contract AscendMembershipManagerV1","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"calculateRewardaInfiniteAfterTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"calculateRewardaMetaAfterTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"calculateRewardsAmsAfterTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"calculateRewardsPlatinumAfterTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculator","outputs":[{"internalType":"contract RewardsCalculator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64[]","name":"_nodes","type":"uint64[]"}],"name":"claimAms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64[]","name":"_nodes","type":"uint64[]"}],"name":"claimInfinite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64[]","name":"_nodes","type":"uint64[]"}],"name":"claimMeta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64[]","name":"_nodes","type":"uint64[]"}],"name":"claimPlatinum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nodePrice","type":"uint256"}],"name":"claimRewardsForCompoundAms","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nodePrice","type":"uint256"}],"name":"claimRewardsForCompoundInfinite","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nodePrice","type":"uint256"}],"name":"claimRewardsForCompoundMeta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nodePrice","type":"uint256"}],"name":"claimRewardsForCompoundPlatinum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"createMultipleNodeWithRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"createMultipleNodeWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getMaxMembershipsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infiniteManager","outputs":[{"internalType":"contract InfiniteManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletL1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletL2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletL3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletL4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metaFundWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metaManager","outputs":[{"internalType":"contract MetaManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64[]","name":"userNodes","type":"uint64[]"}],"name":"migrateNodes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platinumManager","outputs":[{"internalType":"contract PlatinumManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"contract Pool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_amsManagerV1","type":"address"}],"name":"setAmsManagerV1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_calculator","type":"address"}],"name":"setCalculator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_poolClaimFee","type":"uint16"},{"internalType":"uint16","name":"_treasuryFee","type":"uint16"},{"internalType":"uint16","name":"_metaFundFee","type":"uint16"}],"name":"setClaimRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_poolClaimFee","type":"uint16"},{"internalType":"uint16","name":"_treasuryFee","type":"uint16"},{"internalType":"uint16","name":"_metaFundFee","type":"uint16"},{"internalType":"uint16","name":"_liquidity","type":"uint16"}],"name":"setClaimRatiosWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_amsManager","type":"address"},{"internalType":"address","name":"_platinumMembershipManager","type":"address"},{"internalType":"address","name":"_InfiniteManager","type":"address"},{"internalType":"address","name":"_MetaManager","type":"address"}],"name":"setManagers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_poolFee","type":"uint16"},{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_treasuryFee","type":"uint16"}],"name":"setNodeRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_liquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTX","type":"uint256"}],"name":"updateMaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletL1","type":"uint256"},{"internalType":"uint256","name":"_maxWalletL2","type":"uint256"},{"internalType":"uint256","name":"_maxWalletL3","type":"uint256"},{"internalType":"uint256","name":"_maxWalletL4","type":"uint256"}],"name":"updateMaxWalletLevels","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_metaFundWallet","type":"address"}],"name":"updateMetaFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"updatePoolAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600c805461dead6001600160a01b03199091161790556103e8600d55600a600e819055601e600f81815560286010556032601181905560506012819055601460138190556301312d008155604b60805260a052600560c0819052606460e0819052601580546001600160401b0319908116666400050014004b179091556101009390935261012094909452610140526101608390526016805490911666640005000f0050179055610220604052610180929092526101a0919091526101c08290526101e09190915261020052601780546001600160501b0319166864000a000a0032001e179055348015620000f357600080fd5b50604051620057e5380380620057e583398101604081905262000116916200025c565b6200012133620001e1565b600280546001600160a01b03199081166001600160a01b0388811691909117909255600880548216858416179055600980548216868416179055600a80548216848416179055600180549091169186169190911790556040518490620001879062000231565b6001600160a01b039091168152602001604051809103906000f080158015620001b4573d6000803e3d6000fd5b50600b80546001600160a01b0319166001600160a01b039290921691909117905550620002cb9350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61048f806200535683390190565b80516001600160a01b03811681146200025757600080fd5b919050565b600080600080600060a0868803121562000274578081fd5b6200027f866200023f565b94506200028f602087016200023f565b93506200029f604087016200023f565b9250620002af606087016200023f565b9150620002bf608087016200023f565b90509295509295909350565b61507b80620002db6000396000f3fe60806040523480156200001157600080fd5b50600436106200036a5760003560e01c8063985a64be11620001dc578063cc274b291162000119578063e021ca2b11620000af578063e69c6c6c1162000086578063e69c6c6c146200084c578063ebae7c1c1462000863578063f2fde38b146200086d578063fba712bd146200088457600080fd5b8063e021ca2b1462000814578063e37ba8f9146200082b578063e56b9101146200084257600080fd5b8063d00f9db111620000f0578063d00f9db114620007cb578063d188026f14620007e2578063d469801614620007f6578063dc4c1441146200080a57600080fd5b8063cc274b291462000789578063ce3e39c014620007a0578063cf88cba714620007b457600080fd5b8063ae6ea0f2116200018f578063c01ba4521162000166578063c01ba45214620006e3578063c166ed7f14620006fa578063c50e510f1462000704578063c53468f0146200077257600080fd5b8063ae6ea0f2146200069e578063b501b0f214620006b5578063bfbcc5c514620006cc57600080fd5b8063985a64be14620006205780639a5f27a414620006345780639c47987614620006485780639c8b4066146200065f5780639e04665b1462000673578063ae3beb48146200068a57600080fd5b80635fa9232611620002ab5780637bf7c08f116200025e57806385bcf427116200023557806385bcf42714620005c95780638c21eb8b14620005e05780638da5cb5b14620005f75780638f66519a146200060957600080fd5b80637bf7c08f1462000584578063809d458d146200059b57806382028d3d14620005b257600080fd5b80635fa923261462000507578063600bbf4b146200051e5780636e3d6a29146200053557806370d620dd146200054c578063715018a6146200056357806379d464e0146200056d57600080fd5b8063295f6fe011620003215780634626402b11620002f85780634626402b14620004985780634fd9280614620004ac5780635c73de6914620004c35780635e58bea514620004da57600080fd5b8063295f6fe01462000451578063334070e5146200046a57806343195c53146200048157600080fd5b80630445b667146200036f57806316f0115b146200038c5780631abec10d14620003b95780631cb8eae114620003cd5780631e086ab4146200042957806327c8f835146200043d575b600080fd5b62000379600e5481565b6040519081526020015b60405180910390f35b600b54620003a0906001600160a01b031681565b6040516001600160a01b03909116815260200162000383565b600554620003a0906001600160a01b031681565b601554620003fa9061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800162000383565b600654620003a0906001600160a01b031681565b600c54620003a0906001600160a01b031681565b6200046862000462366004620045f9565b6200088e565b005b620004686200047b366004620045f9565b6200093b565b6200037962000492366004620043fa565b620009df565b600954620003a0906001600160a01b031681565b62000468620004bd36600462004358565b620009f9565b62000468620004d4366004620044c9565b62000a48565b601654620003fa9061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6200046862000518366004620044c9565b62000c71565b620004686200052f366004620044c9565b62000e8b565b62000468620005463660046200453d565b620010a6565b620004686200055d366004620044c9565b62001577565b6200046862001792565b620004686200057e3660046200469e565b620017cd565b6200037962000595366004620043fa565b62001ea4565b62000468620005ac36600462004358565b620020c6565b62000379620005c3366004620043fa565b62002115565b62000468620005da3660046200469e565b62002241565b62000468620005f136600462004396565b62002851565b6000546001600160a01b0316620003a0565b620004686200061a366004620046d0565b620028ce565b600354620003a0906001600160a01b031681565b600154620003a0906001600160a01b031681565b620004686200065936600462004642565b6200290f565b600454620003a0906001600160a01b031681565b62000379620006843660046200469e565b62002994565b600254620003a0906001600160a01b031681565b62000468620006af36600462004358565b62002b2f565b62000379620006c6366004620043fa565b62002b7e565b62000468620006dd3660046200469e565b62002caf565b62000379620006f4366004620043fa565b62002ce1565b6200037960115481565b6017546200073c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a00162000383565b620004686200078336600462004358565b62002d8a565b620004686200079a3660046200469e565b62002dd9565b600754620003a0906001600160a01b031681565b62000379620007c5366004620043fa565b62002e0b565b62000468620007dc36600462004358565b62002e42565b600854620003a0906001600160a01b031681565b600a54620003a0906001600160a01b031681565b6200037960105481565b620003796200082536600462004358565b62002fec565b620004686200083c36600462004358565b620031b4565b6200037960125481565b620003796200085d3660046200469e565b62003203565b6200037960135481565b620004686200087e36600462004358565b62003255565b62000379600f5481565b6000546001600160a01b03163314620008c45760405162461bcd60e51b8152600401620008bb906200497b565b60405180910390fd5b6016805461ffff838116600160201b0265ffff0000000019868316620100000263ffffffff199094169288169290921792909217161790558162000909828562004a9f565b62000915919062004a9f565b6016805461ffff92909216600160301b0261ffff60301b19909216919091179055505050565b6000546001600160a01b03163314620009685760405162461bcd60e51b8152600401620008bb906200497b565b6015805461ffff838116600160201b0265ffff0000000019868316620100000263ffffffff1990941692881692909217929092171617905580620009ad838562004a9f565b620009b9919062004a9f565b6015805461ffff92909216600160301b0261ffff60301b19909216919091179055505050565b6000620009f283836000806000620032f7565b9392505050565b6000546001600160a01b0316331462000a265760405162461bcd60e51b8152600401620008bb906200497b565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b338062000a695760405162461bcd60e51b8152600401620008bb90620049b0565b6000805b8381101562000b58576004546001600160a01b031663aad3ec963387878581811062000aa957634e487b7160e01b600052603260045260246000fd5b905060200201602081019062000ac0919062004702565b6040518363ffffffff1660e01b815260040162000adf92919062004759565b602060405180830381600087803b15801562000afa57600080fd5b505af115801562000b0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b359190620046b7565b62000b41908362004ac8565b91508062000b4f8162004b40565b91505062000a6d565b506000811162000b7c5760405162461bcd60e51b8152600401620008bb90620049f6565b600254604080516343cd87bd60e11b815290516000926001600160a01b03169163879b0f7a916004808301926020929190829003018186803b15801562000bc257600080fd5b505afa15801562000bd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bfd9190620046b7565b90506000811162000c225760405162461bcd60e51b8152600401620008bb90620047da565b62000c2f83838362003b96565b7f07ff3f19a76d17b016188d2c53de5bfdcba4a48da9faf298d27336929ca84ba7838360405162000c6292919062004740565b60405180910390a15050505050565b338062000c925760405162461bcd60e51b8152600401620008bb90620049b0565b6000805b8381101562000d81576003546001600160a01b031663aad3ec963387878581811062000cd257634e487b7160e01b600052603260045260246000fd5b905060200201602081019062000ce9919062004702565b6040518363ffffffff1660e01b815260040162000d0892919062004759565b602060405180830381600087803b15801562000d2357600080fd5b505af115801562000d38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d5e9190620046b7565b62000d6a908362004ac8565b91508062000d788162004b40565b91505062000c96565b506000811162000da55760405162461bcd60e51b8152600401620008bb90620049f6565b60025460408051630ec9893960e11b815290516000926001600160a01b031691631d931272916004808301926020929190829003018186803b15801562000deb57600080fd5b505afa15801562000e00573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e269190620046b7565b90506000811162000e4b5760405162461bcd60e51b8152600401620008bb90620047da565b62000e5883838362003b96565b7f23420beb252eef98f8f3cff048b51091f49958fa33e02abca345d489dc56f966838360405162000c6292919062004740565b338062000eac5760405162461bcd60e51b8152600401620008bb90620049b0565b6000805b8381101562000f9b576002546001600160a01b031663aad3ec963387878581811062000eec57634e487b7160e01b600052603260045260246000fd5b905060200201602081019062000f03919062004702565b6040518363ffffffff1660e01b815260040162000f2292919062004759565b602060405180830381600087803b15801562000f3d57600080fd5b505af115801562000f52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f789190620046b7565b62000f84908362004ac8565b91508062000f928162004b40565b91505062000eb0565b506000811162000fbf5760405162461bcd60e51b8152600401620008bb90620049f6565b600254604051632e0bb03b60e11b81526001600160a01b0384811660048301526000921690635c1760769060240160206040518083038186803b1580156200100657600080fd5b505afa1580156200101b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010419190620046b7565b905060008111620010665760405162461bcd60e51b8152600401620008bb90620047da565b6200107383838362003b96565b7fbe01cd6c099c2b1106ba5ca251127d550819c28fd9dabc7b81d28eeb241c891c838360405162000c6292919062004740565b805133906000906001600160401b03811115620010d357634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015620010fd578160200160208202803683370190505b5060125484516002546040516370a0823160e01b81526001600160a01b038781166004830152949550929391929116906370a082319060240160206040518083038186803b1580156200114f57600080fd5b505afa15801562001164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200118a9190620046b7565b62001196919062004ac8565b1115620011f95760405162461bcd60e51b815260206004820152602a60248201527f48454c5045523a2045786365656473206d6178206d656d6265727368697073206044820152691c195c881dd85b1b195d60b21b6064820152608401620008bb565b60005b8351811015620015095760065484516001600160a01b0390911690636352211e908690849081106200123e57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016200127291906001600160401b0391909116815260200190565b60206040518083038186803b1580156200128b57600080fd5b505afa158015620012a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012c6919062004377565b6001600160a01b0316836001600160a01b031614620013325760405162461bcd60e51b815260206004820152602160248201527f596f7520617265206e6f7420746865206f776e6572206f6620746865204e6f646044820152606560f81b6064820152608401620008bb565b60065484516001600160a01b0390911690638db7a464908690849081106200136a57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016200139e91906001600160401b0391909116815260200190565b60206040518083038186803b158015620013b757600080fd5b505afa158015620013cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013f2919062004721565b8282815181106200141357634e487b7160e01b600052603260045260246000fd5b6001600160401b03909216602092830291909101909101526006546001600160a01b03166323b872dd620014443390565b600c5487516001600160a01b03909116908890869081106200147657634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526001600160401b03166044820152606401600060405180830381600087803b158015620014da57600080fd5b505af1158015620014ef573d6000803e3d6000fd5b505050508080620015009062004b40565b915050620011fc565b5060025460405163ed93001b60e01b81526001600160a01b039091169063ed93001b906200153e90849086906004016200477b565b600060405180830381600087803b1580156200155957600080fd5b505af11580156200156e573d6000803e3d6000fd5b50505050505050565b3380620015985760405162461bcd60e51b8152600401620008bb90620049b0565b6000805b8381101562001687576005546001600160a01b031663aad3ec9633878785818110620015d857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190620015ef919062004702565b6040518363ffffffff1660e01b81526004016200160e92919062004759565b602060405180830381600087803b1580156200162957600080fd5b505af11580156200163e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016649190620046b7565b62001670908362004ac8565b9150806200167e8162004b40565b9150506200159c565b5060008111620016ab5760405162461bcd60e51b8152600401620008bb90620049f6565b600254604051633498962d60e11b81526001600160a01b03848116600483015260009216906369312c5a9060240160206040518083038186803b158015620016f257600080fd5b505afa15801562001707573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200172d9190620046b7565b905060008111620017525760405162461bcd60e51b8152600401620008bb90620047da565b6200175f83838362003b96565b7fae83c526af67cc58d349f67901b29ceca16a10d30134cac19f3d57f8293054c9838360405162000c6292919062004740565b6000546001600160a01b03163314620017bf5760405162461bcd60e51b8152600401620008bb906200497b565b620017cb600062004043565b565b601354811115620017f25760405162461bcd60e51b8152600401620008bb90620048aa565b3380620018135760405162461bcd60e51b8152600401620008bb906200481e565b6002546000906001600160a01b031663d443213884336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160206040518083038186803b1580156200186f57600080fd5b505afa15801562001884573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018aa9190620046b7565b11620018ca5760405162461bcd60e51b8152600401620008bb906200493a565b6002546000906001600160a01b031663d443213884336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160206040518083038186803b1580156200192657600080fd5b505afa1580156200193b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019619190620046b7565b6200197590670de0b6b3a764000062004b04565b90506000620019848362002fec565b11620019f95760405162461bcd60e51b815260206004820152603e60248201527f48454c5045523a20496e636f7272656374206765744d61784d656d626572736860448201527f6970734f662c20636865636b2074686520636f6e66696775726174696f6e00006064820152608401620008bb565b6001546040516370a0823160e01b81526001600160a01b038481166004830152839216906370a082319060240160206040518083038186803b15801562001a3f57600080fd5b505afa15801562001a54573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a7a9190620046b7565b101562001a9b5760405162461bcd60e51b8152600401620008bb9062004865565b62001aa68262002fec565b6002546040516370a0823160e01b81526001600160a01b038581166004830152869216906370a082319060240160206040518083038186803b15801562001aec57600080fd5b505afa15801562001b01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b279190620046b7565b62001b33919062004ac8565b111562001b545760405162461bcd60e51b8152600401620008bb90620048f9565b600154604051636eb1769f60e11b81526001600160a01b0384811660048301523060248301528392169063dd62ed3e9060440160206040518083038186803b15801562001ba057600080fd5b505afa15801562001bb5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bdb9190620046b7565b101562001c2b5760405162461bcd60e51b815260206004820152601e60248201527f48454c5045523a20496e737566696369656e746520616c6c6f77616e636500006044820152606401620008bb565b6001546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101849052606401602060405180830381600087803b15801562001c8c57600080fd5b505af115801562001ca1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cc79190620045d7565b5060005b8381101562001d4b57600254604051635c6dc21960e01b81526001600160a01b03858116600483015290911690635c6dc21990602401600060405180830381600087803b15801562001d1c57600080fd5b505af115801562001d31573d6000803e3d6000fd5b50505050808062001d429062004b40565b91505062001ccb565b50600e546001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801562001d9357600080fd5b505afa15801562001da8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dce9190620046b7565b111562001e64576001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801562001e1a57600080fd5b505afa15801562001e2f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e559190620046b7565b905062001e628162004093565b505b7f0139711d407463d58fafb0e3e8168ee71bea1359001848d82f628cb8220d2e81828460405162001e9792919062004740565b60405180910390a1505050565b600254604051633498962d60e11b81526001600160a01b03848116600483015260009283929116906369312c5a906024015b60206040518083038186803b15801562001eef57600080fd5b505afa15801562001f04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f2a9190620046b7565b9050600062001f51600d5462001f4a84876200430d90919063ffffffff16565b906200431b565b9050600062001ff2600d5462001f4a600260009054906101000a90046001600160a01b03166001600160a01b03166302504e396040518163ffffffff1660e01b815260040160206040518083038186803b15801562001faf57600080fd5b505afa15801562001fc4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fea9190620046b7565b88906200430d565b9050600062002093600d5462001f4a600260009054906101000a90046001600160a01b03166001600160a01b031663ddf928f96040518163ffffffff1660e01b815260040160206040518083038186803b1580156200205057600080fd5b505afa15801562002065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200208b9190620046b7565b89906200430d565b90508082620020a3858962004b26565b620020af919062004b26565b620020bb919062004b26565b979650505050505050565b6000546001600160a01b03163314620020f35760405162461bcd60e51b8152600401620008bb906200497b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600480546040805163bd075e5360e01b8152905160009384936001600160a01b03169263bd075e53928183019260209282900301818787803b1580156200215b57600080fd5b505af115801562002170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021969190620046b7565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663c6d08b776040518163ffffffff1660e01b8152600401602060405180830381600087803b158015620021eb57600080fd5b505af115801562002200573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022269190620046b7565b905062002238858584846000620032f7565b95945050505050565b601354811115620022665760405162461bcd60e51b8152600401620008bb90620048aa565b3380620022875760405162461bcd60e51b8152600401620008bb906200481e565b6002546000906001600160a01b031663d443213884336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160206040518083038186803b158015620022e357600080fd5b505afa158015620022f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200231e9190620046b7565b116200233e5760405162461bcd60e51b8152600401620008bb906200493a565b6002546000906001600160a01b031663d443213884336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160206040518083038186803b1580156200239a57600080fd5b505afa158015620023af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023d59190620046b7565b620023e990670de0b6b3a764000062004b04565b9050620023f68262002fec565b6002546040516370a0823160e01b81526001600160a01b038581166004830152869216906370a082319060240160206040518083038186803b1580156200243c57600080fd5b505afa15801562002451573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024779190620046b7565b62002483919062004ac8565b1115620024a45760405162461bcd60e51b8152600401620008bb90620048f9565b6007546040516379a59c1360e01b81526001600160a01b03848116600483015260009216906379a59c139060240160206040518083038186803b158015620024eb57600080fd5b505afa15801562002500573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025269190620046b7565b6200253a90670de0b6b3a764000062004b04565b6001546040516370a0823160e01b81526001600160a01b0386811660048301529293508492620025cb9216906370a082319060240160206040518083038186803b1580156200258857600080fd5b505afa1580156200259d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025c39190620046b7565b839062004329565b1015620025ec5760405162461bcd60e51b8152600401620008bb9062004865565b600154604051636eb1769f60e11b81526001600160a01b0385811660048301523060248301528492849291169063dd62ed3e9060440160206040518083038186803b1580156200263b57600080fd5b505afa15801562002650573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026769190620046b7565b62002682919062004ac8565b1015620026de5760405162461bcd60e51b8152602060048201526024808201527f48454c5045523a204e6f7420617574686f72697a656420746f207370656e64206044820152631054d39160e21b6064820152608401620008bb565b6000620026ec8484620009df565b9050808311156200279a57600062002705828562004b26565b6001546040516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018490529293509116906323b872dd90606401602060405180830381600087803b1580156200275c57600080fd5b505af115801562002771573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027979190620045d7565b50505b60005b858110156200281d57600254604051635c6dc21960e01b81526001600160a01b03878116600483015290911690635c6dc21990602401600060405180830381600087803b158015620027ee57600080fd5b505af115801562002803573d6000803e3d6000fd5b505050508080620028149062004b40565b9150506200279d565b507f3fed7e8ca1501a933da6ac2cddfdf5dd0f7a98ce971248905a57fd51fb352662848660405162000c6292919062004740565b6000546001600160a01b031633146200287e5760405162461bcd60e51b8152600401620008bb906200497b565b600280546001600160a01b039586166001600160a01b0319918216179091556003805494861694821694909417909355600480549285169284169290921790915560058054919093169116179055565b6000546001600160a01b03163314620028fb5760405162461bcd60e51b8152600401620008bb906200497b565b600f93909355601091909155601155601255565b6000546001600160a01b031633146200293c5760405162461bcd60e51b8152600401620008bb906200497b565b6017805461ffff95861663ffffffff199091161762010000948616949094029390931767ffffffff000000001916600160201b9285169290920261ffff60301b191691909117600160301b9190931602919091179055565b600080600260009054906101000a90046001600160a01b03166001600160a01b0316631d9312726040518163ffffffff1660e01b815260040160206040518083038186803b158015620029e657600080fd5b505afa158015620029fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a219190620046b7565b9050600062002a41600d5462001f4a84876200430d90919063ffffffff16565b9050600062002a9f600d5462001f4a600260009054906101000a90046001600160a01b03166001600160a01b03166302504e396040518163ffffffff1660e01b815260040160206040518083038186803b15801562001faf57600080fd5b9050600062002afd600d5462001f4a600260009054906101000a90046001600160a01b03166001600160a01b031663ddf928f96040518163ffffffff1660e01b815260040160206040518083038186803b1580156200205057600080fd5b9050808262002b0d858962004b26565b62002b19919062004b26565b62002b25919062004b26565b9695505050505050565b6000546001600160a01b0316331462002b5c5760405162461bcd60e51b8152600401620008bb906200497b565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663bd075e536040518163ffffffff1660e01b8152600401602060405180830381600087803b15801562002bd257600080fd5b505af115801562002be7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c0d9190620046b7565b90506000600560009054906101000a90046001600160a01b03166001600160a01b031663b2c4edde6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801562002c6257600080fd5b505af115801562002c77573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c9d9190620046b7565b905062002238858584600085620032f7565b6000546001600160a01b0316331462002cdc5760405162461bcd60e51b8152600401620008bb906200497b565b601355565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663bd075e536040518163ffffffff1660e01b8152600401602060405180830381600087803b15801562002d3557600080fd5b505af115801562002d4a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d709190620046b7565b905062002d82848483600080620032f7565b949350505050565b6000546001600160a01b0316331462002db75760405162461bcd60e51b8152600401620008bb906200497b565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462002e065760405162461bcd60e51b8152600401620008bb906200497b565b600e55565b600254604051632e0bb03b60e11b81526001600160a01b0384811660048301526000928392911690635c1760769060240162001ed6565b6000546001600160a01b0316331462002e6f5760405162461bcd60e51b8152600401620008bb906200497b565b600b546001600160a01b031663c407687662002e936000546001600160a01b031690565b600154600b546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a082319060240160206040518083038186803b15801562002edb57600080fd5b505afa15801562002ef0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f169190620046b7565b6040518363ffffffff1660e01b815260040162002f3592919062004740565b602060405180830381600087803b15801562002f5057600080fd5b505af115801562002f65573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f8b9190620045d7565b508060405162002f9b9062004337565b6001600160a01b039091168152602001604051809103906000f08015801562002fc8573d6000803e3d6000fd5b50600b80546001600160a01b0319166001600160a01b039290921691909117905550565b6005546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a082319060240160206040518083038186803b1580156200303657600080fd5b505afa1580156200304b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030719190620046b7565b11156200308057505060125490565b600480546040516370a0823160e01b81526001600160a01b0385811693820193909352600092909116906370a082319060240160206040518083038186803b158015620030cc57600080fd5b505afa158015620030e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031079190620046b7565b11156200311657505060115490565b6003546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a082319060240160206040518083038186803b1580156200315d57600080fd5b505afa15801562003172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031989190620046b7565b1115620031a757505060105490565b5050600f5490565b919050565b6000546001600160a01b03163314620031e15760405162461bcd60e51b8152600401620008bb906200497b565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663879b0f7a6040518163ffffffff1660e01b815260040160206040518083038186803b158015620029e657600080fd5b6000546001600160a01b03163314620032825760405162461bcd60e51b8152600401620008bb906200497b565b6001600160a01b038116620032e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620008bb565b620032f48162004043565b50565b60025460405163ea85b1e560e01b81526001600160a01b03878116600483015260009283926001928492169063ea85b1e59060240160006040518083038186803b1580156200334557600080fd5b505afa1580156200335a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262003384919081019062004428565b905060005b8151811015620034825788841080620033a157508781105b156200346d5760025482516001600160a01b039091169063aad3ec96908c90859085908110620033e157634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016200340892919062004740565b602060405180830381600087803b1580156200342357600080fd5b505af115801562003438573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200345e9190620046b7565b6200346a908562004ac8565b93505b80620034798162004b40565b91505062003389565b5087831080620034925750600086115b156200362357600354604051637a8f2f7d60e01b81526001600160a01b038b811660048301526000921690637a8f2f7d9060240160006040518083038186803b158015620034df57600080fd5b505afa158015620034f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200351e919081019062004428565b905060005b81518110156200361c57898510806200353b57508781105b15620036075760035482516001600160a01b039091169063aad3ec96908d908590859081106200357b57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b8152600401620035a292919062004740565b602060405180830381600087803b158015620035bd57600080fd5b505af1158015620035d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035f89190620046b7565b62003604908662004ac8565b94505b80620036138162004b40565b91505062003523565b5060029250505b87831080620036325750600085115b15620037c857600480546040516319593c2b60e01b81526001600160a01b038c811693820193909352600092909116906319593c2b9060240160006040518083038186803b1580156200368457600080fd5b505afa15801562003699573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620036c3919081019062004428565b905060005b8151811015620037c15789851080620036e057508681105b15620037ac5760045482516001600160a01b039091169063aad3ec96908d908590859081106200372057634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016200374792919062004740565b602060405180830381600087803b1580156200376257600080fd5b505af115801562003777573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200379d9190620046b7565b620037a9908662004ac8565b94505b80620037b88162004b40565b915050620036c8565b5060039250505b878310156200395157600554604051635042fd4b60e11b81526001600160a01b038b81166004830152600092169063a085fa969060240160006040518083038186803b1580156200381857600080fd5b505afa1580156200382d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262003857919081019062004428565b905060005b81518110156200394a5789851015620039355760055482516001600160a01b039091169063aad3ec96908d90859085908110620038a957634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b8152600401620038d092919062004740565b602060405180830381600087803b158015620038eb57600080fd5b505af115801562003900573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039269190620046b7565b62003932908662004ac8565b94505b80620039418162004b40565b9150506200385c565b5060049250505b7f87c8f5d0edc1925e2c5f0557944a55a97424c9ded0e2ac25a5515137603c9ad389846040516200398492919062004740565b60405180910390a18783111562003b895760008260ff166001141562003a2d57600254604051632e0bb03b60e11b81526001600160a01b038c8116600483015290911690635c1760769060240160206040518083038186803b158015620039ea57600080fd5b505afa158015620039ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a259190620046b7565b905062003b69565b8260ff166002141562003a8957600260009054906101000a90046001600160a01b03166001600160a01b0316631d9312726040518163ffffffff1660e01b815260040160206040518083038186803b158015620039ea57600080fd5b8260ff166003141562003ae557600260009054906101000a90046001600160a01b03166001600160a01b031663879b0f7a6040518163ffffffff1660e01b815260040160206040518083038186803b158015620039ea57600080fd5b600254604051633498962d60e11b81526001600160a01b038c81166004830152909116906369312c5a9060240160206040518083038186803b15801562003b2b57600080fd5b505afa15801562003b40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b669190620046b7565b90505b600062003b778a8662004b26565b905062003b868b828462003b96565b50505b5090979650505050505050565b600d5460009062003bad9062001f4a85856200430d565b9050600062003c4e600d5462001f4a600260009054906101000a90046001600160a01b03166001600160a01b03166302504e396040518163ffffffff1660e01b815260040160206040518083038186803b15801562003c0b57600080fd5b505afa15801562003c20573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c469190620046b7565b87906200430d565b9050600062003cac600d5462001f4a600260009054906101000a90046001600160a01b03166001600160a01b031663ddf928f96040518163ffffffff1660e01b815260040160206040518083038186803b15801562001faf57600080fd5b90506000818362003cbe868962004b26565b62003cca919062004b26565b62003cd6919062004b26565b600b54604051636203b43b60e11b81529192506001600160a01b03169063c40768769062003d0b908a90859060040162004740565b602060405180830381600087803b15801562003d2657600080fd5b505af115801562003d3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d619190620045d7565b5060175460009061ffff600160401b820481169162003d8a91600160201b909104168762004b04565b62003d96919062004ae3565b60165461ffff600160301b820481169162003dbb91600160201b909104168762004b04565b62003dc7919062004ae3565b62003dd3919062004ac8565b600b54600854604051636203b43b60e11b81529293506001600160a01b039182169263c40768769262003e0d921690859060040162004740565b602060405180830381600087803b15801562003e2857600080fd5b505af115801562003e3d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e639190620045d7565b50601754600090849061ffff600160401b820481169162003e8d9162010000909104168962004b04565b62003e99919062004ae3565b60165461ffff600160301b820481169162003ebd9162010000909104168962004b04565b62003ec9919062004ae3565b62003ed5919062004ac8565b62003ee1919062004ac8565b600b54600954604051636203b43b60e11b81529293506001600160a01b039182169263c40768769262003f1b921690859060040162004740565b602060405180830381600087803b15801562003f3657600080fd5b505af115801562003f4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003f719190620045d7565b5060175460009061ffff600160401b820481169162003f9a91600160301b909104168962004b04565b62003fa6919062004ae3565b600b54600a54604051636203b43b60e11b81529293506001600160a01b039182169263c40768769262003fe0921690859060040162004740565b602060405180830381600087803b15801562003ffb57600080fd5b505af115801562004010573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040369190620045d7565b5050505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601554600160301b900461ffff16620040a95750565b60155460009061ffff600160301b8204811691620040c991168462004b04565b620040d5919062004ae3565b905080156200416e57600154600b5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926200411692911690859060040162004740565b602060405180830381600087803b1580156200413157600080fd5b505af115801562004146573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200416c9190620045d7565b505b60155460009061ffff600160301b82048116916200419691600160201b909104168562004b04565b620041a2919062004ae3565b905080156200423b5760015460095460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92620041e392911690859060040162004740565b602060405180830381600087803b158015620041fe57600080fd5b505af115801562004213573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620042399190620045d7565b505b60155460009061ffff600160301b8204811691620042629162010000909104168662004b04565b6200426e919062004ae3565b905080156200430757600154600a5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92620042af92911690869060040162004740565b602060405180830381600087803b158015620042ca57600080fd5b505af1158015620042df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620043059190620045d7565b505b50505050565b6000620009f2828462004b04565b6000620009f2828462004ae3565b6000620009f2828462004ac8565b61048f8062004bb783390190565b803561ffff81168114620031af57600080fd5b6000602082840312156200436a578081fd5b8135620009f28162004b8a565b60006020828403121562004389578081fd5b8151620009f28162004b8a565b60008060008060808587031215620043ac578283fd5b8435620043b98162004b8a565b93506020850135620043cb8162004b8a565b92506040850135620043dd8162004b8a565b91506060850135620043ef8162004b8a565b939692955090935050565b600080604083850312156200440d578182fd5b82356200441a8162004b8a565b946020939093013593505050565b600060208083850312156200443b578182fd5b82516001600160401b0381111562004451578283fd5b8301601f8101851362004462578283fd5b805162004479620044738262004a79565b62004a46565b80828252848201915084840188868560051b870101111562004499578687fd5b8694505b83851015620044bd5780518352600194909401939185019185016200449d565b50979650505050505050565b60008060208385031215620044dc578182fd5b82356001600160401b0380821115620044f3578384fd5b818501915085601f83011262004507578384fd5b81358181111562004516578485fd5b8660208260051b85010111156200452b578485fd5b60209290920196919550909350505050565b6000602080838503121562004550578182fd5b82356001600160401b0381111562004566578283fd5b8301601f8101851362004577578283fd5b803562004588620044738262004a79565b80828252848201915084840188868560051b8701011115620045a8578687fd5b8694505b83851015620044bd578035620045c28162004ba0565b835260019490940193918501918501620045ac565b600060208284031215620045e9578081fd5b81518015158114620009f2578182fd5b6000806000606084860312156200460e578283fd5b620046198462004345565b9250620046296020850162004345565b9150620046396040850162004345565b90509250925092565b6000806000806080858703121562004658578384fd5b620046638562004345565b9350620046736020860162004345565b9250620046836040860162004345565b9150620046936060860162004345565b905092959194509250565b600060208284031215620046b0578081fd5b5035919050565b600060208284031215620046c9578081fd5b5051919050565b60008060008060808587031215620046e6578182fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121562004714578081fd5b8135620009f28162004ba0565b60006020828403121562004733578081fd5b8151620009f28162004ba0565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039290921682526001600160401b0316602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015620047bf5781516001600160401b03168452928401929084019060010162004798565b5050506001600160a01b039490941692019190915250919050565b60208082526024908201527f48656c7065723a204572726f722c20696e76616c696420436c61696d20466565604082015263040a8c2f60e31b606082015260800190565b60208082526027908201527f48454c5045523a20204372656174696f6e2066726f6d20746865207a65726f206040820152666164647265737360c81b606082015260800190565b60208082526025908201527f48454c5045523a2042616c616e636520746f6f206c6f7720666f7220637265616040820152643a34b7b71760d91b606082015260800190565b6020808252602f908201527f48454c5045523a2045786365656473206d6178206d656d62657273686970732060408201526e3832b9103a3930b739b0b1ba34b7b760891b606082015260800190565b60208082526021908201527f48454c5045523a2045786365656473206d61782077616c6c657420616d6f756e6040820152601d60fa1b606082015260800190565b60208082526021908201527f48454c5045523a20616d734d616e61676572206973206e6f7420776f726b696e6040820152606760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f48454c5045523a206372656174696f6e2066726f6d20746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526030908201527f48454c5045523a20596f7520646f6e2774206861766520656e6f75676820726560408201526f1dd85c99081d1bc818d85cda081bdd5d60821b606082015260800190565b604051601f8201601f191681016001600160401b038111828210171562004a715762004a7162004b74565b604052919050565b60006001600160401b0382111562004a955762004a9562004b74565b5060051b60200190565b600061ffff80831681851680830382111562004abf5762004abf62004b5e565b01949350505050565b6000821982111562004ade5762004ade62004b5e565b500190565b60008262004aff57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161562004b215762004b2162004b5e565b500290565b60008282101562004b3b5762004b3b62004b5e565b500390565b600060001982141562004b575762004b5762004b5e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620032f457600080fd5b6001600160401b0381168114620032f457600080fdfe608060405234801561001057600080fd5b5060405161048f38038061048f83398101604081905261002f916100ad565b6100383361005d565b600180546001600160a01b0319166001600160a01b03929092169190911790556100db565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100be578081fd5b81516001600160a01b03811681146100d4578182fd5b9392505050565b6103a5806100ea6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063715018a61461005c5780638da5cb5b146100665780639a5f27a414610090578063c4076876146100a3578063f2fde38b146100c6575b600080fd5b6100646100d9565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b600154610073906001600160a01b031681565b6100b66100b13660046102f1565b610118565b6040519015158152602001610087565b6100646100d43660046102d7565b6101d0565b6000546001600160a01b0316331461010c5760405162461bcd60e51b81526004016101039061033a565b60405180910390fd5b610116600061026b565b565b600080546001600160a01b031633146101435760405162461bcd60e51b81526004016101039061033a565b60015460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561019157600080fd5b505af11580156101a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c9919061031a565b9392505050565b6000546001600160a01b031633146101fa5760405162461bcd60e51b81526004016101039061033a565b6001600160a01b03811661025f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610103565b6102688161026b565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146102d257600080fd5b919050565b6000602082840312156102e8578081fd5b6101c9826102bb565b60008060408385031215610303578081fd5b61030c836102bb565b946020939093013593505050565b60006020828403121561032b578081fd5b815180151581146101c9578182fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea26469706673582212209ec04c356809c559d457d6d3937d799f2307952d301d8de9e333e84d15d0c59364736f6c63430008040033a2646970667358221220594917f14f848105711e8d089ce331918cea027d7fb9db062702c07709f9b59d64736f6c63430008040033608060405234801561001057600080fd5b5060405161048f38038061048f83398101604081905261002f916100ad565b6100383361005d565b600180546001600160a01b0319166001600160a01b03929092169190911790556100db565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100be578081fd5b81516001600160a01b03811681146100d4578182fd5b9392505050565b6103a5806100ea6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063715018a61461005c5780638da5cb5b146100665780639a5f27a414610090578063c4076876146100a3578063f2fde38b146100c6575b600080fd5b6100646100d9565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b600154610073906001600160a01b031681565b6100b66100b13660046102f1565b610118565b6040519015158152602001610087565b6100646100d43660046102d7565b6101d0565b6000546001600160a01b0316331461010c5760405162461bcd60e51b81526004016101039061033a565b60405180910390fd5b610116600061026b565b565b600080546001600160a01b031633146101435760405162461bcd60e51b81526004016101039061033a565b60015460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561019157600080fd5b505af11580156101a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c9919061031a565b9392505050565b6000546001600160a01b031633146101fa5760405162461bcd60e51b81526004016101039061033a565b6001600160a01b03811661025f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610103565b6102688161026b565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146102d257600080fd5b919050565b6000602082840312156102e8578081fd5b6101c9826102bb565b60008060408385031215610303578081fd5b61030c836102bb565b946020939093013593505050565b60006020828403121561032b578081fd5b815180151581146101c9578182fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea26469706673582212209ec04c356809c559d457d6d3937d799f2307952d301d8de9e333e84d15d0c59364736f6c63430008040033000000000000000000000000c88fff4adf86adc2af20c57df9b3b9eb7d664816000000000000000000000000fd0c58f03c83d6960bb9dbfd45076d78df2f095d00000000000000000000000054f82f4819ee498db58d1cf199bb7b27539d25eb00000000000000000000000096de84d4a113426a08a1f737d065a7bda43052f3000000000000000000000000808996b4af65c316a027a9ada0d395afc27c7385
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c88fff4adf86adc2af20c57df9b3b9eb7d664816000000000000000000000000fd0c58f03c83d6960bb9dbfd45076d78df2f095d00000000000000000000000054f82f4819ee498db58d1cf199bb7b27539d25eb00000000000000000000000096de84d4a113426a08a1f737d065a7bda43052f3000000000000000000000000808996b4af65c316a027a9ada0d395afc27c7385
-----Decoded View---------------
Arg [0] : _amsManager (address): 0xc88fff4adf86adc2af20c57df9b3b9eb7d664816
Arg [1] : _ASCEND (address): 0xfd0c58f03c83d6960bb9dbfd45076d78df2f095d
Arg [2] : _treasuryWallet (address): 0x54f82f4819ee498db58d1cf199bb7b27539d25eb
Arg [3] : _metaFundWallet (address): 0x96de84d4a113426a08a1f737d065a7bda43052f3
Arg [4] : _liquidityWallet (address): 0x808996b4af65c316a027a9ada0d395afc27c7385
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000c88fff4adf86adc2af20c57df9b3b9eb7d664816
Arg [1] : 000000000000000000000000fd0c58f03c83d6960bb9dbfd45076d78df2f095d
Arg [2] : 00000000000000000000000054f82f4819ee498db58d1cf199bb7b27539d25eb
Arg [3] : 00000000000000000000000096de84d4a113426a08a1f737d065a7bda43052f3
Arg [4] : 000000000000000000000000808996b4af65c316a027a9ada0d395afc27c7385
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.