Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 128 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim All Pendin... | 16567657 | 695 days ago | IN | 0 ETH | 0.00397222 | ||||
Claim All Pendin... | 16560041 | 696 days ago | IN | 0 ETH | 0.00771764 | ||||
Claim All Pendin... | 16528958 | 701 days ago | IN | 0 ETH | 0.02750302 | ||||
Claim All Pendin... | 16528931 | 701 days ago | IN | 0 ETH | 0.02105649 | ||||
Claim All Pendin... | 16528838 | 701 days ago | IN | 0 ETH | 0.00663479 | ||||
Claim All Pendin... | 16518997 | 702 days ago | IN | 0 ETH | 0.0024485 | ||||
Claim All Pendin... | 16518990 | 702 days ago | IN | 0 ETH | 0.00242827 | ||||
Claim All Pendin... | 16516709 | 702 days ago | IN | 0 ETH | 0.00679337 | ||||
Claim All Pendin... | 16482774 | 707 days ago | IN | 0 ETH | 0.00280519 | ||||
Claim All Pendin... | 16479039 | 708 days ago | IN | 0 ETH | 0.00597142 | ||||
Claim All Pendin... | 16473184 | 709 days ago | IN | 0 ETH | 0.00295873 | ||||
Claim All Pendin... | 16471674 | 709 days ago | IN | 0 ETH | 0.0041073 | ||||
Claim All Pendin... | 16469712 | 709 days ago | IN | 0 ETH | 0.002688 | ||||
Claim All Pendin... | 16452776 | 711 days ago | IN | 0 ETH | 0.00283772 | ||||
Claim All Pendin... | 16450427 | 712 days ago | IN | 0 ETH | 0.00528614 | ||||
Claim All Pendin... | 16422657 | 716 days ago | IN | 0 ETH | 0.00588024 | ||||
Claim All Pendin... | 16412937 | 717 days ago | IN | 0 ETH | 0.00286426 | ||||
Claim All Pendin... | 16404651 | 718 days ago | IN | 0 ETH | 0.00318447 | ||||
Claim All Pendin... | 16393793 | 720 days ago | IN | 0 ETH | 0.00371392 | ||||
Claim All Pendin... | 16388258 | 720 days ago | IN | 0 ETH | 0.00300741 | ||||
Claim All Pendin... | 16377394 | 722 days ago | IN | 0 ETH | 0.00471517 | ||||
Claim All Pendin... | 16369622 | 723 days ago | IN | 0 ETH | 0.00276738 | ||||
Claim All Pendin... | 16359215 | 724 days ago | IN | 0 ETH | 0.00321033 | ||||
Close Claim | 16323778 | 729 days ago | IN | 0 ETH | 0.00923498 | ||||
Claim All Pendin... | 16322805 | 730 days ago | IN | 0 ETH | 0.00273638 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15302264 | 877 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
ClaimsReward
Compiler Version
v0.5.17+commit.d19bba13
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.5.0; import "@openzeppelin/contracts/math/SafeMath.sol"; import "../../abstract/LegacyMasterAware.sol"; import "../../interfaces/IClaims.sol"; import "../../interfaces/IClaimsData.sol"; import "../../interfaces/IClaimsReward.sol"; import "../../interfaces/IGovernance.sol"; import "../../interfaces/IMCR.sol"; import "../../interfaces/IMemberRoles.sol"; import "../../interfaces/INXMToken.sol"; import "../../interfaces/IPool.sol"; import "../../interfaces/IPooledStaking.sol"; import "../../interfaces/IQuotationData.sol"; import "../../interfaces/ITokenController.sol"; import "../../interfaces/ITokenData.sol"; //Claims Reward Contract contains the functions for calculating number of tokens // that will get rewarded, unlocked or burned depending upon the status of claim. contract ClaimsReward is IClaimsReward, LegacyMasterAware { using SafeMath for uint; INXMToken internal tk; ITokenController internal tc; ITokenData internal td; IQuotationData internal qd; IClaims internal c1; IClaimsData internal cd; IPool internal pool; IGovernance internal gv; IPooledStaking internal pooledStaking; IMemberRoles internal memberRoles; IMCR public mcr; // assigned in constructor address public DAI; // constants address public constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; uint private constant DECIMAL1E18 = uint(10) ** 18; constructor (address masterAddress, address _daiAddress) public { changeMasterAddress(masterAddress); DAI = _daiAddress; } function changeDependentContractAddress() public onlyInternal { c1 = IClaims(ms.getLatestAddress("CL")); cd = IClaimsData(ms.getLatestAddress("CD")); tk = INXMToken(ms.tokenAddress()); tc = ITokenController(ms.getLatestAddress("TC")); td = ITokenData(ms.getLatestAddress("TD")); qd = IQuotationData(ms.getLatestAddress("QD")); gv = IGovernance(ms.getLatestAddress("GV")); pooledStaking = IPooledStaking(ms.getLatestAddress("PS")); memberRoles = IMemberRoles(ms.getLatestAddress("MR")); pool = IPool(ms.getLatestAddress("P1")); mcr = IMCR(ms.getLatestAddress("MC")); } /** * @dev Claims are closable by anyone * @param _claimId id of claim to be closed. */ function closeClaim(uint _claimId) external { (, , , uint status, uint dateUpd,) = cd.getClaim(_claimId); bool canRetryPayout = status != 12 || dateUpd.add(cd.payoutRetryTime()) < block.timestamp; require(canRetryPayout, "ClaimsReward: Payout retry time not reached."); _changeClaimStatus(_claimId); } function changeClaimStatus(uint claimId) public checkPause onlyInternal { _changeClaimStatus(claimId); } /// @dev Decides the next course of action for a given claim. function _changeClaimStatus(uint claimId) internal { (, uint coverid) = cd.getClaimCoverId(claimId); (, uint status) = cd.getClaimStatusNumber(claimId); // when current status is "Pending-Claim Assessor Vote" if (status == 0) { _changeClaimStatusCA(claimId, coverid, status); } else if (status >= 1 && status <= 5) { _changeClaimStatusMV(claimId, coverid, status); } else if (status == 12) {// when current status is "Claim Accepted Payout Pending" bool payoutSucceeded = attemptClaimPayout(coverid); if (payoutSucceeded) { c1.setClaimStatus(claimId, 14); } else { c1.setClaimStatus(claimId, 12); } } } function getCurrencyAssetAddress(bytes4 currency) public view returns (address) { if (currency == "ETH") { return ETH; } if (currency == "DAI") { return DAI; } revert("ClaimsReward: unknown asset"); } function attemptClaimPayout(uint coverId) internal returns (bool success) { uint sumAssured = qd.getCoverSumAssured(coverId); // TODO: when adding new cover currencies, fetch the correct decimals for this multiplication uint sumAssuredWei = sumAssured.mul(1e18); // get asset address bytes4 coverCurrency = qd.getCurrencyOfCover(coverId); address asset = getCurrencyAssetAddress(coverCurrency); // get payout address address payable coverHolder = qd.getCoverMemberAddress(coverId); address payable payoutAddress = memberRoles.getClaimPayoutAddress(coverHolder); // execute the payout bool payoutSucceeded = pool.sendClaimPayout(asset, payoutAddress, sumAssuredWei); if (payoutSucceeded) { // burn staked tokens (, address scAddress) = qd.getscAddressOfCover(coverId); uint tokenPrice = pool.getTokenPrice(asset); // note: for new assets "18" needs to be replaced with target asset decimals uint burnNXMAmount = sumAssuredWei.mul(1e18).div(tokenPrice); pooledStaking.pushBurn(scAddress, burnNXMAmount); // adjust total sum assured (, address coverContract) = qd.getscAddressOfCover(coverId); qd.subFromTotalSumAssured(coverCurrency, sumAssured); qd.subFromTotalSumAssuredSC(coverContract, coverCurrency, sumAssured); // update MCR since total sum assured and MCR% change mcr.updateMCRInternal(pool.getPoolValueInEth(), true); return true; } return false; } /// @dev Amount of tokens to be rewarded to a user for a particular vote id. /// @param check 1 -> CA vote, else member vote /// @param voteid vote id for which reward has to be Calculated /// @param flag if 1 calculate even if claimed,else don't calculate if already claimed /// @return tokenCalculated reward to be given for vote id /// @return lastClaimedCheck true if final verdict is still pending for that voteid /// @return tokens number of tokens locked under that voteid /// @return perc percentage of reward to be given. function getRewardToBeGiven( uint check, uint voteid, uint flag ) public view returns ( uint tokenCalculated, bool lastClaimedCheck, uint tokens, uint perc ) { uint claimId; int8 verdict; bool claimed; uint tokensToBeDist; uint totalTokens; (tokens, claimId, verdict, claimed) = cd.getVoteDetails(voteid); lastClaimedCheck = false; int8 claimVerdict = cd.getFinalVerdict(claimId); if (claimVerdict == 0) { lastClaimedCheck = true; } if (claimVerdict == verdict && (claimed == false || flag == 1)) { if (check == 1) { (perc, , tokensToBeDist) = cd.getClaimRewardDetail(claimId); } else { (, perc, tokensToBeDist) = cd.getClaimRewardDetail(claimId); } if (perc > 0) { if (check == 1) { if (verdict == 1) { (, totalTokens,) = cd.getClaimsTokenCA(claimId); } else { (,, totalTokens) = cd.getClaimsTokenCA(claimId); } } else { if (verdict == 1) { (, totalTokens,) = cd.getClaimsTokenMV(claimId); } else { (,, totalTokens) = cd.getClaimsTokenMV(claimId); } } tokenCalculated = (perc.mul(tokens).mul(tokensToBeDist)).div(totalTokens.mul(100)); } } } /// @dev Transfers all tokens held by contract to a new contract in case of upgrade. function upgrade(address _newAdd) public onlyInternal { uint amount = tk.balanceOf(address(this)); if (amount > 0) { require(tk.transfer(_newAdd, amount)); } } /// @dev Total reward in token due for claim by a user. /// @return total total number of tokens function getRewardToBeDistributedByUser(address _add) public view returns (uint total) { uint lengthVote = cd.getVoteAddressCALength(_add); uint lastIndexCA; uint lastIndexMV; uint tokenForVoteId; uint voteId; (lastIndexCA, lastIndexMV) = cd.getRewardDistributedIndex(_add); for (uint i = lastIndexCA; i < lengthVote; i++) { voteId = cd.getVoteAddressCA(_add, i); (tokenForVoteId,,,) = getRewardToBeGiven(1, voteId, 0); total = total.add(tokenForVoteId); } lengthVote = cd.getVoteAddressMemberLength(_add); for (uint j = lastIndexMV; j < lengthVote; j++) { voteId = cd.getVoteAddressMember(_add, j); (tokenForVoteId,,,) = getRewardToBeGiven(0, voteId, 0); total = total.add(tokenForVoteId); } return (total); } /// @dev Gets reward amount and claiming status for a given claim id. /// @return reward amount of tokens to user. /// @return claimed true if already claimed false if yet to be claimed. function getRewardAndClaimedStatus(uint check, uint claimId) public view returns (uint reward, bool claimed) { uint voteId; uint claimid; uint lengthVote; if (check == 1) { lengthVote = cd.getVoteAddressCALength(msg.sender); for (uint i = 0; i < lengthVote; i++) { voteId = cd.getVoteAddressCA(msg.sender, i); (, claimid, , claimed) = cd.getVoteDetails(voteId); if (claimid == claimId) {break;} } } else { lengthVote = cd.getVoteAddressMemberLength(msg.sender); for (uint j = 0; j < lengthVote; j++) { voteId = cd.getVoteAddressMember(msg.sender, j); (, claimid, , claimed) = cd.getVoteDetails(voteId); if (claimid == claimId) {break;} } } (reward,,,) = getRewardToBeGiven(check, voteId, 1); } /** * @dev Function used to claim all pending rewards : Claims Assessment + Risk Assessment + Governance * Claim assesment, Risk assesment, Governance rewards */ function claimAllPendingReward(uint records) public isMemberAndcheckPause { _claimRewardToBeDistributed(records); pooledStaking.withdrawReward(msg.sender); uint governanceRewards = gv.claimReward(msg.sender, records); if (governanceRewards > 0) { require(tk.transfer(msg.sender, governanceRewards)); } } /** * @dev Function used to get pending rewards of a particular user address. * @param _add user address. * @return total reward amount of the user */ function getAllPendingRewardOfUser(address _add) public view returns (uint) { uint caReward = getRewardToBeDistributedByUser(_add); uint pooledStakingReward = pooledStaking.stakerReward(_add); uint governanceReward = gv.getPendingReward(_add); return caReward.add(pooledStakingReward).add(governanceReward); } /// @dev Rewards/Punishes users who participated in Claims assessment. // Unlocking and burning of the tokens will also depend upon the status of claim. /// @param claimid Claim Id. function _rewardAgainstClaim(uint claimid, uint coverid, uint status) internal { uint premiumNXM = qd.getCoverPremiumNXM(coverid); uint distributableTokens = premiumNXM.mul(cd.claimRewardPerc()).div(100); // 20% of premium uint percCA; uint percMV; (percCA, percMV) = cd.getRewardStatus(status); cd.setClaimRewardDetail(claimid, percCA, percMV, distributableTokens); if (percCA > 0 || percMV > 0) { tc.mint(address(this), distributableTokens); } // denied if (status == 6 || status == 9 || status == 11) { cd.changeFinalVerdict(claimid, -1); tc.markCoverClaimClosed(coverid, false); _burnCoverNoteDeposit(coverid); // accepted } else if (status == 7 || status == 8 || status == 10) { cd.changeFinalVerdict(claimid, 1); tc.markCoverClaimClosed(coverid, true); _unlockCoverNote(coverid); bool payoutSucceeded = attemptClaimPayout(coverid); // 12 = payout pending, 14 = payout succeeded uint nextStatus = payoutSucceeded ? 14 : 12; c1.setClaimStatus(claimid, nextStatus); } } function _burnCoverNoteDeposit(uint coverId) internal { address _of = qd.getCoverMemberAddress(coverId); bytes32 reason = keccak256(abi.encodePacked("CN", _of, coverId)); uint lockedAmount = tc.tokensLocked(_of, reason); (uint amount,) = td.depositedCN(coverId); amount = amount.div(2); // limit burn amount to actual amount locked uint burnAmount = lockedAmount < amount ? lockedAmount : amount; if (burnAmount != 0) { tc.burnLockedTokens(_of, reason, amount); } } function unlockCoverNote(uint coverId) external onlyInternal { _unlockCoverNote(coverId); } function _unlockCoverNote(uint coverId) internal { address coverHolder = qd.getCoverMemberAddress(coverId); bytes32 reason = keccak256(abi.encodePacked("CN", coverHolder, coverId)); uint lockedCN = tc.tokensLocked(coverHolder, reason); if (lockedCN != 0) { tc.releaseLockedTokens(coverHolder, reason, lockedCN); } } /// @dev Computes the result of Claim Assessors Voting for a given claim id. function _changeClaimStatusCA(uint claimid, uint coverid, uint status) internal { // Check if voting should be closed or not if (c1.checkVoteClosing(claimid) == 1) { uint caTokens = c1.getCATokens(claimid, 0); // converted in cover currency. uint accept; uint deny; uint acceptAndDeny; bool rewardOrPunish; uint sumAssured; (, accept) = cd.getClaimVote(claimid, 1); (, deny) = cd.getClaimVote(claimid, - 1); acceptAndDeny = accept.add(deny); accept = accept.mul(100); deny = deny.mul(100); if (caTokens == 0) { status = 3; } else { sumAssured = qd.getCoverSumAssured(coverid).mul(DECIMAL1E18); // Min threshold reached tokens used for voting > 5* sum assured if (caTokens > sumAssured.mul(5)) { if (accept.div(acceptAndDeny) > 70) { status = 7; qd.changeCoverStatusNo(coverid, uint8(IQuotationData.CoverStatus.ClaimAccepted)); rewardOrPunish = true; } else if (deny.div(acceptAndDeny) > 70) { status = 6; qd.changeCoverStatusNo(coverid, uint8(IQuotationData.CoverStatus.ClaimDenied)); rewardOrPunish = true; } else if (accept.div(acceptAndDeny) > deny.div(acceptAndDeny)) { status = 4; } else { status = 5; } } else { if (accept.div(acceptAndDeny) > deny.div(acceptAndDeny)) { status = 2; } else { status = 3; } } } c1.setClaimStatus(claimid, status); if (rewardOrPunish) { _rewardAgainstClaim(claimid, coverid, status); } } } /// @dev Computes the result of Member Voting for a given claim id. function _changeClaimStatusMV(uint claimid, uint coverid, uint status) internal { // Check if voting should be closed or not if (c1.checkVoteClosing(claimid) == 1) { uint8 coverStatus; uint statusOrig = status; uint mvTokens = c1.getCATokens(claimid, 1); // converted in cover currency. // If tokens used for acceptance >50%, claim is accepted uint sumAssured = qd.getCoverSumAssured(coverid).mul(DECIMAL1E18); uint thresholdUnreached = 0; // Minimum threshold for member voting is reached only when // value of tokens used for voting > 5* sum assured of claim id if (mvTokens < sumAssured.mul(5)) { thresholdUnreached = 1; } uint accept; (, accept) = cd.getClaimMVote(claimid, 1); uint deny; (, deny) = cd.getClaimMVote(claimid, - 1); if (accept.add(deny) > 0) { if (accept.mul(100).div(accept.add(deny)) >= 50 && statusOrig > 1 && statusOrig <= 5 && thresholdUnreached == 0) { status = 8; coverStatus = uint8(IQuotationData.CoverStatus.ClaimAccepted); } else if (deny.mul(100).div(accept.add(deny)) >= 50 && statusOrig > 1 && statusOrig <= 5 && thresholdUnreached == 0) { status = 9; coverStatus = uint8(IQuotationData.CoverStatus.ClaimDenied); } } if (thresholdUnreached == 1 && (statusOrig == 2 || statusOrig == 4)) { status = 10; coverStatus = uint8(IQuotationData.CoverStatus.ClaimAccepted); } else if (thresholdUnreached == 1 && (statusOrig == 5 || statusOrig == 3 || statusOrig == 1)) { status = 11; coverStatus = uint8(IQuotationData.CoverStatus.ClaimDenied); } c1.setClaimStatus(claimid, status); qd.changeCoverStatusNo(coverid, uint8(coverStatus)); // Reward/Punish Claim Assessors and Members who participated in Claims assessment _rewardAgainstClaim(claimid, coverid, status); } } /// @dev Allows a user to claim all pending Claims assessment rewards. function _claimRewardToBeDistributed(uint _records) internal { uint lengthVote = cd.getVoteAddressCALength(msg.sender); uint voteid; uint lastIndex; (lastIndex,) = cd.getRewardDistributedIndex(msg.sender); uint total = 0; uint tokenForVoteId = 0; bool lastClaimedCheck; bool claimed; uint counter = 0; uint claimId; uint perc; uint i; uint lastClaimed = lengthVote; for (i = lastIndex; i < lengthVote && counter < _records; i++) { voteid = cd.getVoteAddressCA(msg.sender, i); (tokenForVoteId, lastClaimedCheck, , perc) = getRewardToBeGiven(1, voteid, 0); if (lastClaimed == lengthVote && lastClaimedCheck == true) { lastClaimed = i; } (, claimId, , claimed) = cd.getVoteDetails(voteid); if (perc > 0 && !claimed) { counter++; cd.setRewardClaimed(voteid, true); } else if (perc == 0 && cd.getFinalVerdict(claimId) != 0 && !claimed) { (perc,,) = cd.getClaimRewardDetail(claimId); if (perc == 0) { counter++; } cd.setRewardClaimed(voteid, true); } if (tokenForVoteId > 0) { total = tokenForVoteId.add(total); } } if (lastClaimed == lengthVote) { cd.setRewardDistributedIndexCA(msg.sender, i); } else { cd.setRewardDistributedIndexCA(msg.sender, lastClaimed); } lengthVote = cd.getVoteAddressMemberLength(msg.sender); lastClaimed = lengthVote; { uint lockTimePerVote = td.lockCADays(); uint reduction = lockTimePerVote.mul(counter); uint minExpiration = block.timestamp.add(lockTimePerVote); uint currentExpiration = tc.getLockedTokensValidity(msg.sender, "CLA"); // reduce lock time only if current lock time is greater than min lock time if (currentExpiration > minExpiration) { // and never reduce to less than min lock time if (currentExpiration.sub(reduction) < minExpiration) { reduction = currentExpiration.sub(minExpiration); } tc.reduceLock(msg.sender, "CLA", reduction); } } (, lastIndex) = cd.getRewardDistributedIndex(msg.sender); lastClaimed = lengthVote; counter = 0; for (i = lastIndex; i < lengthVote && counter < _records; i++) { voteid = cd.getVoteAddressMember(msg.sender, i); (tokenForVoteId, lastClaimedCheck,,) = getRewardToBeGiven(0, voteid, 0); if (lastClaimed == lengthVote && lastClaimedCheck == true) { lastClaimed = i; } (, claimId, , claimed) = cd.getVoteDetails(voteid); if (claimed == false && cd.getFinalVerdict(claimId) != 0) { cd.setRewardClaimed(voteid, true); counter++; } if (tokenForVoteId > 0) { total = tokenForVoteId.add(total); } } if (total > 0) { require(tk.transfer(msg.sender, total)); } if (lastClaimed == lengthVote) { cd.setRewardDistributedIndexMV(msg.sender, i); } else { cd.setRewardDistributedIndexMV(msg.sender, lastClaimed); } } }
pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.5.0; import "../interfaces/INXMMaster.sol"; contract LegacyMasterAware { INXMMaster public ms; address public nxMasterAddress; modifier onlyInternal { require(ms.isInternal(msg.sender)); _; } modifier isMemberAndcheckPause { require(ms.isPause() == false && ms.isMember(msg.sender) == true); _; } modifier onlyOwner { require(ms.isOwner(msg.sender)); _; } modifier checkPause { require(ms.isPause() == false); _; } modifier isMember { require(ms.isMember(msg.sender), "Not member"); _; } /** * @dev Iupgradable Interface to update dependent contract address */ function changeDependentContractAddress() public; /** * @dev change master address * @param _masterAddress is the new address */ function changeMasterAddress(address _masterAddress) public { if (address(ms) != address(0)) { require(address(ms) == msg.sender, "Not master"); } ms = INXMMaster(_masterAddress); nxMasterAddress = _masterAddress; } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IClaims { function setClaimStatus(uint claimId, uint stat) external; function getCATokens(uint claimId, uint member) external view returns (uint tokens); function submitClaim(uint coverId) external; function submitClaimForMember(uint coverId, address member) external; function submitClaimAfterEPOff() external pure; function submitCAVote(uint claimId, int8 verdict) external; function submitMemberVote(uint claimId, int8 verdict) external; function pauseAllPendingClaimsVoting() external pure; function startAllPendingClaimsVoting() external pure; function checkVoteClosing(uint claimId) external view returns (int8 close); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IClaimsData { function pendingClaimStart() external view returns (uint); function claimDepositTime() external view returns (uint); function maxVotingTime() external view returns (uint); function minVotingTime() external view returns (uint); function payoutRetryTime() external view returns (uint); function claimRewardPerc() external view returns (uint); function minVoteThreshold() external view returns (uint); function maxVoteThreshold() external view returns (uint); function majorityConsensus() external view returns (uint); function pauseDaysCA() external view returns (uint); function userClaimVotePausedOn(address) external view returns (uint); function setpendingClaimStart(uint _start) external; function setRewardDistributedIndexCA(address _voter, uint caIndex) external; function setUserClaimVotePausedOn(address user) external; function setRewardDistributedIndexMV(address _voter, uint mvIndex) external; function setClaimRewardDetail( uint claimid, uint percCA, uint percMV, uint tokens ) external; function setRewardClaimed(uint _voteid, bool claimed) external; function changeFinalVerdict(uint _claimId, int8 _verdict) external; function addClaim( uint _claimId, uint _coverId, address _from, uint _nowtime ) external; function addVote( address _voter, uint _tokens, uint claimId, int8 _verdict ) external; function addClaimVoteCA(uint _claimId, uint _voteid) external; function setUserClaimVoteCA( address _from, uint _claimId, uint _voteid ) external; function setClaimTokensCA(uint _claimId, int8 _vote, uint _tokens) external; function setClaimTokensMV(uint _claimId, int8 _vote, uint _tokens) external; function addClaimVotemember(uint _claimId, uint _voteid) external; function setUserClaimVoteMember( address _from, uint _claimId, uint _voteid ) external; function updateState12Count(uint _claimId, uint _cnt) external; function setClaimStatus(uint _claimId, uint _stat) external; function setClaimdateUpd(uint _claimId, uint _dateUpd) external; function setClaimAtEmergencyPause( uint _coverId, uint _dateUpd, bool _submit ) external; function setClaimSubmittedAtEPTrue(uint _index, bool _submit) external; function setFirstClaimIndexToSubmitAfterEP( uint _firstClaimIndexToSubmit ) external; function setPendingClaimDetails( uint _claimId, uint _pendingTime, bool _voting ) external; function setPendingClaimVoteStatus(uint _claimId, bool _vote) external; function setFirstClaimIndexToStartVotingAfterEP( uint _claimStartVotingFirstIndex ) external; function callVoteEvent( address _userAddress, uint _claimId, bytes4 _typeOf, uint _tokens, uint _submitDate, int8 _verdict ) external; function callClaimEvent( uint _coverId, address _userAddress, uint _claimId, uint _datesubmit ) external; function getUintParameters(bytes8 code) external view returns (bytes8 codeVal, uint val); function getClaimOfEmergencyPauseByIndex( uint _index ) external view returns ( uint coverId, uint dateUpd, bool submit ); function getAllClaimsByIndex( uint _claimId ) external view returns ( uint coverId, int8 vote, uint status, uint dateUpd, uint state12Count ); function getUserClaimVoteCA( address _add, uint _claimId ) external view returns (uint idVote); function getUserClaimVoteMember( address _add, uint _claimId ) external view returns (uint idVote); function getAllVoteLength() external view returns (uint voteCount); function getClaimStatusNumber(uint _claimId) external view returns (uint claimId, uint statno); function getRewardStatus(uint statusNumber) external view returns (uint percCA, uint percMV); function getClaimState12Count(uint _claimId) external view returns (uint num); function getClaimDateUpd(uint _claimId) external view returns (uint dateupd); function getAllClaimsByAddress(address _member) external view returns (uint[] memory claimarr); function getClaimsTokenCA( uint _claimId ) external view returns ( uint claimId, uint accept, uint deny ); function getClaimsTokenMV( uint _claimId ) external view returns ( uint claimId, uint accept, uint deny ); function getCaClaimVotesToken(uint _claimId) external view returns (uint claimId, uint cnt); function getMemberClaimVotesToken( uint _claimId ) external view returns (uint claimId, uint cnt); function getVoteDetails(uint _voteid) external view returns ( uint tokens, uint claimId, int8 verdict, bool rewardClaimed ); function getVoterVote(uint _voteid) external view returns (address voter); function getClaim( uint _claimId ) external view returns ( uint claimId, uint coverId, int8 vote, uint status, uint dateUpd, uint state12Count ); function getClaimVoteLength( uint _claimId, uint8 _ca ) external view returns (uint claimId, uint len); function getVoteVerdict( uint _claimId, uint _index, uint8 _ca ) external view returns (int8 ver); function getVoteToken( uint _claimId, uint _index, uint8 _ca ) external view returns (uint tok); function getVoteVoter( uint _claimId, uint _index, uint8 _ca ) external view returns (address voter); function getUserClaimCount(address _add) external view returns (uint len); function getClaimLength() external view returns (uint len); function actualClaimLength() external view returns (uint len); function getClaimFromNewStart( uint _index, address _add ) external view returns ( uint coverid, uint claimId, int8 voteCA, int8 voteMV, uint statusnumber ); function getUserClaimByIndex( uint _index, address _add ) external view returns ( uint status, uint coverid, uint claimId ); function getAllVotesForClaim( uint _claimId ) external view returns ( uint claimId, uint[] memory ca, uint[] memory mv ); function getTokensClaim( address _of, uint _claimId ) external view returns ( uint claimId, uint tokens ); function getRewardDistributedIndex( address _voter ) external view returns ( uint lastCAvoteIndex, uint lastMVvoteIndex ); function getClaimRewardDetail( uint claimid ) external view returns ( uint percCA, uint percMV, uint tokens ); function getClaimCoverId(uint _claimId) external view returns (uint claimId, uint coverid); function getClaimVote(uint _claimId, int8 _verdict) external view returns (uint claimId, uint token); function getClaimMVote(uint _claimId, int8 _verdict) external view returns (uint claimId, uint token); function getVoteAddressCA(address _voter, uint index) external view returns (uint); function getVoteAddressMember(address _voter, uint index) external view returns (uint); function getVoteAddressCALength(address _voter) external view returns (uint); function getVoteAddressMemberLength(address _voter) external view returns (uint); function getFinalVerdict(uint _claimId) external view returns (int8 verdict); function getLengthOfClaimSubmittedAtEP() external view returns (uint len); function getFirstClaimIndexToSubmitAfterEP() external view returns (uint indexToSubmit); function getLengthOfClaimVotingPause() external view returns (uint len); function getPendingClaimDetailsByIndex( uint _index ) external view returns ( uint claimId, uint pendingTime, bool voting ); function getFirstClaimIndexToStartVotingAfterEP() external view returns (uint firstindex); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IClaimsReward { /// @dev Decides the next course of action for a given claim. function changeClaimStatus(uint claimid) external; function getCurrencyAssetAddress(bytes4 currency) external view returns (address); function getRewardToBeGiven( uint check, uint voteid, uint flag ) external view returns ( uint tokenCalculated, bool lastClaimedCheck, uint tokens, uint perc ); function upgrade(address _newAdd) external; function getRewardToBeDistributedByUser(address _add) external view returns (uint total); function getRewardAndClaimedStatus(uint check, uint claimId) external view returns (uint reward, bool claimed); function claimAllPendingReward(uint records) external; function getAllPendingRewardOfUser(address _add) external view returns (uint); function unlockCoverNote(uint coverId) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IGovernance { event Proposal( address indexed proposalOwner, uint256 indexed proposalId, uint256 dateAdd, string proposalTitle, string proposalSD, string proposalDescHash ); event Solution( uint256 indexed proposalId, address indexed solutionOwner, uint256 indexed solutionId, string solutionDescHash, uint256 dateAdd ); event Vote( address indexed from, uint256 indexed proposalId, uint256 indexed voteId, uint256 dateAdd, uint256 solutionChosen ); event RewardClaimed( address indexed member, uint gbtReward ); /// @dev VoteCast event is called whenever a vote is cast that can potentially close the proposal. event VoteCast (uint256 proposalId); /// @dev ProposalAccepted event is called when a proposal is accepted so that a server can listen that can /// call any offchain actions event ProposalAccepted (uint256 proposalId); /// @dev CloseProposalOnTime event is called whenever a proposal is created or updated to close it on time. event CloseProposalOnTime ( uint256 indexed proposalId, uint256 time ); /// @dev ActionSuccess event is called whenever an onchain action is executed. event ActionSuccess ( uint256 proposalId ); struct DelegateVote { address follower; address leader; uint lastUpd; } /// @dev Creates a new proposal /// @param _proposalDescHash Proposal description hash through IPFS having Short and long description of proposal /// @param _categoryId This id tells under which the proposal is categorized i.e. Proposal's Objective function createProposal( string calldata _proposalTitle, string calldata _proposalSD, string calldata _proposalDescHash, uint _categoryId ) external; /// @dev Edits the details of an existing proposal and creates new version /// @param _proposalId Proposal id that details needs to be updated /// @param _proposalDescHash Proposal description hash having long and short description of proposal. function updateProposal( uint _proposalId, string calldata _proposalTitle, string calldata _proposalSD, string calldata _proposalDescHash ) external; /// @dev Categorizes proposal to proceed further. Categories shows the proposal objective. function categorizeProposal( uint _proposalId, uint _categoryId, uint _incentives ) external; /// @dev Submit proposal with solution /// @param _proposalId Proposal id /// @param _solutionHash Solution hash contains parameters, values and description needed according to proposal function submitProposalWithSolution( uint _proposalId, string calldata _solutionHash, bytes calldata _action ) external; /// @dev Creates a new proposal with solution and votes for the solution /// @param _proposalDescHash Proposal description hash through IPFS having Short and long description of proposal /// @param _categoryId This id tells under which the proposal is categorized i.e. Proposal's Objective /// @param _solutionHash Solution hash contains parameters, values and description needed according to proposal function createProposalwithSolution( string calldata _proposalTitle, string calldata _proposalSD, string calldata _proposalDescHash, uint _categoryId, string calldata _solutionHash, bytes calldata _action ) external; /// @dev Casts vote /// @param _proposalId Proposal id /// @param _solutionChosen solution chosen while voting. _solutionChosen[0] is the chosen solution function submitVote(uint _proposalId, uint _solutionChosen) external; function closeProposal(uint _proposalId) external; function claimReward(address _memberAddress, uint _maxRecords) external returns (uint pendingDAppReward); function proposal(uint _proposalId) external view returns ( uint proposalId, uint category, uint status, uint finalVerdict, uint totalReward ); function canCloseProposal(uint _proposalId) external view returns (uint closeValue); function allowedToCatgorize() external view returns (uint roleId); function removeDelegation(address _add) external; function getPendingReward(address _memberAddress) external view returns (uint pendingDAppReward); function getFollowers(address _add) external view returns (uint[] memory); function followerDelegation(address _add) external view returns (uint delegationId); function allDelegation(uint _delegationId) external view returns (address follower, address leader, uint lastUpd); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IMCR { function updateMCRInternal(uint poolValueInEth, bool forceUpdate) external; function getMCR() external view returns (uint); function maxMCRFloorIncrement() external view returns (uint24); function mcrFloor() external view returns (uint112); function mcr() external view returns (uint112); function desiredMCR() external view returns (uint112); function lastUpdateTime() external view returns (uint32); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IMemberRoles { enum Role {UnAssigned, AdvisoryBoard, Member, Owner} function payJoiningFee(address _userAddress) external payable; function switchMembership(address _newAddress) external; function switchMembershipOf(address member, address _newAddress) external; function swapOwner(address _newOwnerAddress) external; function kycVerdict(address payable _userAddress, bool verdict) external; function getClaimPayoutAddress(address payable _member) external view returns (address payable); function setClaimPayoutAddress(address payable _address) external; function totalRoles() external view returns (uint256); function changeAuthorized(uint _roleId, address _newAuthorized) external; function members(uint _memberRoleId) external view returns (uint, address[] memory memberArray); function numberOfMembers(uint _memberRoleId) external view returns (uint); function authorized(uint _memberRoleId) external view returns (address); function roles(address _memberAddress) external view returns (uint[] memory); function checkRole(address _memberAddress, uint _roleId) external view returns (bool); function getMemberLengthForAllRoles() external view returns (uint[] memory totalMembers); function memberAtIndex(uint _memberRoleId, uint index) external view returns (address, bool); function membersLength(uint _memberRoleId) external view returns (uint); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface INXMToken { function burn(uint256 amount) external returns (bool); function burnFrom(address from, uint256 value) external returns (bool); function operatorTransfer(address from, uint256 value) external returns (bool); function mint(address account, uint256 amount) external; function isLockedForMV(address member) external view returns (uint); function addToWhiteList(address _member) external returns (bool); function removeFromWhiteList(address _member) external returns (bool); function changeOperator(address _newOperator) external returns (bool); function lockForMemberVote(address _of, uint _days) external; /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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: GPL-3.0-only pragma solidity >=0.5.0; import "./IPriceFeedOracle.sol"; interface IPool { function sellNXM(uint tokenAmount, uint minEthOut) external; function sellNXMTokens(uint tokenAmount) external returns (bool); function minPoolEth() external returns (uint); function transferAssetToSwapOperator(address asset, uint amount) external; function setAssetDataLastSwapTime(address asset, uint32 lastSwapTime) external; function getAssetDetails(address _asset) external view returns ( uint112 min, uint112 max, uint32 lastAssetSwapTime, uint maxSlippageRatio ); function sendClaimPayout ( address asset, address payable payoutAddress, uint amount ) external returns (bool success); function transferAsset( address asset, address payable destination, uint amount ) external; function upgradeCapitalPool(address payable newPoolAddress) external; function priceFeedOracle() external view returns (IPriceFeedOracle); function getPoolValueInEth() external view returns (uint); function transferAssetFrom(address asset, address from, uint amount) external; function getEthForNXM(uint nxmAmount) external view returns (uint ethAmount); function calculateEthForNXM( uint nxmAmount, uint currentTotalAssetValue, uint mcrEth ) external pure returns (uint); function calculateMCRRatio(uint totalAssetValue, uint mcrEth) external pure returns (uint); function calculateTokenSpotPrice(uint totalAssetValue, uint mcrEth) external pure returns (uint tokenPrice); function getTokenPrice(address asset) external view returns (uint tokenPrice); function getMCRRatio() external view returns (uint); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IPooledStaking { function accumulateReward(address contractAddress, uint amount) external; function pushBurn(address contractAddress, uint amount) external; function hasPendingActions() external view returns (bool); function processPendingActions(uint maxIterations) external returns (bool finished); function contractStake(address contractAddress) external view returns (uint); function stakerReward(address staker) external view returns (uint); function stakerDeposit(address staker) external view returns (uint); function stakerContractStake(address staker, address contractAddress) external view returns (uint); function withdraw(uint amount) external; function stakerMaxWithdrawable(address stakerAddress) external view returns (uint); function withdrawReward(address stakerAddress) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IQuotationData { function authQuoteEngine() external view returns (address); function stlp() external view returns (uint); function stl() external view returns (uint); function pm() external view returns (uint); function minDays() external view returns (uint); function tokensRetained() external view returns (uint); function kycAuthAddress() external view returns (address); function refundEligible(address) external view returns (bool); function holdedCoverIDStatus(uint) external view returns (uint); function timestampRepeated(uint) external view returns (bool); enum HCIDStatus {NA, kycPending, kycPass, kycFailedOrRefunded, kycPassNoCover} enum CoverStatus {Active, ClaimAccepted, ClaimDenied, CoverExpired, ClaimSubmitted, Requested} function addInTotalSumAssuredSC(address _add, bytes4 _curr, uint _amount) external; function subFromTotalSumAssuredSC(address _add, bytes4 _curr, uint _amount) external; function subFromTotalSumAssured(bytes4 _curr, uint _amount) external; function addInTotalSumAssured(bytes4 _curr, uint _amount) external; function setTimestampRepeated(uint _timestamp) external; /// @dev Creates a blank new cover. function addCover( uint16 _coverPeriod, uint _sumAssured, address payable _userAddress, bytes4 _currencyCode, address _scAddress, uint premium, uint premiumNXM ) external; function addHoldCover( address payable from, address scAddress, bytes4 coverCurr, uint[] calldata coverDetails, uint16 coverPeriod ) external; function setRefundEligible(address _add, bool status) external; function setHoldedCoverIDStatus(uint holdedCoverID, uint status) external; function setKycAuthAddress(address _add) external; function changeAuthQuoteEngine(address _add) external; function getUintParameters(bytes8 code) external view returns (bytes8 codeVal, uint val); function getProductDetails() external view returns ( uint _minDays, uint _pm, uint _stl, uint _stlp ); function getCoverLength() external view returns (uint len); function getAuthQuoteEngine() external view returns (address _add); function getTotalSumAssured(bytes4 _curr) external view returns (uint amount); function getAllCoversOfUser(address _add) external view returns (uint[] memory allCover); function getUserCoverLength(address _add) external view returns (uint len); function getCoverStatusNo(uint _cid) external view returns (uint8); function getCoverPeriod(uint _cid) external view returns (uint32 cp); function getCoverSumAssured(uint _cid) external view returns (uint sa); function getCurrencyOfCover(uint _cid) external view returns (bytes4 curr); function getValidityOfCover(uint _cid) external view returns (uint date); function getscAddressOfCover(uint _cid) external view returns (uint, address); function getCoverMemberAddress(uint _cid) external view returns (address payable _add); function getCoverPremiumNXM(uint _cid) external view returns (uint _premiumNXM); function getCoverDetailsByCoverID1( uint _cid ) external view returns ( uint cid, address _memberAddress, address _scAddress, bytes4 _currencyCode, uint _sumAssured, uint premiumNXM ); function getCoverDetailsByCoverID2( uint _cid ) external view returns ( uint cid, uint8 status, uint sumAssured, uint16 coverPeriod, uint validUntil ); function getHoldedCoverDetailsByID1( uint _hcid ) external view returns ( uint hcid, address scAddress, bytes4 coverCurr, uint16 coverPeriod ); function getUserHoldedCoverLength(address _add) external view returns (uint); function getUserHoldedCoverByIndex(address _add, uint index) external view returns (uint); function getHoldedCoverDetailsByID2( uint _hcid ) external view returns ( uint hcid, address payable memberAddress, uint[] memory coverDetails ); function getTotalSumAssuredSC(address _add, bytes4 _curr) external view returns (uint amount); function changeCoverStatusNo(uint _cid, uint8 _stat) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface ITokenController { function coverInfo(uint id) external view returns (uint16 claimCount, bool hasOpenClaim, bool hasAcceptedClaim); function claimSubmissionGracePeriod() external view returns (uint); function withdrawCoverNote( address _of, uint[] calldata _coverIds, uint[] calldata _indexes ) external; function markCoverClaimOpen(uint coverId) external; function markCoverClaimClosed(uint coverId, bool isAccepted) external; function changeOperator(address _newOperator) external; function operatorTransfer(address _from, address _to, uint _value) external returns (bool); function lockClaimAssessmentTokens(uint256 _amount, uint256 _time) external; function lockOf(address _of, bytes32 _reason, uint256 _amount, uint256 _time) external returns (bool); function mintCoverNote( address _of, bytes32 _reason, uint256 _amount, uint256 _time ) external; function extendClaimAssessmentLock(uint256 _time) external; function extendLockOf(address _of, bytes32 _reason, uint256 _time) external returns (bool); function increaseClaimAssessmentLock(uint256 _amount) external; function burnFrom(address _of, uint amount) external returns (bool); function burnLockedTokens(address _of, bytes32 _reason, uint256 _amount) external; function reduceLock(address _of, bytes32 _reason, uint256 _time) external; function releaseLockedTokens(address _of, bytes32 _reason, uint256 _amount) external; function addToWhitelist(address _member) external; function removeFromWhitelist(address _member) external; function mint(address _member, uint _amount) external; function lockForMemberVote(address _of, uint _days) external; function withdrawClaimAssessmentTokens(address _of) external; function getLockReasons(address _of) external view returns (bytes32[] memory reasons); function getLockedTokensValidity(address _of, bytes32 reason) external view returns (uint256 validity); function getUnlockableTokens(address _of) external view returns (uint256 unlockableTokens); function tokensLocked(address _of, bytes32 _reason) external view returns (uint256 amount); function tokensLockedWithValidity(address _of, bytes32 _reason) external view returns (uint256 amount, uint256 validity); function tokensUnlockable(address _of, bytes32 _reason) external view returns (uint256 amount); function totalSupply() external view returns (uint256); function tokensLockedAtTime(address _of, bytes32 _reason, uint256 _time) external view returns (uint256 amount); function totalBalanceOf(address _of) external view returns (uint256 amount); function totalLockedBalance(address _of) external view returns (uint256 amount); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface ITokenData { function walletAddress() external view returns (address payable); function lockTokenTimeAfterCoverExp() external view returns (uint); function bookTime() external view returns (uint); function lockCADays() external view returns (uint); function lockMVDays() external view returns (uint); function scValidDays() external view returns (uint); function joiningFee() external view returns (uint); function stakerCommissionPer() external view returns (uint); function stakerMaxCommissionPer() external view returns (uint); function tokenExponent() external view returns (uint); function priceStep() external view returns (uint); function depositedCN(uint) external view returns (uint amount, bool isDeposited); function lastCompletedStakeCommission(address) external view returns (uint); function changeWalletAddress(address payable _address) external; function getStakerStakedContractByIndex( address _stakerAddress, uint _stakerIndex ) external view returns (address stakedContractAddress); function getStakerStakedBurnedByIndex( address _stakerAddress, uint _stakerIndex ) external view returns (uint burnedAmount); function getStakerStakedUnlockableBeforeLastBurnByIndex( address _stakerAddress, uint _stakerIndex ) external view returns (uint unlockable); function getStakerStakedContractIndex( address _stakerAddress, uint _stakerIndex ) external view returns (uint scIndex); function getStakedContractStakerIndex( address _stakedContractAddress, uint _stakedContractIndex ) external view returns (uint sIndex); function getStakerInitialStakedAmountOnContract( address _stakerAddress, uint _stakerIndex ) external view returns (uint amount); function getStakerStakedContractLength( address _stakerAddress ) external view returns (uint length); function getStakerUnlockedStakedTokens( address _stakerAddress, uint _stakerIndex ) external view returns (uint amount); function pushUnlockedStakedTokens( address _stakerAddress, uint _stakerIndex, uint _amount ) external; function pushBurnedTokens( address _stakerAddress, uint _stakerIndex, uint _amount ) external; function pushUnlockableBeforeLastBurnTokens( address _stakerAddress, uint _stakerIndex, uint _amount ) external; function setUnlockableBeforeLastBurnTokens( address _stakerAddress, uint _stakerIndex, uint _amount ) external; function pushEarnedStakeCommissions( address _stakerAddress, address _stakedContractAddress, uint _stakedContractIndex, uint _commissionAmount ) external; function pushRedeemedStakeCommissions( address _stakerAddress, uint _stakerIndex, uint _amount ) external; function getStakerEarnedStakeCommission( address _stakerAddress, uint _stakerIndex ) external view returns (uint); function getStakerRedeemedStakeCommission( address _stakerAddress, uint _stakerIndex ) external view returns (uint); function getStakerTotalEarnedStakeCommission( address _stakerAddress ) external view returns (uint totalCommissionEarned); function getStakerTotalReedmedStakeCommission( address _stakerAddress ) external view returns (uint totalCommissionRedeemed); function setDepositCN(uint coverId, bool flag) external; function getStakedContractStakerByIndex( address _stakedContractAddress, uint _stakedContractIndex ) external view returns (address stakerAddress); function getStakedContractStakersLength( address _stakedContractAddress ) external view returns (uint length); function addStake( address _stakerAddress, address _stakedContractAddress, uint _amount ) external returns (uint scIndex); function bookCATokens(address _of) external; function isCATokensBooked(address _of) external view returns (bool res); function setStakedContractCurrentCommissionIndex( address _stakedContractAddress, uint _index ) external; function setLastCompletedStakeCommissionIndex( address _stakerAddress, uint _index ) external; function setStakedContractCurrentBurnIndex( address _stakedContractAddress, uint _index ) external; function setDepositCNAmount(uint coverId, uint amount) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface INXMMaster { function tokenAddress() external view returns (address); function owner() external view returns (address); function masterInitialized() external view returns (bool); function isInternal(address _add) external view returns (bool); function isPause() external view returns (bool check); function isOwner(address _add) external view returns (bool); function isMember(address _add) external view returns (bool); function checkIsAuthToGoverned(address _add) external view returns (bool); function dAppLocker() external view returns (address _add); function getLatestAddress(bytes2 _contractName) external view returns (address payable contractAddress); function upgradeMultipleContracts( bytes2[] calldata _contractCodes, address payable[] calldata newAddresses ) external; function removeContracts(bytes2[] calldata contractCodesToRemove) external; function addNewInternalContracts( bytes2[] calldata _contractCodes, address payable[] calldata newAddresses, uint[] calldata _types ) external; function updateOwnerParameters(bytes8 code, address payable val) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IPriceFeedOracle { function daiAddress() external view returns (address); function ETH() external view returns (address); function getAssetToEthRate(address asset) external view returns (uint); function getAssetForEth(address asset, uint ethIn) external view returns (uint); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"masterAddress","type":"address"},{"internalType":"address","name":"_daiAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"DAI","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"claimId","type":"uint256"}],"name":"changeClaimStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"changeDependentContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_masterAddress","type":"address"}],"name":"changeMasterAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"records","type":"uint256"}],"name":"claimAllPendingReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_claimId","type":"uint256"}],"name":"closeClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"getAllPendingRewardOfUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"currency","type":"bytes4"}],"name":"getCurrencyAssetAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"check","type":"uint256"},{"internalType":"uint256","name":"claimId","type":"uint256"}],"name":"getRewardAndClaimedStatus","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"getRewardToBeDistributedByUser","outputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"check","type":"uint256"},{"internalType":"uint256","name":"voteid","type":"uint256"},{"internalType":"uint256","name":"flag","type":"uint256"}],"name":"getRewardToBeGiven","outputs":[{"internalType":"uint256","name":"tokenCalculated","type":"uint256"},{"internalType":"bool","name":"lastClaimedCheck","type":"bool"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"perc","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mcr","outputs":[{"internalType":"contract IMCR","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ms","outputs":[{"internalType":"contract INXMMaster","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nxMasterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"coverId","type":"uint256"}],"name":"unlockCoverNote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newAdd","type":"address"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004a8f38038062004a8f833981810160405260408110156200003757600080fd5b50805160209091015162000054826001600160e01b036200007b16565b600d80546001600160a01b0319166001600160a01b03929092169190911790555062000106565b6000546001600160a01b031615620000da576000546001600160a01b03163314620000da576040805162461bcd60e51b815260206004820152600a6024820152692737ba1036b0b9ba32b960b11b604482015290519081900360640190fd5b600080546001600160a01b039092166001600160a01b0319928316811790915560018054909216179055565b61497980620001166000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063a0b2d57f116100a2578063d46655f411610071578063d46655f414610282578063df31f208146102a8578063e0bab4c4146102f7578063e3dee239146102ff578063f17a3bec146103265761010b565b8063a0b2d57f14610238578063b8caedc414610240578063bf44d1bb14610248578063c3e4d672146102655761010b565b8063452efce9116100de578063452efce9146101b457806363bb23be146101da5780637f6715c9146101f75780638322fff2146102145761010b565b80630900f010146101105780630ea9c9841461013857806335afb14e1461014057806341becc0714610178575b600080fd5b6101366004803603602081101561012657600080fd5b50356001600160a01b031661032e565b005b6101366104bc565b6101666004803603602081101561015657600080fd5b50356001600160a01b0316610b64565b60408051918252519081900360200190f35b61019b6004803603604081101561018e57600080fd5b5080359060200135610c9b565b6040805192835290151560208301528051918290030190f35b610166600480360360208110156101ca57600080fd5b50356001600160a01b0316611011565b610136600480360360208110156101f057600080fd5b5035611315565b6101366004803603602081101561020d57600080fd5b5035611566565b61021c611675565b604080516001600160a01b039092168252519081900360200190f35b61021c61168d565b61021c61169c565b6101366004803603602081101561025e57600080fd5b50356116ab565b6101366004803603602081101561027b57600080fd5b5035611734565b6101366004803603602081101561029857600080fd5b50356001600160a01b03166118a7565b6102d1600480360360608110156102be57600080fd5b5080359060208101359060400135611930565b604080519485529215156020850152838301919091526060830152519081900360800190f35b61021c611e25565b61021c6004803603602081101561031557600080fd5b50356001600160e01b031916611e34565b61021c611ee0565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561037957600080fd5b505afa15801561038d573d6000803e3d6000fd5b505050506040513d60208110156103a357600080fd5b50516103ae57600080fd5b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156103f957600080fd5b505afa15801561040d573d6000803e3d6000fd5b505050506040513d602081101561042357600080fd5b5051905080156104b8576002546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561048357600080fd5b505af1158015610497573d6000803e3d6000fd5b505050506040513d60208110156104ad57600080fd5b50516104b857600080fd5b5050565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561050757600080fd5b505afa15801561051b573d6000803e3d6000fd5b505050506040513d602081101561053157600080fd5b505161053c57600080fd5b600054604080516227050b60e31b81526110d360f21b600482015290516001600160a01b0390921691630138285891602480820192602092909190829003018186803b15801561058b57600080fd5b505afa15801561059f573d6000803e3d6000fd5b505050506040513d60208110156105b557600080fd5b5051600680546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b81526110d160f21b6004820152905191909216916301382858916024808301926020929190829003018186803b15801561061a57600080fd5b505afa15801561062e573d6000803e3d6000fd5b505050506040513d602081101561064457600080fd5b5051600780546001600160a01b0319166001600160a01b03928316179055600054604080516313aedd4b60e31b815290519190921691639d76ea58916004808301926020929190829003018186803b15801561069f57600080fd5b505afa1580156106b3573d6000803e3d6000fd5b505050506040513d60208110156106c957600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261544360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b15801561072e57600080fd5b505afa158015610742573d6000803e3d6000fd5b505050506040513d602081101561075857600080fd5b5051600380546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261151160f21b6004820152905191909216916301382858916024808301926020929190829003018186803b1580156107bd57600080fd5b505afa1580156107d1573d6000803e3d6000fd5b505050506040513d60208110156107e757600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155600054604080516227050b60e31b815261145160f21b9381019390935251921691630138285891602480820192602092909190829003018186803b15801561084c57600080fd5b505afa158015610860573d6000803e3d6000fd5b505050506040513d602081101561087657600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b81526123ab60f11b6004820152905191909216916301382858916024808301926020929190829003018186803b1580156108db57600080fd5b505afa1580156108ef573d6000803e3d6000fd5b505050506040513d602081101561090557600080fd5b5051600980546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261505360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b15801561096a57600080fd5b505afa15801561097e573d6000803e3d6000fd5b505050506040513d602081101561099457600080fd5b5051600a80546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b81526126a960f11b6004820152905191909216916301382858916024808301926020929190829003018186803b1580156109f957600080fd5b505afa158015610a0d573d6000803e3d6000fd5b505050506040513d6020811015610a2357600080fd5b5051600b80546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261503160f01b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610a8857600080fd5b505afa158015610a9c573d6000803e3d6000fd5b505050506040513d6020811015610ab257600080fd5b5051600880546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b8152614d4360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610b1757600080fd5b505afa158015610b2b573d6000803e3d6000fd5b505050506040513d6020811015610b4157600080fd5b5051600c80546001600160a01b0319166001600160a01b03909216919091179055565b600080610b7083611011565b600a5460408051630ea474c760e01b81526001600160a01b03878116600483015291519394506000939190921691630ea474c7916024808301926020929190829003018186803b158015610bc357600080fd5b505afa158015610bd7573d6000803e3d6000fd5b505050506040513d6020811015610bed57600080fd5b5051600954604080516326fceb5d60e11b81526001600160a01b03888116600483015291519394506000939190921691634df9d6ba916024808301926020929190829003018186803b158015610c4257600080fd5b505afa158015610c56573d6000803e3d6000fd5b505050506040513d6020811015610c6c57600080fd5b50519050610c9081610c84858563ffffffff611eef16565b9063ffffffff611eef16565b93505050505b919050565b60008060008060008660011415610e525760075460408051630d3c678b60e21b815233600482015290516001600160a01b03909216916334f19e2c91602480820192602092909190829003018186803b158015610cf757600080fd5b505afa158015610d0b573d6000803e3d6000fd5b505050506040513d6020811015610d2157600080fd5b5051905060005b81811015610e4c576007546040805163fc57c9bb60e01b81523360048201526024810184905290516001600160a01b039092169163fc57c9bb91604480820192602092909190829003018186803b158015610d8257600080fd5b505afa158015610d96573d6000803e3d6000fd5b505050506040513d6020811015610dac57600080fd5b5051600754604080516354a1b43160e01b81526004810184905290519296506001600160a01b03909116916354a1b43191602480820192608092909190829003018186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d6080811015610e2757600080fd5b5060208101516060909101519550925086831415610e4457610e4c565b600101610d28565b50610ff4565b6007546040805163274d865f60e01b815233600482015290516001600160a01b039092169163274d865f91602480820192602092909190829003018186803b158015610e9d57600080fd5b505afa158015610eb1573d6000803e3d6000fd5b505050506040513d6020811015610ec757600080fd5b5051905060005b81811015610ff25760075460408051637968b71560e11b81523360048201526024810184905290516001600160a01b039092169163f2d16e2a91604480820192602092909190829003018186803b158015610f2857600080fd5b505afa158015610f3c573d6000803e3d6000fd5b505050506040513d6020811015610f5257600080fd5b5051600754604080516354a1b43160e01b81526004810184905290519296506001600160a01b03909116916354a1b43191602480820192608092909190829003018186803b158015610fa357600080fd5b505afa158015610fb7573d6000803e3d6000fd5b505050506040513d6080811015610fcd57600080fd5b5060208101516060909101519550925086831415610fea57610ff2565b600101610ece565b505b61100087846001611930565b509199959850949650505050505050565b60075460408051630d3c678b60e21b81526001600160a01b0384811660048301529151600093849316916334f19e2c916024808301926020929190829003018186803b15801561106057600080fd5b505afa158015611074573d6000803e3d6000fd5b505050506040513d602081101561108a57600080fd5b5051600754604080516304ecffeb60e01b81526001600160a01b038781166004830152825194955060009485948594859493909116926304ecffeb9260248083019392829003018186803b1580156110e157600080fd5b505afa1580156110f5573d6000803e3d6000fd5b505050506040513d604081101561110b57600080fd5b5080516020909101519094509250835b858110156111d4576007546040805163fc57c9bb60e01b81526001600160a01b038b81166004830152602482018590529151919092169163fc57c9bb916044808301926020929190829003018186803b15801561117757600080fd5b505afa15801561118b573d6000803e3d6000fd5b505050506040513d60208110156111a157600080fd5b505191506111b26001836000611930565b509194506111ca91508890508463ffffffff611eef16565b965060010161111b565b506007546040805163274d865f60e01b81526001600160a01b038a811660048301529151919092169163274d865f916024808301926020929190829003018186803b15801561122257600080fd5b505afa158015611236573d6000803e3d6000fd5b505050506040513d602081101561124c57600080fd5b50519450825b8581101561130a5760075460408051637968b71560e11b81526001600160a01b038b81166004830152602482018590529151919092169163f2d16e2a916044808301926020929190829003018186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d60208110156112d857600080fd5b505191506112e860008381611930565b5091945061130091508890508463ffffffff611eef16565b9650600101611252565b505050505050919050565b6000809054906101000a90046001600160a01b03166001600160a01b031663ff0938a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561136257600080fd5b505afa158015611376573d6000803e3d6000fd5b505050506040513d602081101561138c57600080fd5b505115801561141357506000546040805163288c314960e21b815233600482015290516001600160a01b039092169163a230c52491602480820192602092909190829003018186803b1580156113e157600080fd5b505afa1580156113f5573d6000803e3d6000fd5b505050506040513d602081101561140b57600080fd5b505115156001145b61141c57600080fd5b61142581611f52565b600a5460408051632e1b8c8760e21b815233600482015290516001600160a01b039092169163b86e321c9160248082019260009290919082900301818387803b15801561147157600080fd5b505af1158015611485573d6000803e3d6000fd5b5050600954604080516305d38c7160e21b8152336004820152602481018690529051600094506001600160a01b03909216925063174e31c491604480830192602092919082900301818787803b1580156114de57600080fd5b505af11580156114f2573d6000803e3d6000fd5b505050506040513d602081101561150857600080fd5b5051905080156104b8576002546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561048357600080fd5b6000809054906101000a90046001600160a01b03166001600160a01b031663ff0938a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b357600080fd5b505afa1580156115c7573d6000803e3d6000fd5b505050506040513d60208110156115dd57600080fd5b5051156115e957600080fd5b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d602081101561165e57600080fd5b505161166957600080fd5b61167281612b6c565b50565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000546001600160a01b031681565b600c546001600160a01b031681565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d602081101561172057600080fd5b505161172b57600080fd5b61167281612d9a565b60075460408051635aef244760e01b815260048101849052905160009283926001600160a01b0390911691635aef24479160248082019260c092909190829003018186803b15801561178557600080fd5b505afa158015611799573d6000803e3d6000fd5b505050506040513d60c08110156117af57600080fd5b50606081015160809091015190925090506000600c8314158061185a575042611858600760009054906101000a90046001600160a01b03166001600160a01b031663ee8dea636040518163ffffffff1660e01b815260040160206040518083038186803b15801561181f57600080fd5b505afa158015611833573d6000803e3d6000fd5b505050506040513d602081101561184957600080fd5b5051849063ffffffff611eef16565b105b9050806118985760405162461bcd60e51b815260040180806020018281038252602c815260200180614919602c913960400191505060405180910390fd5b6118a184612b6c565b50505050565b6000546001600160a01b031615611904576000546001600160a01b03163314611904576040805162461bcd60e51b815260206004820152600a6024820152692737ba1036b0b9ba32b960b11b604482015290519081900360640190fd5b600080546001600160a01b039092166001600160a01b0319928316811790915560018054909216179055565b6000806000806000806000806000600760009054906101000a90046001600160a01b03166001600160a01b03166354a1b4318c6040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60808110156119c157600080fd5b5080516020808301516040808501516060909501516007548251631381b00560e21b815260048101859052925160009f50959d50929a509498509396508b936001600160a01b0390911692634e06c01492602480840193919291829003018186803b158015611a2f57600080fd5b505afa158015611a43573d6000803e3d6000fd5b505050506040513d6020811015611a5957600080fd5b50519050600081900b611a6b57600198505b8460000b8160000b148015611a885750831580611a8857508a6001145b15611e16578c60011415611b1f576007546040805163c49a8b1960e01b81526004810189905290516001600160a01b039092169163c49a8b1991602480820192606092909190829003018186803b158015611ae257600080fd5b505afa158015611af6573d6000803e3d6000fd5b505050506040513d6060811015611b0c57600080fd5b5080516040909101519097509250611ba7565b6007546040805163c49a8b1960e01b81526004810189905290516001600160a01b039092169163c49a8b1991602480820192606092909190829003018186803b158015611b6b57600080fd5b505afa158015611b7f573d6000803e3d6000fd5b505050506040513d6060811015611b9557600080fd5b50602081015160409091015190975092505b8615611e16578c60011415611cc7578460000b60011415611c4457600754604080516336f4019360e21b81526004810189905290516001600160a01b039092169163dbd0064c91602480820192606092909190829003018186803b158015611c0e57600080fd5b505afa158015611c22573d6000803e3d6000fd5b505050506040513d6060811015611c3857600080fd5b50602001519150611cc2565b600754604080516336f4019360e21b81526004810189905290516001600160a01b039092169163dbd0064c91602480820192606092909190829003018186803b158015611c9057600080fd5b505afa158015611ca4573d6000803e3d6000fd5b505050506040513d6060811015611cba57600080fd5b506040015191505b611dd3565b8460000b60011415611d555760075460408051634a4ecebb60e11b81526004810189905290516001600160a01b039092169163949d9d7691602480820192606092909190829003018186803b158015611d1f57600080fd5b505afa158015611d33573d6000803e3d6000fd5b505050506040513d6060811015611d4957600080fd5b50602001519150611dd3565b60075460408051634a4ecebb60e11b81526004810189905290516001600160a01b039092169163949d9d7691602480820192606092909190829003018186803b158015611da157600080fd5b505afa158015611db5573d6000803e3d6000fd5b505050506040513d6060811015611dcb57600080fd5b506040015191505b611e13611de783606463ffffffff612f4416565b611e0785611dfb8b8d63ffffffff612f4416565b9063ffffffff612f4416565b9063ffffffff612f9d16565b99505b50505050505093509350935093565b600d546001600160a01b031681565b60006208aa8960eb1b6001600160e01b031983161415611e69575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610c96565b6244414960e81b6001600160e01b031983161415611e935750600d546001600160a01b0316610c96565b6040805162461bcd60e51b815260206004820152601b60248201527f436c61696d735265776172643a20756e6b6e6f776e2061737365740000000000604482015290519081900360640190fd5b6001546001600160a01b031681565b600082820183811015611f49576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60075460408051630d3c678b60e21b815233600482015290516000926001600160a01b0316916334f19e2c916024808301926020929190829003018186803b158015611f9d57600080fd5b505afa158015611fb1573d6000803e3d6000fd5b505050506040513d6020811015611fc757600080fd5b5051600754604080516304ecffeb60e01b8152336004820152815193945060009384936001600160a01b0316926304ecffeb9260248082019391829003018186803b15801561201557600080fd5b505afa158015612029573d6000803e3d6000fd5b505050506040513d604081101561203f57600080fd5b505190506000808080808080878a5b8b8210801561205c57508c85105b156123cd576007546040805163fc57c9bb60e01b81523360048201526024810185905290516001600160a01b039092169163fc57c9bb91604480820192602092909190829003018186803b1580156120b357600080fd5b505afa1580156120c7573d6000803e3d6000fd5b505050506040513d60208110156120dd57600080fd5b50519a506120ee60018c6000611930565b929a5090985090935050808c14801561210957506001871515145b156121115750805b600754604080516354a1b43160e01b8152600481018e905290516001600160a01b03909216916354a1b43191602480820192608092909190829003018186803b15801561215d57600080fd5b505afa158015612171573d6000803e3d6000fd5b505050506040513d608081101561218757600080fd5b5060208101516060909101519650935082158015906121a4575085155b15612220576007546040805163f27a104760e01b8152600481018e9052600160248201819052915191909701966001600160a01b039092169163f27a104791604480830192600092919082900301818387803b15801561220357600080fd5b505af1158015612217573d6000803e3d6000fd5b505050506123a9565b821580156122a7575060075460408051631381b00560e21b81526004810187905290516001600160a01b0390921691634e06c01491602480820192602092909190829003018186803b15801561227557600080fd5b505afa158015612289573d6000803e3d6000fd5b505050506040513d602081101561229f57600080fd5b505160000b15155b80156122b1575085155b156123a9576007546040805163c49a8b1960e01b81526004810187905290516001600160a01b039092169163c49a8b1991602480820192606092909190829003018186803b15801561230257600080fd5b505afa158015612316573d6000803e3d6000fd5b505050506040513d606081101561232c57600080fd5b505192508261233c576001909401935b6007546040805163f27a104760e01b8152600481018e90526001602482015290516001600160a01b039092169163f27a10479160448082019260009290919082900301818387803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050505b87156123c2576123bf888a63ffffffff611eef16565b98505b60019091019061204e565b8b8114156124455760075460408051632f9f2f1760e21b81523360048201526024810185905290516001600160a01b039092169163be7cbc5c9160448082019260009290919082900301818387803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b505050506124b1565b60075460408051632f9f2f1760e21b81523360048201526024810184905290516001600160a01b039092169163be7cbc5c9160448082019260009290919082900301818387803b15801561249857600080fd5b505af11580156124ac573d6000803e3d6000fd5b505050505b6007546040805163274d865f60e01b815233600482015290516001600160a01b039092169163274d865f91602480820192602092909190829003018186803b1580156124fc57600080fd5b505afa158015612510573d6000803e3d6000fd5b505050506040513d602081101561252657600080fd5b5051600480546040805163034b044160e21b81529051939f508f94506000936001600160a01b0390921692630d2c1104928282019260209290829003018186803b15801561257357600080fd5b505afa158015612587573d6000803e3d6000fd5b505050506040513d602081101561259d57600080fd5b5051905060006125b3828863ffffffff612f4416565b905060006125c7428463ffffffff611eef16565b6003546040805163023e00b360e21b815233600482015262434c4160e81b602482015290519293506000926001600160a01b03909216916308f802cc91604480820192602092909190829003018186803b15801561262457600080fd5b505afa158015612638573d6000803e3d6000fd5b505050506040513d602081101561264e57600080fd5b50519050818111156126fc578161266b828563ffffffff612fdf16565b101561268457612681818363ffffffff612fdf16565b92505b60035460408051631fea558f60e01b815233600482015262434c4160e81b60248201526044810186905290516001600160a01b0390921691631fea558f9160648082019260009290919082900301818387803b1580156126e357600080fd5b505af11580156126f7573d6000803e3d6000fd5b505050505b5050600754604080516304ecffeb60e01b815233600482015281516001600160a01b0390931694506304ecffeb935060248082019391829003018186803b15801561274657600080fd5b505afa15801561275a573d6000803e3d6000fd5b505050506040513d604081101561277057600080fd5b50602001519950600094508991508b90505b8b8210801561279057508c85105b156129ea5760075460408051637968b71560e11b81523360048201526024810185905290516001600160a01b039092169163f2d16e2a91604480820192602092909190829003018186803b1580156127e757600080fd5b505afa1580156127fb573d6000803e3d6000fd5b505050506040513d602081101561281157600080fd5b50519a5061282160008c81611930565b50919950975050808c14801561283957506001871515145b156128415750805b600754604080516354a1b43160e01b8152600481018e905290516001600160a01b03909216916354a1b43191602480820192608092909190829003018186803b15801561288d57600080fd5b505afa1580156128a1573d6000803e3d6000fd5b505050506040513d60808110156128b757600080fd5b506020810151606090910151965093508515801561294e575060075460408051631381b00560e21b81526004810187905290516001600160a01b0390921691634e06c01491602480820192602092909190829003018186803b15801561291c57600080fd5b505afa158015612930573d6000803e3d6000fd5b505050506040513d602081101561294657600080fd5b505160000b15155b156129c6576007546040805163f27a104760e01b8152600481018e90526001602482015290516001600160a01b039092169163f27a10479160448082019260009290919082900301818387803b1580156129a757600080fd5b505af11580156129bb573d6000803e3d6000fd5b505060019096019550505b87156129df576129dc888a63ffffffff611eef16565b98505b600190910190612782565b8815612a79576002546040805163a9059cbb60e01b8152336004820152602481018c905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015612a4457600080fd5b505af1158015612a58573d6000803e3d6000fd5b505050506040513d6020811015612a6e57600080fd5b5051612a7957600080fd5b8b811415612af15760075460408051630f305e9560e21b81523360048201526024810185905290516001600160a01b0390921691633cc17a549160448082019260009290919082900301818387803b158015612ad457600080fd5b505af1158015612ae8573d6000803e3d6000fd5b50505050612b5d565b60075460408051630f305e9560e21b81523360048201526024810184905290516001600160a01b0390921691633cc17a549160448082019260009290919082900301818387803b158015612b4457600080fd5b505af1158015612b58573d6000803e3d6000fd5b505050505b50505050505050505050505050565b600754604080516396ff592f60e01b81526004810184905281516000936001600160a01b0316926396ff592f9260248082019391829003018186803b158015612bb457600080fd5b505afa158015612bc8573d6000803e3d6000fd5b505050506040513d6040811015612bde57600080fd5b506020015160075460408051630325ea3760e01b81526004810186905281519394506000936001600160a01b0390931692630325ea3792602480840193919291829003018186803b158015612c3257600080fd5b505afa158015612c46573d6000803e3d6000fd5b505050506040513d6040811015612c5c57600080fd5b5060200151905080612c7857612c73838383613021565b612d95565b60018110158015612c8a575060058111155b15612c9a57612c738383836134e7565b80600c1415612d95576000612cae83613994565b90508015612d275760065460408051637a88deff60e11b815260048101879052600e602482015290516001600160a01b039092169163f511bdfe9160448082019260009290919082900301818387803b158015612d0a57600080fd5b505af1158015612d1e573d6000803e3d6000fd5b505050506118a1565b60065460408051637a88deff60e11b815260048101879052600c602482015290516001600160a01b039092169163f511bdfe9160448082019260009290919082900301818387803b158015612d7b57600080fd5b505af1158015612d8f573d6000803e3d6000fd5b50505050505b505050565b60055460408051633c2d4daf60e01b81526004810184905290516000926001600160a01b031691633c2d4daf916024808301926020929190829003018186803b158015612de657600080fd5b505afa158015612dfa573d6000803e3d6000fd5b505050506040513d6020811015612e1057600080fd5b5051604080516121a760f11b602080830191909152606084901b6bffffffffffffffffffffffff1916602283015260368083018790528351808403909101815260568301808552815191830191909120600354631729236360e21b9092526001600160a01b03808716605a860152607a850182905294519596509460009490911692635ca48d8c92609a808301939192829003018186803b158015612eb457600080fd5b505afa158015612ec8573d6000803e3d6000fd5b505050506040513d6020811015612ede57600080fd5b5051905080156118a15760035460408051634063ab0d60e11b81526001600160a01b0386811660048301526024820186905260448201859052915191909216916380c7561a91606480830192600092919082900301818387803b158015612d7b57600080fd5b600082612f5357506000611f4c565b82820282848281612f6057fe5b0414611f495760405162461bcd60e51b81526004018080602001828103825260218152602001806148f86021913960400191505060405180910390fd5b6000611f4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614077565b6000611f4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614119565b6006546040805163778aa67960e11b81526004810186905290516001600160a01b039092169163ef154cf291602480820192602092909190829003018186803b15801561306d57600080fd5b505afa158015613081573d6000803e3d6000fd5b505050506040513d602081101561309757600080fd5b505160000b60011415612d9557600654604080516357af051560e01b815260048101869052600060248201819052915191926001600160a01b0316916357af051591604480820192602092909190829003018186803b1580156130f957600080fd5b505afa15801561310d573d6000803e3d6000fd5b505050506040513d602081101561312357600080fd5b505160075460408051631509d4c960e21b81526004810188905260016024820152815193945060009384938493849384936001600160a01b0390931692635427532492604480840193919291829003018186803b15801561318357600080fd5b505afa158015613197573d6000803e3d6000fd5b505050506040513d60408110156131ad57600080fd5b506020015160075460408051631509d4c960e21b8152600481018d9052600019602482015281519398506001600160a01b03909216926354275324926044808201939291829003018186803b15801561320557600080fd5b505afa158015613219573d6000803e3d6000fd5b505050506040513d604081101561322f57600080fd5b50602001519350613246858563ffffffff611eef16565b925061325985606463ffffffff612f4416565b945061326c84606463ffffffff612f4416565b93508561327c576003965061345f565b60055460408051631ce48f3d60e01b8152600481018b9052905161330e92670de0b6b3a7640000926001600160a01b0390911691631ce48f3d91602480820192602092909190829003018186803b1580156132d657600080fd5b505afa1580156132ea573d6000803e3d6000fd5b505050506040513d602081101561330057600080fd5b50519063ffffffff612f4416565b905061332181600563ffffffff612f4416565b86111561342b57604661333a868563ffffffff612f9d16565b11156133bd57600554600797506001600160a01b031663ae1c5eca8960015b6040518363ffffffff1660e01b8152600401808381526020018260ff1660ff16815260200192505050600060405180830381600087803b15801561339c57600080fd5b505af11580156133b0573d6000803e3d6000fd5b5050505060019150613426565b60466133cf858563ffffffff612f9d16565b11156133f257600554600697506001600160a01b031663ae1c5eca896002613359565b613402848463ffffffff612f9d16565b613412868563ffffffff612f9d16565b11156134215760049650613426565b600596505b61345f565b61343b848463ffffffff612f9d16565b61344b868563ffffffff612f9d16565b111561345a576002965061345f565b600396505b60065460408051637a88deff60e11b8152600481018c9052602481018a905290516001600160a01b039092169163f511bdfe9160448082019260009290919082900301818387803b1580156134b357600080fd5b505af11580156134c7573d6000803e3d6000fd5b5050505081156134dc576134dc898989614173565b505050505050505050565b6006546040805163778aa67960e11b81526004810186905290516001600160a01b039092169163ef154cf291602480820192602092909190829003018186803b15801561353357600080fd5b505afa158015613547573d6000803e3d6000fd5b505050506040513d602081101561355d57600080fd5b505160000b60011415612d9557600654604080516357af051560e01b815260048101869052600160248201529051600092849284926001600160a01b03909216916357af051591604480820192602092909190829003018186803b1580156135c457600080fd5b505afa1580156135d8573d6000803e3d6000fd5b505050506040513d60208110156135ee57600080fd5b505160055460408051631ce48f3d60e01b815260048101899052905192935060009261365092670de0b6b3a7640000926001600160a01b0390911691631ce48f3d91602480820192602092909190829003018186803b1580156132d657600080fd5b9050600061366582600563ffffffff612f4416565b831015613670575060015b60075460408051635ca1ce8b60e01b8152600481018b90526001602482015281516000936001600160a01b031692635ca1ce8b9260448082019391829003018186803b1580156136bf57600080fd5b505afa1580156136d3573d6000803e3d6000fd5b505050506040513d60408110156136e957600080fd5b506020015160075460408051635ca1ce8b60e01b8152600481018d9052600019602482015281519394506000936001600160a01b0390931692635ca1ce8b92604480840193919291829003018186803b15801561374557600080fd5b505afa158015613759573d6000803e3d6000fd5b505050506040513d604081101561376f57600080fd5b506020015190506000613788838363ffffffff611eef16565b11156138445760326137b46137a3848463ffffffff611eef16565b611e0785606463ffffffff612f4416565b101580156137c25750600186115b80156137cf575060058611155b80156137d9575082155b156137eb576008975060019650613844565b6032613811613800848463ffffffff611eef16565b611e0784606463ffffffff612f4416565b1015801561381f5750600186115b801561382c575060058611155b8015613836575082155b156138445760099750600296505b82600114801561385e5750856002148061385e5750856004145b1561387057600a9750600196506138a3565b8260011480156138955750856005148061388a5750856003145b806138955750856001145b156138a357600b9750600296505b60065460408051637a88deff60e11b8152600481018d9052602481018b905290516001600160a01b039092169163f511bdfe9160448082019260009290919082900301818387803b1580156138f757600080fd5b505af115801561390b573d6000803e3d6000fd5b50506005546040805163570e2f6560e11b8152600481018e905260ff8c16602482015290516001600160a01b03909216935063ae1c5eca925060448082019260009290919082900301818387803b15801561396557600080fd5b505af1158015613979573d6000803e3d6000fd5b505050506139888a8a8a614173565b50505050505050505050565b60055460408051631ce48f3d60e01b815260048101849052905160009283926001600160a01b0390911691631ce48f3d91602480820192602092909190829003018186803b1580156139e557600080fd5b505afa1580156139f9573d6000803e3d6000fd5b505050506040513d6020811015613a0f57600080fd5b505190506000613a2d82670de0b6b3a764000063ffffffff612f4416565b600554604080516322d5c8bd60e21b81526004810188905290519293506000926001600160a01b0390921691638b5722f491602480820192602092909190829003018186803b158015613a7f57600080fd5b505afa158015613a93573d6000803e3d6000fd5b505050506040513d6020811015613aa957600080fd5b505190506000613ab882611e34565b60055460408051633c2d4daf60e01b8152600481018a905290519293506000926001600160a01b0390921691633c2d4daf91602480820192602092909190829003018186803b158015613b0a57600080fd5b505afa158015613b1e573d6000803e3d6000fd5b505050506040513d6020811015613b3457600080fd5b5051600b5460408051621d624360e71b81526001600160a01b03808516600483015291519394506000939190921691630eb12180916024808301926020929190829003018186803b158015613b8857600080fd5b505afa158015613b9c573d6000803e3d6000fd5b505050506040513d6020811015613bb257600080fd5b5051600854604080516375466b9b60e01b81526001600160a01b0387811660048301528085166024830152604482018a9052915193945060009391909216916375466b9b91606480830192602092919082900301818787803b158015613c1757600080fd5b505af1158015613c2b573d6000803e3d6000fd5b505050506040513d6020811015613c4157600080fd5b5051905080156140685760055460408051638d16a10560e01b8152600481018c905281516000936001600160a01b031692638d16a1059260248082019391829003018186803b158015613c9357600080fd5b505afa158015613ca7573d6000803e3d6000fd5b505050506040513d6040811015613cbd57600080fd5b5060209081015160085460408051630681320d60e51b81526001600160a01b038a811660048301529151939550600094919092169263d02641a0926024808201939291829003018186803b158015613d1457600080fd5b505afa158015613d28573d6000803e3d6000fd5b505050506040513d6020811015613d3e57600080fd5b505190506000613d6082611e078b670de0b6b3a764000063ffffffff612f4416565b600a54604080516368989a5960e01b81526001600160a01b0387811660048301526024820185905291519394509116916368989a599160448082019260009290919082900301818387803b158015613db757600080fd5b505af1158015613dcb573d6000803e3d6000fd5b505050506000600560009054906101000a90046001600160a01b03166001600160a01b0316638d16a1058e6040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b158015613e2957600080fd5b505afa158015613e3d573d6000803e3d6000fd5b505050506040513d6040811015613e5357600080fd5b5060200151600554604080516360a230e760e01b81526001600160e01b03198d166004820152602481018f905290519293506001600160a01b03909116916360a230e79160448082019260009290919082900301818387803b158015613eb857600080fd5b505af1158015613ecc573d6000803e3d6000fd5b50505050600560009054906101000a90046001600160a01b03166001600160a01b03166381d760ae828b8e6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160e01b0319166001600160e01b03191681526020018281526020019350505050600060405180830381600087803b158015613f6157600080fd5b505af1158015613f75573d6000803e3d6000fd5b5050600c54600854604080516305e09af360e31b815290516001600160a01b039384169550638cd4f0a094509190921691632f04d798916004808301926020929190829003018186803b158015613fcb57600080fd5b505afa158015613fdf573d6000803e3d6000fd5b505050506040513d6020811015613ff557600080fd5b5051604080516001600160e01b031960e085901b16815260048101929092526001602483015251604480830192600092919082900301818387803b15801561403c57600080fd5b505af1158015614050573d6000803e3d6000fd5b5050505060019b505050505050505050505050610c96565b50600098975050505050505050565b600081836141035760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140c85781810151838201526020016140b0565b50505050905090810190601f1680156140f55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161410f57fe5b0495945050505050565b6000818484111561416b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156140c85781810151838201526020016140b0565b505050900390565b6005546040805163ba38de3560e01b81526004810185905290516000926001600160a01b03169163ba38de35916024808301926020929190829003018186803b1580156141bf57600080fd5b505afa1580156141d3573d6000803e3d6000fd5b505050506040513d60208110156141e957600080fd5b505160075460408051635459cad560e11b8152905192935060009261427a92606492611e07926001600160a01b039092169163a8b395aa91600480820192602092909190829003018186803b15801561424157600080fd5b505afa158015614255573d6000803e3d6000fd5b505050506040513d602081101561426b57600080fd5b5051859063ffffffff612f4416565b60075460408051635f39579d60e01b815260048101879052815193945060009384936001600160a01b031692635f39579d9260248082019391829003018186803b1580156142c757600080fd5b505afa1580156142db573d6000803e3d6000fd5b505050506040513d60408110156142f157600080fd5b50805160209091015160075460408051636339392560e11b8152600481018c905260248101859052604481018490526064810188905290519395509193506001600160a01b03169163c672724a9160848082019260009290919082900301818387803b15801561436057600080fd5b505af1158015614374573d6000803e3d6000fd5b5050505060008211806143875750600081115b156143f857600354604080516340c10f1960e01b81523060048201526024810186905290516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b1580156143df57600080fd5b505af11580156143f3573d6000803e3d6000fd5b505050505b84600614806144075750846009145b80614412575084600b145b156144fb57600754604080516346f4da5760e01b8152600481018a9052600019602482015290516001600160a01b03909216916346f4da579160448082019260009290919082900301818387803b15801561446c57600080fd5b505af1158015614480573d6000803e3d6000fd5b50506003546040805163eb78c07d60e01b8152600481018b905260006024820181905291516001600160a01b03909316945063eb78c07d93506044808201939182900301818387803b1580156144d557600080fd5b505af11580156144e9573d6000803e3d6000fd5b505050506144f686614692565b614689565b846007148061450a5750846008145b80614515575084600a145b1561468957600754604080516346f4da5760e01b8152600481018a90526001602482015290516001600160a01b03909216916346f4da579160448082019260009290919082900301818387803b15801561456e57600080fd5b505af1158015614582573d6000803e3d6000fd5b50506003546040805163eb78c07d60e01b8152600481018b90526001602482015290516001600160a01b03909216935063eb78c07d925060448082019260009290919082900301818387803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050506145fb86612d9a565b600061460687613994565b905060008161461657600c614619565b600e5b60065460408051637a88deff60e11b8152600481018d905260ff939093166024840181905290519093506001600160a01b039091169163f511bdfe91604480830192600092919082900301818387803b15801561467557600080fd5b505af1158015612b5d573d6000803e3d6000fd5b50505050505050565b60055460408051633c2d4daf60e01b81526004810184905290516000926001600160a01b031691633c2d4daf916024808301926020929190829003018186803b1580156146de57600080fd5b505afa1580156146f2573d6000803e3d6000fd5b505050506040513d602081101561470857600080fd5b5051604080516121a760f11b602080830191909152606084901b6bffffffffffffffffffffffff1916602283015260368083018790528351808403909101815260568301808552815191830191909120600354631729236360e21b9092526001600160a01b03808716605a860152607a850182905294519596509460009490911692635ca48d8c92609a808301939192829003018186803b1580156147ac57600080fd5b505afa1580156147c0573d6000803e3d6000fd5b505050506040513d60208110156147d657600080fd5b50516004805460408051630ee0985160e11b815292830188905280519394506000936001600160a01b0390921692631dc130a29260248083019392829003018186803b15801561482557600080fd5b505afa158015614839573d6000803e3d6000fd5b505050506040513d604081101561484f57600080fd5b5051905061486481600263ffffffff612f9d16565b905060008183106148755781614877565b825b905080156148ef5760035460408051637aef5b7360e01b81526001600160a01b038881166004830152602482018890526044820186905291519190921691637aef5b7391606480830192600092919082900301818387803b1580156148db57600080fd5b505af1158015613988573d6000803e3d6000fd5b50505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436c61696d735265776172643a205061796f75742072657472792074696d65206e6f7420726561636865642ea265627a7a7231582091fb8fce9f2ffd0bc90ab452f14433796205adc8947e0d65c877bd53ec28a5ce64736f6c6343000511003200000000000000000000000001bfd82675dbcc7762c84019ca518e701c0cd07e0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063a0b2d57f116100a2578063d46655f411610071578063d46655f414610282578063df31f208146102a8578063e0bab4c4146102f7578063e3dee239146102ff578063f17a3bec146103265761010b565b8063a0b2d57f14610238578063b8caedc414610240578063bf44d1bb14610248578063c3e4d672146102655761010b565b8063452efce9116100de578063452efce9146101b457806363bb23be146101da5780637f6715c9146101f75780638322fff2146102145761010b565b80630900f010146101105780630ea9c9841461013857806335afb14e1461014057806341becc0714610178575b600080fd5b6101366004803603602081101561012657600080fd5b50356001600160a01b031661032e565b005b6101366104bc565b6101666004803603602081101561015657600080fd5b50356001600160a01b0316610b64565b60408051918252519081900360200190f35b61019b6004803603604081101561018e57600080fd5b5080359060200135610c9b565b6040805192835290151560208301528051918290030190f35b610166600480360360208110156101ca57600080fd5b50356001600160a01b0316611011565b610136600480360360208110156101f057600080fd5b5035611315565b6101366004803603602081101561020d57600080fd5b5035611566565b61021c611675565b604080516001600160a01b039092168252519081900360200190f35b61021c61168d565b61021c61169c565b6101366004803603602081101561025e57600080fd5b50356116ab565b6101366004803603602081101561027b57600080fd5b5035611734565b6101366004803603602081101561029857600080fd5b50356001600160a01b03166118a7565b6102d1600480360360608110156102be57600080fd5b5080359060208101359060400135611930565b604080519485529215156020850152838301919091526060830152519081900360800190f35b61021c611e25565b61021c6004803603602081101561031557600080fd5b50356001600160e01b031916611e34565b61021c611ee0565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561037957600080fd5b505afa15801561038d573d6000803e3d6000fd5b505050506040513d60208110156103a357600080fd5b50516103ae57600080fd5b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156103f957600080fd5b505afa15801561040d573d6000803e3d6000fd5b505050506040513d602081101561042357600080fd5b5051905080156104b8576002546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561048357600080fd5b505af1158015610497573d6000803e3d6000fd5b505050506040513d60208110156104ad57600080fd5b50516104b857600080fd5b5050565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561050757600080fd5b505afa15801561051b573d6000803e3d6000fd5b505050506040513d602081101561053157600080fd5b505161053c57600080fd5b600054604080516227050b60e31b81526110d360f21b600482015290516001600160a01b0390921691630138285891602480820192602092909190829003018186803b15801561058b57600080fd5b505afa15801561059f573d6000803e3d6000fd5b505050506040513d60208110156105b557600080fd5b5051600680546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b81526110d160f21b6004820152905191909216916301382858916024808301926020929190829003018186803b15801561061a57600080fd5b505afa15801561062e573d6000803e3d6000fd5b505050506040513d602081101561064457600080fd5b5051600780546001600160a01b0319166001600160a01b03928316179055600054604080516313aedd4b60e31b815290519190921691639d76ea58916004808301926020929190829003018186803b15801561069f57600080fd5b505afa1580156106b3573d6000803e3d6000fd5b505050506040513d60208110156106c957600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261544360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b15801561072e57600080fd5b505afa158015610742573d6000803e3d6000fd5b505050506040513d602081101561075857600080fd5b5051600380546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261151160f21b6004820152905191909216916301382858916024808301926020929190829003018186803b1580156107bd57600080fd5b505afa1580156107d1573d6000803e3d6000fd5b505050506040513d60208110156107e757600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155600054604080516227050b60e31b815261145160f21b9381019390935251921691630138285891602480820192602092909190829003018186803b15801561084c57600080fd5b505afa158015610860573d6000803e3d6000fd5b505050506040513d602081101561087657600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b81526123ab60f11b6004820152905191909216916301382858916024808301926020929190829003018186803b1580156108db57600080fd5b505afa1580156108ef573d6000803e3d6000fd5b505050506040513d602081101561090557600080fd5b5051600980546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261505360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b15801561096a57600080fd5b505afa15801561097e573d6000803e3d6000fd5b505050506040513d602081101561099457600080fd5b5051600a80546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b81526126a960f11b6004820152905191909216916301382858916024808301926020929190829003018186803b1580156109f957600080fd5b505afa158015610a0d573d6000803e3d6000fd5b505050506040513d6020811015610a2357600080fd5b5051600b80546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261503160f01b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610a8857600080fd5b505afa158015610a9c573d6000803e3d6000fd5b505050506040513d6020811015610ab257600080fd5b5051600880546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b8152614d4360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610b1757600080fd5b505afa158015610b2b573d6000803e3d6000fd5b505050506040513d6020811015610b4157600080fd5b5051600c80546001600160a01b0319166001600160a01b03909216919091179055565b600080610b7083611011565b600a5460408051630ea474c760e01b81526001600160a01b03878116600483015291519394506000939190921691630ea474c7916024808301926020929190829003018186803b158015610bc357600080fd5b505afa158015610bd7573d6000803e3d6000fd5b505050506040513d6020811015610bed57600080fd5b5051600954604080516326fceb5d60e11b81526001600160a01b03888116600483015291519394506000939190921691634df9d6ba916024808301926020929190829003018186803b158015610c4257600080fd5b505afa158015610c56573d6000803e3d6000fd5b505050506040513d6020811015610c6c57600080fd5b50519050610c9081610c84858563ffffffff611eef16565b9063ffffffff611eef16565b93505050505b919050565b60008060008060008660011415610e525760075460408051630d3c678b60e21b815233600482015290516001600160a01b03909216916334f19e2c91602480820192602092909190829003018186803b158015610cf757600080fd5b505afa158015610d0b573d6000803e3d6000fd5b505050506040513d6020811015610d2157600080fd5b5051905060005b81811015610e4c576007546040805163fc57c9bb60e01b81523360048201526024810184905290516001600160a01b039092169163fc57c9bb91604480820192602092909190829003018186803b158015610d8257600080fd5b505afa158015610d96573d6000803e3d6000fd5b505050506040513d6020811015610dac57600080fd5b5051600754604080516354a1b43160e01b81526004810184905290519296506001600160a01b03909116916354a1b43191602480820192608092909190829003018186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d6080811015610e2757600080fd5b5060208101516060909101519550925086831415610e4457610e4c565b600101610d28565b50610ff4565b6007546040805163274d865f60e01b815233600482015290516001600160a01b039092169163274d865f91602480820192602092909190829003018186803b158015610e9d57600080fd5b505afa158015610eb1573d6000803e3d6000fd5b505050506040513d6020811015610ec757600080fd5b5051905060005b81811015610ff25760075460408051637968b71560e11b81523360048201526024810184905290516001600160a01b039092169163f2d16e2a91604480820192602092909190829003018186803b158015610f2857600080fd5b505afa158015610f3c573d6000803e3d6000fd5b505050506040513d6020811015610f5257600080fd5b5051600754604080516354a1b43160e01b81526004810184905290519296506001600160a01b03909116916354a1b43191602480820192608092909190829003018186803b158015610fa357600080fd5b505afa158015610fb7573d6000803e3d6000fd5b505050506040513d6080811015610fcd57600080fd5b5060208101516060909101519550925086831415610fea57610ff2565b600101610ece565b505b61100087846001611930565b509199959850949650505050505050565b60075460408051630d3c678b60e21b81526001600160a01b0384811660048301529151600093849316916334f19e2c916024808301926020929190829003018186803b15801561106057600080fd5b505afa158015611074573d6000803e3d6000fd5b505050506040513d602081101561108a57600080fd5b5051600754604080516304ecffeb60e01b81526001600160a01b038781166004830152825194955060009485948594859493909116926304ecffeb9260248083019392829003018186803b1580156110e157600080fd5b505afa1580156110f5573d6000803e3d6000fd5b505050506040513d604081101561110b57600080fd5b5080516020909101519094509250835b858110156111d4576007546040805163fc57c9bb60e01b81526001600160a01b038b81166004830152602482018590529151919092169163fc57c9bb916044808301926020929190829003018186803b15801561117757600080fd5b505afa15801561118b573d6000803e3d6000fd5b505050506040513d60208110156111a157600080fd5b505191506111b26001836000611930565b509194506111ca91508890508463ffffffff611eef16565b965060010161111b565b506007546040805163274d865f60e01b81526001600160a01b038a811660048301529151919092169163274d865f916024808301926020929190829003018186803b15801561122257600080fd5b505afa158015611236573d6000803e3d6000fd5b505050506040513d602081101561124c57600080fd5b50519450825b8581101561130a5760075460408051637968b71560e11b81526001600160a01b038b81166004830152602482018590529151919092169163f2d16e2a916044808301926020929190829003018186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d60208110156112d857600080fd5b505191506112e860008381611930565b5091945061130091508890508463ffffffff611eef16565b9650600101611252565b505050505050919050565b6000809054906101000a90046001600160a01b03166001600160a01b031663ff0938a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561136257600080fd5b505afa158015611376573d6000803e3d6000fd5b505050506040513d602081101561138c57600080fd5b505115801561141357506000546040805163288c314960e21b815233600482015290516001600160a01b039092169163a230c52491602480820192602092909190829003018186803b1580156113e157600080fd5b505afa1580156113f5573d6000803e3d6000fd5b505050506040513d602081101561140b57600080fd5b505115156001145b61141c57600080fd5b61142581611f52565b600a5460408051632e1b8c8760e21b815233600482015290516001600160a01b039092169163b86e321c9160248082019260009290919082900301818387803b15801561147157600080fd5b505af1158015611485573d6000803e3d6000fd5b5050600954604080516305d38c7160e21b8152336004820152602481018690529051600094506001600160a01b03909216925063174e31c491604480830192602092919082900301818787803b1580156114de57600080fd5b505af11580156114f2573d6000803e3d6000fd5b505050506040513d602081101561150857600080fd5b5051905080156104b8576002546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561048357600080fd5b6000809054906101000a90046001600160a01b03166001600160a01b031663ff0938a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b357600080fd5b505afa1580156115c7573d6000803e3d6000fd5b505050506040513d60208110156115dd57600080fd5b5051156115e957600080fd5b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d602081101561165e57600080fd5b505161166957600080fd5b61167281612b6c565b50565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000546001600160a01b031681565b600c546001600160a01b031681565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d602081101561172057600080fd5b505161172b57600080fd5b61167281612d9a565b60075460408051635aef244760e01b815260048101849052905160009283926001600160a01b0390911691635aef24479160248082019260c092909190829003018186803b15801561178557600080fd5b505afa158015611799573d6000803e3d6000fd5b505050506040513d60c08110156117af57600080fd5b50606081015160809091015190925090506000600c8314158061185a575042611858600760009054906101000a90046001600160a01b03166001600160a01b031663ee8dea636040518163ffffffff1660e01b815260040160206040518083038186803b15801561181f57600080fd5b505afa158015611833573d6000803e3d6000fd5b505050506040513d602081101561184957600080fd5b5051849063ffffffff611eef16565b105b9050806118985760405162461bcd60e51b815260040180806020018281038252602c815260200180614919602c913960400191505060405180910390fd5b6118a184612b6c565b50505050565b6000546001600160a01b031615611904576000546001600160a01b03163314611904576040805162461bcd60e51b815260206004820152600a6024820152692737ba1036b0b9ba32b960b11b604482015290519081900360640190fd5b600080546001600160a01b039092166001600160a01b0319928316811790915560018054909216179055565b6000806000806000806000806000600760009054906101000a90046001600160a01b03166001600160a01b03166354a1b4318c6040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60808110156119c157600080fd5b5080516020808301516040808501516060909501516007548251631381b00560e21b815260048101859052925160009f50959d50929a509498509396508b936001600160a01b0390911692634e06c01492602480840193919291829003018186803b158015611a2f57600080fd5b505afa158015611a43573d6000803e3d6000fd5b505050506040513d6020811015611a5957600080fd5b50519050600081900b611a6b57600198505b8460000b8160000b148015611a885750831580611a8857508a6001145b15611e16578c60011415611b1f576007546040805163c49a8b1960e01b81526004810189905290516001600160a01b039092169163c49a8b1991602480820192606092909190829003018186803b158015611ae257600080fd5b505afa158015611af6573d6000803e3d6000fd5b505050506040513d6060811015611b0c57600080fd5b5080516040909101519097509250611ba7565b6007546040805163c49a8b1960e01b81526004810189905290516001600160a01b039092169163c49a8b1991602480820192606092909190829003018186803b158015611b6b57600080fd5b505afa158015611b7f573d6000803e3d6000fd5b505050506040513d6060811015611b9557600080fd5b50602081015160409091015190975092505b8615611e16578c60011415611cc7578460000b60011415611c4457600754604080516336f4019360e21b81526004810189905290516001600160a01b039092169163dbd0064c91602480820192606092909190829003018186803b158015611c0e57600080fd5b505afa158015611c22573d6000803e3d6000fd5b505050506040513d6060811015611c3857600080fd5b50602001519150611cc2565b600754604080516336f4019360e21b81526004810189905290516001600160a01b039092169163dbd0064c91602480820192606092909190829003018186803b158015611c9057600080fd5b505afa158015611ca4573d6000803e3d6000fd5b505050506040513d6060811015611cba57600080fd5b506040015191505b611dd3565b8460000b60011415611d555760075460408051634a4ecebb60e11b81526004810189905290516001600160a01b039092169163949d9d7691602480820192606092909190829003018186803b158015611d1f57600080fd5b505afa158015611d33573d6000803e3d6000fd5b505050506040513d6060811015611d4957600080fd5b50602001519150611dd3565b60075460408051634a4ecebb60e11b81526004810189905290516001600160a01b039092169163949d9d7691602480820192606092909190829003018186803b158015611da157600080fd5b505afa158015611db5573d6000803e3d6000fd5b505050506040513d6060811015611dcb57600080fd5b506040015191505b611e13611de783606463ffffffff612f4416565b611e0785611dfb8b8d63ffffffff612f4416565b9063ffffffff612f4416565b9063ffffffff612f9d16565b99505b50505050505093509350935093565b600d546001600160a01b031681565b60006208aa8960eb1b6001600160e01b031983161415611e69575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610c96565b6244414960e81b6001600160e01b031983161415611e935750600d546001600160a01b0316610c96565b6040805162461bcd60e51b815260206004820152601b60248201527f436c61696d735265776172643a20756e6b6e6f776e2061737365740000000000604482015290519081900360640190fd5b6001546001600160a01b031681565b600082820183811015611f49576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60075460408051630d3c678b60e21b815233600482015290516000926001600160a01b0316916334f19e2c916024808301926020929190829003018186803b158015611f9d57600080fd5b505afa158015611fb1573d6000803e3d6000fd5b505050506040513d6020811015611fc757600080fd5b5051600754604080516304ecffeb60e01b8152336004820152815193945060009384936001600160a01b0316926304ecffeb9260248082019391829003018186803b15801561201557600080fd5b505afa158015612029573d6000803e3d6000fd5b505050506040513d604081101561203f57600080fd5b505190506000808080808080878a5b8b8210801561205c57508c85105b156123cd576007546040805163fc57c9bb60e01b81523360048201526024810185905290516001600160a01b039092169163fc57c9bb91604480820192602092909190829003018186803b1580156120b357600080fd5b505afa1580156120c7573d6000803e3d6000fd5b505050506040513d60208110156120dd57600080fd5b50519a506120ee60018c6000611930565b929a5090985090935050808c14801561210957506001871515145b156121115750805b600754604080516354a1b43160e01b8152600481018e905290516001600160a01b03909216916354a1b43191602480820192608092909190829003018186803b15801561215d57600080fd5b505afa158015612171573d6000803e3d6000fd5b505050506040513d608081101561218757600080fd5b5060208101516060909101519650935082158015906121a4575085155b15612220576007546040805163f27a104760e01b8152600481018e9052600160248201819052915191909701966001600160a01b039092169163f27a104791604480830192600092919082900301818387803b15801561220357600080fd5b505af1158015612217573d6000803e3d6000fd5b505050506123a9565b821580156122a7575060075460408051631381b00560e21b81526004810187905290516001600160a01b0390921691634e06c01491602480820192602092909190829003018186803b15801561227557600080fd5b505afa158015612289573d6000803e3d6000fd5b505050506040513d602081101561229f57600080fd5b505160000b15155b80156122b1575085155b156123a9576007546040805163c49a8b1960e01b81526004810187905290516001600160a01b039092169163c49a8b1991602480820192606092909190829003018186803b15801561230257600080fd5b505afa158015612316573d6000803e3d6000fd5b505050506040513d606081101561232c57600080fd5b505192508261233c576001909401935b6007546040805163f27a104760e01b8152600481018e90526001602482015290516001600160a01b039092169163f27a10479160448082019260009290919082900301818387803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050505b87156123c2576123bf888a63ffffffff611eef16565b98505b60019091019061204e565b8b8114156124455760075460408051632f9f2f1760e21b81523360048201526024810185905290516001600160a01b039092169163be7cbc5c9160448082019260009290919082900301818387803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b505050506124b1565b60075460408051632f9f2f1760e21b81523360048201526024810184905290516001600160a01b039092169163be7cbc5c9160448082019260009290919082900301818387803b15801561249857600080fd5b505af11580156124ac573d6000803e3d6000fd5b505050505b6007546040805163274d865f60e01b815233600482015290516001600160a01b039092169163274d865f91602480820192602092909190829003018186803b1580156124fc57600080fd5b505afa158015612510573d6000803e3d6000fd5b505050506040513d602081101561252657600080fd5b5051600480546040805163034b044160e21b81529051939f508f94506000936001600160a01b0390921692630d2c1104928282019260209290829003018186803b15801561257357600080fd5b505afa158015612587573d6000803e3d6000fd5b505050506040513d602081101561259d57600080fd5b5051905060006125b3828863ffffffff612f4416565b905060006125c7428463ffffffff611eef16565b6003546040805163023e00b360e21b815233600482015262434c4160e81b602482015290519293506000926001600160a01b03909216916308f802cc91604480820192602092909190829003018186803b15801561262457600080fd5b505afa158015612638573d6000803e3d6000fd5b505050506040513d602081101561264e57600080fd5b50519050818111156126fc578161266b828563ffffffff612fdf16565b101561268457612681818363ffffffff612fdf16565b92505b60035460408051631fea558f60e01b815233600482015262434c4160e81b60248201526044810186905290516001600160a01b0390921691631fea558f9160648082019260009290919082900301818387803b1580156126e357600080fd5b505af11580156126f7573d6000803e3d6000fd5b505050505b5050600754604080516304ecffeb60e01b815233600482015281516001600160a01b0390931694506304ecffeb935060248082019391829003018186803b15801561274657600080fd5b505afa15801561275a573d6000803e3d6000fd5b505050506040513d604081101561277057600080fd5b50602001519950600094508991508b90505b8b8210801561279057508c85105b156129ea5760075460408051637968b71560e11b81523360048201526024810185905290516001600160a01b039092169163f2d16e2a91604480820192602092909190829003018186803b1580156127e757600080fd5b505afa1580156127fb573d6000803e3d6000fd5b505050506040513d602081101561281157600080fd5b50519a5061282160008c81611930565b50919950975050808c14801561283957506001871515145b156128415750805b600754604080516354a1b43160e01b8152600481018e905290516001600160a01b03909216916354a1b43191602480820192608092909190829003018186803b15801561288d57600080fd5b505afa1580156128a1573d6000803e3d6000fd5b505050506040513d60808110156128b757600080fd5b506020810151606090910151965093508515801561294e575060075460408051631381b00560e21b81526004810187905290516001600160a01b0390921691634e06c01491602480820192602092909190829003018186803b15801561291c57600080fd5b505afa158015612930573d6000803e3d6000fd5b505050506040513d602081101561294657600080fd5b505160000b15155b156129c6576007546040805163f27a104760e01b8152600481018e90526001602482015290516001600160a01b039092169163f27a10479160448082019260009290919082900301818387803b1580156129a757600080fd5b505af11580156129bb573d6000803e3d6000fd5b505060019096019550505b87156129df576129dc888a63ffffffff611eef16565b98505b600190910190612782565b8815612a79576002546040805163a9059cbb60e01b8152336004820152602481018c905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015612a4457600080fd5b505af1158015612a58573d6000803e3d6000fd5b505050506040513d6020811015612a6e57600080fd5b5051612a7957600080fd5b8b811415612af15760075460408051630f305e9560e21b81523360048201526024810185905290516001600160a01b0390921691633cc17a549160448082019260009290919082900301818387803b158015612ad457600080fd5b505af1158015612ae8573d6000803e3d6000fd5b50505050612b5d565b60075460408051630f305e9560e21b81523360048201526024810184905290516001600160a01b0390921691633cc17a549160448082019260009290919082900301818387803b158015612b4457600080fd5b505af1158015612b58573d6000803e3d6000fd5b505050505b50505050505050505050505050565b600754604080516396ff592f60e01b81526004810184905281516000936001600160a01b0316926396ff592f9260248082019391829003018186803b158015612bb457600080fd5b505afa158015612bc8573d6000803e3d6000fd5b505050506040513d6040811015612bde57600080fd5b506020015160075460408051630325ea3760e01b81526004810186905281519394506000936001600160a01b0390931692630325ea3792602480840193919291829003018186803b158015612c3257600080fd5b505afa158015612c46573d6000803e3d6000fd5b505050506040513d6040811015612c5c57600080fd5b5060200151905080612c7857612c73838383613021565b612d95565b60018110158015612c8a575060058111155b15612c9a57612c738383836134e7565b80600c1415612d95576000612cae83613994565b90508015612d275760065460408051637a88deff60e11b815260048101879052600e602482015290516001600160a01b039092169163f511bdfe9160448082019260009290919082900301818387803b158015612d0a57600080fd5b505af1158015612d1e573d6000803e3d6000fd5b505050506118a1565b60065460408051637a88deff60e11b815260048101879052600c602482015290516001600160a01b039092169163f511bdfe9160448082019260009290919082900301818387803b158015612d7b57600080fd5b505af1158015612d8f573d6000803e3d6000fd5b50505050505b505050565b60055460408051633c2d4daf60e01b81526004810184905290516000926001600160a01b031691633c2d4daf916024808301926020929190829003018186803b158015612de657600080fd5b505afa158015612dfa573d6000803e3d6000fd5b505050506040513d6020811015612e1057600080fd5b5051604080516121a760f11b602080830191909152606084901b6bffffffffffffffffffffffff1916602283015260368083018790528351808403909101815260568301808552815191830191909120600354631729236360e21b9092526001600160a01b03808716605a860152607a850182905294519596509460009490911692635ca48d8c92609a808301939192829003018186803b158015612eb457600080fd5b505afa158015612ec8573d6000803e3d6000fd5b505050506040513d6020811015612ede57600080fd5b5051905080156118a15760035460408051634063ab0d60e11b81526001600160a01b0386811660048301526024820186905260448201859052915191909216916380c7561a91606480830192600092919082900301818387803b158015612d7b57600080fd5b600082612f5357506000611f4c565b82820282848281612f6057fe5b0414611f495760405162461bcd60e51b81526004018080602001828103825260218152602001806148f86021913960400191505060405180910390fd5b6000611f4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614077565b6000611f4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614119565b6006546040805163778aa67960e11b81526004810186905290516001600160a01b039092169163ef154cf291602480820192602092909190829003018186803b15801561306d57600080fd5b505afa158015613081573d6000803e3d6000fd5b505050506040513d602081101561309757600080fd5b505160000b60011415612d9557600654604080516357af051560e01b815260048101869052600060248201819052915191926001600160a01b0316916357af051591604480820192602092909190829003018186803b1580156130f957600080fd5b505afa15801561310d573d6000803e3d6000fd5b505050506040513d602081101561312357600080fd5b505160075460408051631509d4c960e21b81526004810188905260016024820152815193945060009384938493849384936001600160a01b0390931692635427532492604480840193919291829003018186803b15801561318357600080fd5b505afa158015613197573d6000803e3d6000fd5b505050506040513d60408110156131ad57600080fd5b506020015160075460408051631509d4c960e21b8152600481018d9052600019602482015281519398506001600160a01b03909216926354275324926044808201939291829003018186803b15801561320557600080fd5b505afa158015613219573d6000803e3d6000fd5b505050506040513d604081101561322f57600080fd5b50602001519350613246858563ffffffff611eef16565b925061325985606463ffffffff612f4416565b945061326c84606463ffffffff612f4416565b93508561327c576003965061345f565b60055460408051631ce48f3d60e01b8152600481018b9052905161330e92670de0b6b3a7640000926001600160a01b0390911691631ce48f3d91602480820192602092909190829003018186803b1580156132d657600080fd5b505afa1580156132ea573d6000803e3d6000fd5b505050506040513d602081101561330057600080fd5b50519063ffffffff612f4416565b905061332181600563ffffffff612f4416565b86111561342b57604661333a868563ffffffff612f9d16565b11156133bd57600554600797506001600160a01b031663ae1c5eca8960015b6040518363ffffffff1660e01b8152600401808381526020018260ff1660ff16815260200192505050600060405180830381600087803b15801561339c57600080fd5b505af11580156133b0573d6000803e3d6000fd5b5050505060019150613426565b60466133cf858563ffffffff612f9d16565b11156133f257600554600697506001600160a01b031663ae1c5eca896002613359565b613402848463ffffffff612f9d16565b613412868563ffffffff612f9d16565b11156134215760049650613426565b600596505b61345f565b61343b848463ffffffff612f9d16565b61344b868563ffffffff612f9d16565b111561345a576002965061345f565b600396505b60065460408051637a88deff60e11b8152600481018c9052602481018a905290516001600160a01b039092169163f511bdfe9160448082019260009290919082900301818387803b1580156134b357600080fd5b505af11580156134c7573d6000803e3d6000fd5b5050505081156134dc576134dc898989614173565b505050505050505050565b6006546040805163778aa67960e11b81526004810186905290516001600160a01b039092169163ef154cf291602480820192602092909190829003018186803b15801561353357600080fd5b505afa158015613547573d6000803e3d6000fd5b505050506040513d602081101561355d57600080fd5b505160000b60011415612d9557600654604080516357af051560e01b815260048101869052600160248201529051600092849284926001600160a01b03909216916357af051591604480820192602092909190829003018186803b1580156135c457600080fd5b505afa1580156135d8573d6000803e3d6000fd5b505050506040513d60208110156135ee57600080fd5b505160055460408051631ce48f3d60e01b815260048101899052905192935060009261365092670de0b6b3a7640000926001600160a01b0390911691631ce48f3d91602480820192602092909190829003018186803b1580156132d657600080fd5b9050600061366582600563ffffffff612f4416565b831015613670575060015b60075460408051635ca1ce8b60e01b8152600481018b90526001602482015281516000936001600160a01b031692635ca1ce8b9260448082019391829003018186803b1580156136bf57600080fd5b505afa1580156136d3573d6000803e3d6000fd5b505050506040513d60408110156136e957600080fd5b506020015160075460408051635ca1ce8b60e01b8152600481018d9052600019602482015281519394506000936001600160a01b0390931692635ca1ce8b92604480840193919291829003018186803b15801561374557600080fd5b505afa158015613759573d6000803e3d6000fd5b505050506040513d604081101561376f57600080fd5b506020015190506000613788838363ffffffff611eef16565b11156138445760326137b46137a3848463ffffffff611eef16565b611e0785606463ffffffff612f4416565b101580156137c25750600186115b80156137cf575060058611155b80156137d9575082155b156137eb576008975060019650613844565b6032613811613800848463ffffffff611eef16565b611e0784606463ffffffff612f4416565b1015801561381f5750600186115b801561382c575060058611155b8015613836575082155b156138445760099750600296505b82600114801561385e5750856002148061385e5750856004145b1561387057600a9750600196506138a3565b8260011480156138955750856005148061388a5750856003145b806138955750856001145b156138a357600b9750600296505b60065460408051637a88deff60e11b8152600481018d9052602481018b905290516001600160a01b039092169163f511bdfe9160448082019260009290919082900301818387803b1580156138f757600080fd5b505af115801561390b573d6000803e3d6000fd5b50506005546040805163570e2f6560e11b8152600481018e905260ff8c16602482015290516001600160a01b03909216935063ae1c5eca925060448082019260009290919082900301818387803b15801561396557600080fd5b505af1158015613979573d6000803e3d6000fd5b505050506139888a8a8a614173565b50505050505050505050565b60055460408051631ce48f3d60e01b815260048101849052905160009283926001600160a01b0390911691631ce48f3d91602480820192602092909190829003018186803b1580156139e557600080fd5b505afa1580156139f9573d6000803e3d6000fd5b505050506040513d6020811015613a0f57600080fd5b505190506000613a2d82670de0b6b3a764000063ffffffff612f4416565b600554604080516322d5c8bd60e21b81526004810188905290519293506000926001600160a01b0390921691638b5722f491602480820192602092909190829003018186803b158015613a7f57600080fd5b505afa158015613a93573d6000803e3d6000fd5b505050506040513d6020811015613aa957600080fd5b505190506000613ab882611e34565b60055460408051633c2d4daf60e01b8152600481018a905290519293506000926001600160a01b0390921691633c2d4daf91602480820192602092909190829003018186803b158015613b0a57600080fd5b505afa158015613b1e573d6000803e3d6000fd5b505050506040513d6020811015613b3457600080fd5b5051600b5460408051621d624360e71b81526001600160a01b03808516600483015291519394506000939190921691630eb12180916024808301926020929190829003018186803b158015613b8857600080fd5b505afa158015613b9c573d6000803e3d6000fd5b505050506040513d6020811015613bb257600080fd5b5051600854604080516375466b9b60e01b81526001600160a01b0387811660048301528085166024830152604482018a9052915193945060009391909216916375466b9b91606480830192602092919082900301818787803b158015613c1757600080fd5b505af1158015613c2b573d6000803e3d6000fd5b505050506040513d6020811015613c4157600080fd5b5051905080156140685760055460408051638d16a10560e01b8152600481018c905281516000936001600160a01b031692638d16a1059260248082019391829003018186803b158015613c9357600080fd5b505afa158015613ca7573d6000803e3d6000fd5b505050506040513d6040811015613cbd57600080fd5b5060209081015160085460408051630681320d60e51b81526001600160a01b038a811660048301529151939550600094919092169263d02641a0926024808201939291829003018186803b158015613d1457600080fd5b505afa158015613d28573d6000803e3d6000fd5b505050506040513d6020811015613d3e57600080fd5b505190506000613d6082611e078b670de0b6b3a764000063ffffffff612f4416565b600a54604080516368989a5960e01b81526001600160a01b0387811660048301526024820185905291519394509116916368989a599160448082019260009290919082900301818387803b158015613db757600080fd5b505af1158015613dcb573d6000803e3d6000fd5b505050506000600560009054906101000a90046001600160a01b03166001600160a01b0316638d16a1058e6040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b158015613e2957600080fd5b505afa158015613e3d573d6000803e3d6000fd5b505050506040513d6040811015613e5357600080fd5b5060200151600554604080516360a230e760e01b81526001600160e01b03198d166004820152602481018f905290519293506001600160a01b03909116916360a230e79160448082019260009290919082900301818387803b158015613eb857600080fd5b505af1158015613ecc573d6000803e3d6000fd5b50505050600560009054906101000a90046001600160a01b03166001600160a01b03166381d760ae828b8e6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160e01b0319166001600160e01b03191681526020018281526020019350505050600060405180830381600087803b158015613f6157600080fd5b505af1158015613f75573d6000803e3d6000fd5b5050600c54600854604080516305e09af360e31b815290516001600160a01b039384169550638cd4f0a094509190921691632f04d798916004808301926020929190829003018186803b158015613fcb57600080fd5b505afa158015613fdf573d6000803e3d6000fd5b505050506040513d6020811015613ff557600080fd5b5051604080516001600160e01b031960e085901b16815260048101929092526001602483015251604480830192600092919082900301818387803b15801561403c57600080fd5b505af1158015614050573d6000803e3d6000fd5b5050505060019b505050505050505050505050610c96565b50600098975050505050505050565b600081836141035760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140c85781810151838201526020016140b0565b50505050905090810190601f1680156140f55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161410f57fe5b0495945050505050565b6000818484111561416b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156140c85781810151838201526020016140b0565b505050900390565b6005546040805163ba38de3560e01b81526004810185905290516000926001600160a01b03169163ba38de35916024808301926020929190829003018186803b1580156141bf57600080fd5b505afa1580156141d3573d6000803e3d6000fd5b505050506040513d60208110156141e957600080fd5b505160075460408051635459cad560e11b8152905192935060009261427a92606492611e07926001600160a01b039092169163a8b395aa91600480820192602092909190829003018186803b15801561424157600080fd5b505afa158015614255573d6000803e3d6000fd5b505050506040513d602081101561426b57600080fd5b5051859063ffffffff612f4416565b60075460408051635f39579d60e01b815260048101879052815193945060009384936001600160a01b031692635f39579d9260248082019391829003018186803b1580156142c757600080fd5b505afa1580156142db573d6000803e3d6000fd5b505050506040513d60408110156142f157600080fd5b50805160209091015160075460408051636339392560e11b8152600481018c905260248101859052604481018490526064810188905290519395509193506001600160a01b03169163c672724a9160848082019260009290919082900301818387803b15801561436057600080fd5b505af1158015614374573d6000803e3d6000fd5b5050505060008211806143875750600081115b156143f857600354604080516340c10f1960e01b81523060048201526024810186905290516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b1580156143df57600080fd5b505af11580156143f3573d6000803e3d6000fd5b505050505b84600614806144075750846009145b80614412575084600b145b156144fb57600754604080516346f4da5760e01b8152600481018a9052600019602482015290516001600160a01b03909216916346f4da579160448082019260009290919082900301818387803b15801561446c57600080fd5b505af1158015614480573d6000803e3d6000fd5b50506003546040805163eb78c07d60e01b8152600481018b905260006024820181905291516001600160a01b03909316945063eb78c07d93506044808201939182900301818387803b1580156144d557600080fd5b505af11580156144e9573d6000803e3d6000fd5b505050506144f686614692565b614689565b846007148061450a5750846008145b80614515575084600a145b1561468957600754604080516346f4da5760e01b8152600481018a90526001602482015290516001600160a01b03909216916346f4da579160448082019260009290919082900301818387803b15801561456e57600080fd5b505af1158015614582573d6000803e3d6000fd5b50506003546040805163eb78c07d60e01b8152600481018b90526001602482015290516001600160a01b03909216935063eb78c07d925060448082019260009290919082900301818387803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050506145fb86612d9a565b600061460687613994565b905060008161461657600c614619565b600e5b60065460408051637a88deff60e11b8152600481018d905260ff939093166024840181905290519093506001600160a01b039091169163f511bdfe91604480830192600092919082900301818387803b15801561467557600080fd5b505af1158015612b5d573d6000803e3d6000fd5b50505050505050565b60055460408051633c2d4daf60e01b81526004810184905290516000926001600160a01b031691633c2d4daf916024808301926020929190829003018186803b1580156146de57600080fd5b505afa1580156146f2573d6000803e3d6000fd5b505050506040513d602081101561470857600080fd5b5051604080516121a760f11b602080830191909152606084901b6bffffffffffffffffffffffff1916602283015260368083018790528351808403909101815260568301808552815191830191909120600354631729236360e21b9092526001600160a01b03808716605a860152607a850182905294519596509460009490911692635ca48d8c92609a808301939192829003018186803b1580156147ac57600080fd5b505afa1580156147c0573d6000803e3d6000fd5b505050506040513d60208110156147d657600080fd5b50516004805460408051630ee0985160e11b815292830188905280519394506000936001600160a01b0390921692631dc130a29260248083019392829003018186803b15801561482557600080fd5b505afa158015614839573d6000803e3d6000fd5b505050506040513d604081101561484f57600080fd5b5051905061486481600263ffffffff612f9d16565b905060008183106148755781614877565b825b905080156148ef5760035460408051637aef5b7360e01b81526001600160a01b038881166004830152602482018890526044820186905291519190921691637aef5b7391606480830192600092919082900301818387803b1580156148db57600080fd5b505af1158015613988573d6000803e3d6000fd5b50505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436c61696d735265776172643a205061796f75742072657472792074696d65206e6f7420726561636865642ea265627a7a7231582091fb8fce9f2ffd0bc90ab452f14433796205adc8947e0d65c877bd53ec28a5ce64736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000001bfd82675dbcc7762c84019ca518e701c0cd07e0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
-----Decoded View---------------
Arg [0] : masterAddress (address): 0x01BFd82675DBCc7762C84019cA518e701C0cD07e
Arg [1] : _daiAddress (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000001bfd82675dbcc7762c84019ca518e701c0cd07e
Arg [1] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.