More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,263 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Rare | 39194245 | 30 days ago | IN | 0 xDAI | 0.00027416 | ||||
Remove L Ptokens | 38856185 | 50 days ago | IN | 0 xDAI | 0.0003608 | ||||
Claim Rare | 38856163 | 50 days ago | IN | 0 xDAI | 0.00029853 | ||||
Claim Rare | 37362543 | 139 days ago | IN | 0 xDAI | 0.00027164 | ||||
Remove L Ptokens | 37322828 | 141 days ago | IN | 0 xDAI | 0.00036074 | ||||
Claim Rare | 37322732 | 141 days ago | IN | 0 xDAI | 0.00027893 | ||||
Claim Rare | 36164515 | 210 days ago | IN | 0 xDAI | 0.00027047 | ||||
Claim Rare | 36118289 | 213 days ago | IN | 0 xDAI | 0.00032696 | ||||
Claim Rare | 36015009 | 219 days ago | IN | 0 xDAI | 0.00028911 | ||||
Claim Rare | 35912657 | 225 days ago | IN | 0 xDAI | 0.00027062 | ||||
Claim Rare | 35481356 | 251 days ago | IN | 0 xDAI | 0.00027047 | ||||
Remove L Ptokens | 35276611 | 264 days ago | IN | 0 xDAI | 0.00033695 | ||||
Remove L Ptokens | 35276430 | 264 days ago | IN | 0 xDAI | 0.00095878 | ||||
Claim Rare | 35165374 | 270 days ago | IN | 0 xDAI | 0.00027076 | ||||
Claim Rare | 35144442 | 271 days ago | IN | 0 xDAI | 0.00029138 | ||||
Claim Rare | 34846694 | 289 days ago | IN | 0 xDAI | 0.00025791 | ||||
Claim Rare | 34599184 | 304 days ago | IN | 0 xDAI | 0.00027047 | ||||
Claim Rare | 34295098 | 322 days ago | IN | 0 xDAI | 0.00027033 | ||||
Claim Rare | 34188304 | 329 days ago | IN | 0 xDAI | 0.00032197 | ||||
Claim Rare | 34158208 | 330 days ago | IN | 0 xDAI | 0.00027033 | ||||
Claim Rare | 33961706 | 342 days ago | IN | 0 xDAI | 0.00027208 | ||||
Claim Rare | 33950962 | 343 days ago | IN | 0 xDAI | 0.000332 | ||||
Claim Rare | 33782543 | 353 days ago | IN | 0 xDAI | 0.00017405 | ||||
Claim Rare | 33483330 | 371 days ago | IN | 0 xDAI | 0.00077659 | ||||
Claim Rare | 33301980 | 382 days ago | IN | 0 xDAI | 0.0003646 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
39194245 | 30 days ago | 0.00045487 xDAI | ||||
38856163 | 50 days ago | 0.00061039 xDAI | ||||
37362543 | 139 days ago | 0.01951485 xDAI | ||||
37322732 | 141 days ago | 0.00000404 xDAI | ||||
36164515 | 210 days ago | 0.0319766 xDAI | ||||
36118289 | 213 days ago | 0.00002516 xDAI | ||||
36015009 | 219 days ago | 0.00016259 xDAI | ||||
35912657 | 225 days ago | 0.05251604 xDAI | ||||
35481356 | 251 days ago | 0.08605162 xDAI | ||||
35276611 | 264 days ago | 0.00065766 xDAI | ||||
35276430 | 264 days ago | 0.00070395 xDAI | ||||
35165374 | 270 days ago | 0.14045258 xDAI | ||||
35144442 | 271 days ago | 0.00115263 xDAI | ||||
34846694 | 289 days ago | 0.0011563 xDAI | ||||
34599184 | 304 days ago | 0.23070497 xDAI | ||||
34295098 | 322 days ago | 0.37655432 xDAI | ||||
34188304 | 329 days ago | 0.00052811 xDAI | ||||
34158208 | 330 days ago | 0.61494202 xDAI | ||||
33961706 | 342 days ago | 1.00370213 xDAI | ||||
33950962 | 343 days ago | 0.00823697 xDAI | ||||
33782543 | 353 days ago | 0.00826315 xDAI | ||||
33483330 | 371 days ago | 0.00828941 xDAI | ||||
33301980 | 382 days ago | 0.00831576 xDAI | ||||
33280822 | 383 days ago | 0.00028794 xDAI | ||||
33280266 | 383 days ago | 0.00022738 xDAI |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Rare_Staking
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at gnosisscan.io on 2022-08-04 */ pragma solidity >=0.6.0 <0.8.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. */ 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. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { 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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: contracts\rare-stake-v3.sol pragma solidity >=0.6.0 <0.8.0; // Writen by affinity design for anonymous client // token = 0x57e93BB58268dE818B42E3795c97BAD58aFCD3Fe // rare token mainnet // to = 0x5805bb63e73Ec272c74e210D280C05B41D719827 // honeyswap Rare LP token address interface IERC1155 { function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external; function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external; function balanceOf(address _owner, uint256 _id) external view returns (uint256); function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); function setApprovalForAll(address _operator, bool _approved) external; function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator); event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount); event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Rare_Staking { //-------------------Libraries--------------------------- using SafeMath for uint; using SafeMath for uint8; using SafeMath for uint16; using SafeMath for uint32; using SafeMath for uint64; //-------------------Contracts----------------------------- IERC20 private rare; IERC20 private rareLP; IERC1155 private nft1; IERC1155 private nft2; IERC1155 private nft3; IERC1155 private nft4; IERC1155 private nft5; uint16 private nft1id; uint16 private nft2id; uint16 private nft3id; uint16 private nft4id; uint16 private nft5id; uint8 private nft1_value = 2; uint private nft2_value = 10 ether; uint private nft3_value = 25 ether; uint private nft4_value = 50 ether; uint private nft5_value = 100 ether; //-------------------Storage----------------------------- address payable internal manager; uint64 private fee; uint public mstrLiqBal; uint public calcLiqBonus; uint public totalRareClaimed; uint32 public totalNumStakers; uint32 private A = 120400; // period length a = 7 days in blocks = 120400 uint32 private B = A*4; // period length b = 21 days in blocks = 481600 uint32 private C = A*12; // period length c = 84 days in blocks = 1444800 uint8 private termBonusA = 1; uint8 private termBonusB = 2; uint8 private termBonusC = 3; //-------------------Structs----------------------------- struct Term { uint8 bonus; uint8 amtInst; uint amtLocked; uint32 termLocked; uint32 nextClaimLocked; uint32 lastClaimBlock; } struct Info { // active vars mapping(uint => Term) tokenLock; // supples amt staked, returns term details uint totalLP; uint32 totalActiveStaked; // history vars uint totalRareClaimed; uint32 totatTimesClaimed; uint32 totalTimesStaked; } //-------------------Mappings--------------------------- mapping(address => Info) public staker; //-------------------Events----------------------------- event NewStaker(address indexed _adrStaked, uint indexed _amtLpStaked, uint indexed _releaseBlock, uint _termNumSelected, bool _stakeSuccess); event LoseStaker(address indexed _adrRemoved, uint indexed _amtLpRemoved, uint _timesStaked, bool _unStakeSuccess); // event UserClaim(address indexed _adrClaimed, uint indexed _amtRareClaimed, uint _claimNum, bool _claimSuccess); event OwnershipTransferred(address indexed _newManager); //-------------------Contructor------------------------- constructor(address _rareAddress, address _LPAddress) { manager = msg.sender; fee = 1 ether; rare = IERC20(_rareAddress); rareLP = IERC20(_LPAddress); } //-------------------Public Functions------------------- // 1) stakeLPtokens ****FUNCTION THAT ALLOWS USERS TO STAKE LP TOKENS TO EARN RARE DIVIDENDS // NOTE* must allow THIS address via interface to erc20 interface, to spend LP tokens so it can add to pool on users behalf // Rare = 0x57e93BB58268dE818B42E3795c97BAD58aFCD3Fe // rare token mainnet // LP = 0x5805bb63e73Ec272c74e210D280C05B41D719827 // Rare LP tokens // Honeyswap Router = 0x1C232F01118CB8B424793ae03F870aa7D0ac7f77 function stakeLPtokens(uint _pickterm) public payable { require(rareLP.allowance(msg.sender, address(this)) >= 1, "You must allow some Rare/xDai LP tokens first"); require(msg.value >= getFee(), "You must cover the xDai transaction fee"); // currently 1 xdai require(_pickterm == 1 || _pickterm == 2 || _pickterm == 3, "Invalid term selection: Must be 1, 2 or 3"); // pays fee to manager manager.transfer(getFee().div(2)); // gets the allowed ammount uint allowedAmt = rareLP.allowance(msg.sender, address(this)); // set login to add to current balance only if ammount is indeed the same amount, if not sets a new instance if(staker[msg.sender].tokenLock[allowedAmt].amtLocked == allowedAmt){ staker[msg.sender].tokenLock[allowedAmt].amtLocked = staker[msg.sender].tokenLock[allowedAmt].amtLocked.mul(2); staker[msg.sender].tokenLock[allowedAmt].amtInst = uint8(staker[msg.sender].tokenLock[allowedAmt].amtInst.add(1)); totalNumStakers = uint32(totalNumStakers.sub(1)); staker[msg.sender].totalActiveStaked = uint32(staker[msg.sender].totalActiveStaked.sub(1)); } else { staker[msg.sender].tokenLock[allowedAmt].amtLocked = allowedAmt; staker[msg.sender].tokenLock[allowedAmt].amtInst = 1; } // staker global mappings weeklyCompBonus mstrLiqBal = mstrLiqBal.add(allowedAmt); totalNumStakers = uint32(totalNumStakers.add(1)); staker[msg.sender].totalLP = staker[msg.sender].totalLP.add(allowedAmt); staker[msg.sender].totalActiveStaked = uint32(staker[msg.sender].totalActiveStaked.add(1)); staker[msg.sender].totalTimesStaked = uint32(staker[msg.sender].totalTimesStaked.add(1)); staker[msg.sender].tokenLock[allowedAmt].lastClaimBlock = uint32(block.number); // pick term logic, sets if(_pickterm == 1) { staker[msg.sender].tokenLock[allowedAmt].termLocked = uint32(block.number.add(A)); staker[msg.sender].tokenLock[allowedAmt].bonus = termBonusA; }else if(_pickterm == 2){ staker[msg.sender].tokenLock[allowedAmt].termLocked = uint32(block.number.add(B)); staker[msg.sender].tokenLock[allowedAmt].bonus = termBonusB; }else if(_pickterm == 3){ staker[msg.sender].tokenLock[allowedAmt].termLocked = uint32(block.number.add(C)); staker[msg.sender].tokenLock[allowedAmt].bonus = termBonusC; } // calc bonuses if(staker[msg.sender].tokenLock[allowedAmt].amtInst > 1){ calcLiqBonus = calcLiqBonus.add(calcTermBonusLP(allowedAmt).sub(allowedAmt.mul(staker[msg.sender].tokenLock[allowedAmt].amtInst))); } else { calcLiqBonus = calcLiqBonus.add(calcTermBonusLP(allowedAmt)); } // transfer coins from user to this contract address rareLP.transferFrom(msg.sender, address(this), allowedAmt); // emit event success emit NewStaker(msg.sender,allowedAmt,staker[msg.sender].tokenLock[allowedAmt].termLocked,_pickterm,true); } // 2) removeLPtokens **** add function to remove liquiditety and pays out user function removeLPtokens(uint _amt) chkAmt(_amt) termBlk(_amt) public { // termblk(_amt) blocks amt from withdraw untill block is achived ^ // chkAmt(_amt) makes sure the amt is valid for users address ^ // claims rare if possible if(staker[msg.sender].tokenLock[_amt].nextClaimLocked <= block.number){ claimRare(_amt); } // get instance number uint amtInst = staker[msg.sender].tokenLock[_amt].amtInst; // Remove AMT mappings staker[msg.sender].tokenLock[_amt].amtLocked = 0; staker[msg.sender].tokenLock[_amt].amtInst = uint8(staker[msg.sender].tokenLock[_amt].amtInst.sub(1)); // Remove global mappings mstrLiqBal = mstrLiqBal.sub(_amt.mul(amtInst)); calcLiqBonus = calcLiqBonus.sub(_amt.mul(amtInst)); totalNumStakers = uint32(totalNumStakers.sub(1)); staker[msg.sender].totalLP = staker[msg.sender].totalLP.sub(_amt.mul(amtInst)); staker[msg.sender].totalActiveStaked = uint32(staker[msg.sender].totalActiveStaked.sub(1)); // transfer back LP tokens rareLP.transfer(msg.sender, _amt.mul(amtInst)); // emit events emit LoseStaker(msg.sender,_amt,staker[msg.sender].totalTimesStaked,true); } // 3) claimRare **** add function to payout user based on reward allowances function claimRare(uint _amt) chkAmt(_amt) blk(_amt) termBlk(_amt) public { // calculatee fee payout uint xdai_bp = calcPercentage(_amt, mstrLiqBal); uint xdai_payout = calcDividend(getXdaiBalance(), xdai_bp); // calculate old term LP bonus for removal uint termBonusOld = calcTermBonusLP(_amt).sub(_amt.mul(staker[msg.sender].tokenLock[_amt].amtInst)); // calculate reward amt in rare (this includes teir bonuses and weekly bonus) uint reward = calcTotalBonusVal(_amt); // LOCK claim for another 7 days & resets weekly rewards staker[msg.sender].tokenLock[_amt].nextClaimLocked = uint32(block.number + A); staker[msg.sender].tokenLock[_amt].lastClaimBlock = uint32(block.number); // Change lifetime stats totalRareClaimed = totalRareClaimed.add(reward); calcLiqBonus = calcLiqBonus.sub(termBonusOld); staker[msg.sender].tokenLock[_amt].bonus = 1; staker[msg.sender].tokenLock[_amt].termLocked = 0; staker[msg.sender].totalRareClaimed = staker[msg.sender].totalRareClaimed.add(reward); staker[msg.sender].totatTimesClaimed = uint32(staker[msg.sender].totatTimesClaimed.add(1)); // Transfer fee payout in xdai from contract payable(msg.sender).transfer(xdai_payout); // transfer funds rare.transfer(msg.sender, reward); // emit events // emit UserClaim(msg.sender,reward,staker[msg.sender].totatTimesClaimed,true); } // 4) RenewStake **** add function to relock current position for a new bonus lengeth function renewStake(uint _amt, uint _pickterm) chkAmt(_amt) termBlk(_amt) public payable { require(getActiveStakedNum() >= 1, "Must Have Something Stake To Set New Terms"); // prevents renewing with nothing require(_pickterm == 1 || _pickterm == 2 || _pickterm == 3, "invalied term selection: Must be 1, 2 or 3"); require(msg.value >= getFee(), "You must cover the xDai transaction fee"); // currently 10 cents amtLocked // pays fee to manager manager.transfer(getFee().div(2)); // global settings set staker[msg.sender].tokenLock[_amt].lastClaimBlock = uint32(block.number); // pick term logic, sets if(_pickterm == 1) { staker[msg.sender].tokenLock[_amt].termLocked = uint32(block.number.add(A)); staker[msg.sender].tokenLock[_amt].bonus = termBonusA; }else if(_pickterm == 2){ staker[msg.sender].tokenLock[_amt].termLocked = uint32(block.number.add(B)); staker[msg.sender].tokenLock[_amt].bonus = termBonusB; }else if(_pickterm == 3){ staker[msg.sender].tokenLock[_amt].termLocked = uint32(block.number.add(C)); staker[msg.sender].tokenLock[_amt].bonus = termBonusC; } // calc bonuses if(staker[msg.sender].tokenLock[_amt].amtInst > 1){ calcLiqBonus = calcLiqBonus.add(calcTermBonusLP(_amt).sub(_amt.mul(staker[msg.sender].tokenLock[_amt].amtInst))); } else { calcLiqBonus = calcLiqBonus.add(calcTermBonusLP(_amt)); } // emit event success emit NewStaker(msg.sender,_amt,staker[msg.sender].tokenLock[_amt].termLocked,_pickterm,true); } //-------------------Exl Calc Return Functions---------- // Calculates Dividend Amount cycle payout in wei Based On Basis Points supplyed function calcDividend(uint _poolBal, uint _basisPoints) public pure returns(uint) { require(_poolBal >= 1, "Failed to meet minimum (1 wei) required payout"); return _poolBal.mul(_basisPoints).div(100 ether); } // calculates pool percentage in basis points 100% = 100 ether, 10% = 10 ether, 1% = 1 ether function calcPercentage(uint _stakedBal, uint _totalBal) public pure returns (uint) { require((_stakedBal.mul(100 ether)).div(_totalBal) >= 1, "Failed to meet minimum percentage, To small to even calculate!"); uint x = _totalBal; uint y = _stakedBal; uint p = y.mul(100 ether).div(x); return p; } // calculate estimated rare returns, based on amount of weeks spesified function calcEstFutureReturns(uint _amt, uint _pickterm, uint _weekNum) public view returns(uint) { // prevents infinit loop glitch require(_weekNum >= 1, "Must select more then 1 week"); uint weeklyCompBP; // calcs points based on weeks for (uint i = 0; i <= _weekNum-1; i++) { weeklyCompBP = weeklyCompBP + 1 ether; } uint lpWeeklyBonus = calcDividend(_amt,weeklyCompBP); uint mstLiqTemp = calcLiqBonus.add(lpWeeklyBonus); uint termBonusLp = _amt.mul(staker[msg.sender].tokenLock[_amt].amtInst).mul(_pickterm); uint bonusBpAmt = calcPercentage(termBonusLp.add(lpWeeklyBonus),mstLiqTemp); uint bonusRareAmt = calcDividend(rare.balanceOf(address(this)),bonusBpAmt); return bonusRareAmt.mul(_weekNum); } //-------------------User Calc Functions--------------------- // # gets active term multipler, returns 1, 2 or 3 ✓ function getTermBonus(uint _amt) chkAmt(_amt) public view returns(uint) { return staker[msg.sender].tokenLock[_amt].bonus; } // # gets term remainder on active staked amt, returned in blocks ✓ function getTermLeft(uint _amt) chkAmt(_amt) public view returns(uint) { if(staker[msg.sender].tokenLock[_amt].termLocked <= block.number){ return 0; } else { return staker[msg.sender].tokenLock[_amt].termLocked.sub(block.number); } } // # gets time of when next week multiplier flips, returns in block ✓ function getWeekLeft(uint _amt) chkAmt(_amt) public view returns(uint) { return A.sub((block.number.sub(staker[msg.sender].tokenLock[_amt].lastClaimBlock)).mod(A)); } // # gets instances percentage of the pool, returns in bp ✓ function getCurrentTermBonusBP(uint _amt) chkAmt(_amt) public view returns(uint){ // Calculates current term bonus in relation to the total return calcTermBP(_amt); } // # gets this instances accumulated weekly bonus basis points amount, returns in bp ✓ function getCurrentWeeklyBonusBP(uint _amt) chkAmt(_amt) public view returns(uint){ // Calculates current weekly bonus in bp return calcWeeklyBonusBP(_amt); } // # gets this instances estmate of payout of rare coin on next claim, returns in wei function getNextClaimReward(uint _amt) chkAmt(_amt) public view returns(uint){ // calculate weekly reward amt in rare and adds it to the tier reward return calcTotalBonusVal(_amt); } // # gets this instances estmate of payout of rare coin on next claim, returns in wei function isAmtUnlocked(uint _amt) chkAmt(_amt) public view returns(bool){ // calculate weekly reward amt in rare and adds it to the tier reward if(staker[msg.sender].tokenLock[_amt].termLocked <= block.number){ return true; } else { return false; } } // # gets this instances estmate of payout of rare coin on next claim, returns in wei function canClaim(uint _amt) chkAmt(_amt) public view returns(bool){ // calculate weekly reward amt in rare and adds it to the tier reward if(staker[msg.sender].tokenLock[_amt].nextClaimLocked <= block.number){ return true; } else { return false; } } //-------------------User Stat View Functions--------------------- // #gets user total amount lp tokens staked ✓ function getTotalLPtokens() public view returns (uint) { return staker[msg.sender].totalLP; } // #gets user total amount of rare coin claimed to date ✓ function getTotalClaimedAmt() public view returns (uint) { return staker[msg.sender].totalRareClaimed; } // #gets user total amount of staked sessions to date ✓ function getActiveStakedNum() public view returns (uint) { return staker[msg.sender].totalActiveStaked; } // #gets user total amount of completed staked sessions to date ✓ function getHistoryStakedNum() public view returns (uint) { return staker[msg.sender].totalTimesStaked; } // #gets user total times claimed to date ✓ function getTotalTimesClaimed() public view returns (uint) { return staker[msg.sender].totatTimesClaimed; } //-------------------Global Stat View Functions--------------------- // #gets global fee amount per staker function getFee() public view returns (uint) { uint userFee = fee; // if uses have this nft in their possision apply fee deduction if (nft1.balanceOf(msg.sender, nft1id) >= 1){ return userFee = userFee.div(nft1_value); } else { return fee; } } // #gets balance of rare tokens this contract adress has function getRareBalance() public view returns (uint) { return uint(rare.balanceOf(address(this))); } // #gets balance of xdai contract adress has, only manager function getXdaiBalance() public view returns (uint) { return uint(address(this).balance); } //-------------------Interal Functions--------------------- // Returns the divid amt in rare owed based on active stake and teir rewards, ***Used for other calculations function calcTotalBonusVal(uint _amt) internal view returns(uint) { return calcTermVal(_amt).add(calcWeeklyBonusVal(_amt)); } // Calculate term bonus rare amt based on AMT liquidity supplied, returns term bonus payout in wei, ***Used for other calculations function calcTermVal(uint _amt) internal view returns(uint) { uint lpTermBonus = calcTermBonusLP(_amt); uint bp = calcPercentage(lpTermBonus,calcLiqBonus); return calcDividend(rare.balanceOf(address(this)), bp); } // Calculate weekly bonus rare amt based on the number of weeks not claimed, returns weekly bonus in wei function calcWeeklyBonusVal(uint _amt) internal view returns(uint) { uint lpWeeklyBonus = calcWeeklyBonusLP(_amt); uint mstrTempLiqBal = calcLiqBonus.add(lpWeeklyBonus); uint termLP = calcTermBonusLP(_amt); uint bp = calcPercentage(termLP.add(lpWeeklyBonus),mstrTempLiqBal); uint fullPayoutAmt = calcDividend(rare.balanceOf(address(this)), bp); return fullPayoutAmt.sub(calcTermVal(_amt)); } // Returns the tier bonus liquidity amt of spisific active Lp tokens. ✓ ***Used for other calculations chkAmt(_amt) function calcTermBonusLP(uint _amt) internal view returns(uint) { return _amt.mul(staker[msg.sender].tokenLock[_amt].amtInst).mul(staker[msg.sender].tokenLock[_amt].bonus); } // Calculates the weekly bonus amt of lp tokens staked. ✓ ***Used for other calculations chkAmt(_amt) function calcWeeklyBonusLP(uint _amt) internal view returns(uint) { uint weeklyBP = calcWeeklyBonusBP(_amt); return calcDividend(_amt,weeklyBP); } // Returns the divid amt in rare owed based on active stake and teir rewards, ***Used for other calculations function calcTermBP(uint _amt) internal view returns(uint) { uint bonusAmt = calcTermBonusLP(_amt); return calcPercentage(bonusAmt,calcLiqBonus); } // Returns the bp in rare owed based on active stake and teir rewards, ***Used for other calculations function calcWeeklyBonusBP(uint _amt) internal view returns(uint) { // init vars uint weeklyCompBP; uint payments; // calculates number of outstanting payments - fomrula = ((_blkNum.sub(_lastClaimed)).div(_blocksPerWeek)); payments = ((block.number.sub(staker[msg.sender].tokenLock[_amt].lastClaimBlock)).div(A)); // prevents infinit loop glitch // require(payments >= 1, "Must wait until your weeks end to calculate"); if(payments >= 1) { // adds 1 percent bonus on initial investment, compounds term bonuses, in basis points for every week user did not claim for (uint i = 0; i <= payments-1; i++) { weeklyCompBP = weeklyCompBP + 1 ether; } // calculate for nft bonuses // NFT 2 Bonus if (nft2.balanceOf(msg.sender, nft2id) >= 1){ weeklyCompBP = weeklyCompBP.add(nft2_value); } // NFT 3 Bonus if (nft3.balanceOf(msg.sender, nft3id) >= 1){ weeklyCompBP = weeklyCompBP.add(nft3_value); } // NFT 4 Bonus if (nft4.balanceOf(msg.sender, nft4id) >= 1){ weeklyCompBP = weeklyCompBP.add(nft4_value); } // NFT 5 Bonus if (nft5.balanceOf(msg.sender, nft5id) >= 1){ weeklyCompBP = weeklyCompBP.add(nft5_value); } return weeklyCompBP; } else { return 0; } } //-------------------Manager Functions------------------ // #set the NFT addresses, only manager function setNFTAddrs(address _nft1, uint16 _id1, address _nft2, uint16 _id2, address _nft3, uint16 _id3, address _nft4, uint16 _id4, address _nft5, uint16 _id5) public restricted { nft1 = IERC1155(_nft1); nft2 = IERC1155(_nft2); nft3 = IERC1155(_nft3); nft4 = IERC1155(_nft4); nft5 = IERC1155(_nft5); nft1id = _id1; nft2id = _id2; nft3id = _id3; nft4id = _id4; nft5id = _id5; } // $sets fee price of submission function setFee(uint64 _fee) public restricted { require(_fee <= 10 ether, "Cant set the fee higher then 10 xDai"); fee = _fee; } // $sets week 1 week length in blocks function setWeekLength(uint32 _blockNum) public restricted { A = _blockNum; } // $sets a new manager of the contract function setManager(address payable _newManager) public restricted { manager = _newManager; emit OwnershipTransferred(_newManager); } //-------------------Modifiers Functions---------------- // while (blockTarget >= currentBlock) = true, unlocked // while (blockTarget <= currentBlock) = untrue, locked modifier termBlk(uint _amt) { require(staker[msg.sender].tokenLock[_amt].termLocked <= block.number, "Locked until term is finnished"); // allow after target reached _; } modifier blk(uint _amt) { require(staker[msg.sender].tokenLock[_amt].nextClaimLocked <= block.number, "Locked until the week is up"); // allow after target reached _; } // *makes sure amt is staked by the user first modifier chkAmt(uint _amt) { require(staker[msg.sender].tokenLock[_amt].amtLocked == _amt.mul(staker[msg.sender].tokenLock[_amt].amtInst), "You must enter an amount you currently have staked"); _; } // *creates a restricted fuction unless you are the manager modifier restricted() { require(msg.sender == manager, "You are not the manager"); _; } //-------------------Special Functions------------------ // selfDestruct USE? INCASE OF NOT FINNISHED YET --------------------------------------------------------------- // function selfDestruct() public restricted { // // rare.transfer(manager, getRareBalance()); // // rareLP.transfer(manager, getRareBalance()); // selfdestruct(manager); // } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_rareAddress","type":"address"},{"internalType":"address","name":"_LPAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_adrRemoved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amtLpRemoved","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_timesStaked","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_unStakeSuccess","type":"bool"}],"name":"LoseStaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_adrStaked","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amtLpStaked","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_releaseBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_termNumSelected","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_stakeSuccess","type":"bool"}],"name":"NewStaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newManager","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_poolBal","type":"uint256"},{"internalType":"uint256","name":"_basisPoints","type":"uint256"}],"name":"calcDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"},{"internalType":"uint256","name":"_pickterm","type":"uint256"},{"internalType":"uint256","name":"_weekNum","type":"uint256"}],"name":"calcEstFutureReturns","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calcLiqBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakedBal","type":"uint256"},{"internalType":"uint256","name":"_totalBal","type":"uint256"}],"name":"calcPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"canClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"claimRare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getActiveStakedNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getCurrentTermBonusBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getCurrentWeeklyBonusBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHistoryStakedNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getNextClaimReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRareBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getTermBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getTermLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalClaimedAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLPtokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalTimesClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"getWeekLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getXdaiBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"isAmtUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mstrLiqBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"removeLPtokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"},{"internalType":"uint256","name":"_pickterm","type":"uint256"}],"name":"renewStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_fee","type":"uint64"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newManager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nft1","type":"address"},{"internalType":"uint16","name":"_id1","type":"uint16"},{"internalType":"address","name":"_nft2","type":"address"},{"internalType":"uint16","name":"_id2","type":"uint16"},{"internalType":"address","name":"_nft3","type":"address"},{"internalType":"uint16","name":"_id3","type":"uint16"},{"internalType":"address","name":"_nft4","type":"address"},{"internalType":"uint16","name":"_id4","type":"uint16"},{"internalType":"address","name":"_nft5","type":"address"},{"internalType":"uint16","name":"_id5","type":"uint16"}],"name":"setNFTAddrs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_blockNum","type":"uint32"}],"name":"setWeekLength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pickterm","type":"uint256"}],"name":"stakeLPtokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"staker","outputs":[{"internalType":"uint256","name":"totalLP","type":"uint256"},{"internalType":"uint32","name":"totalActiveStaked","type":"uint32"},{"internalType":"uint256","name":"totalRareClaimed","type":"uint256"},{"internalType":"uint32","name":"totatTimesClaimed","type":"uint32"},{"internalType":"uint32","name":"totalTimesStaked","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNumStakers","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRareClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260026006601e6101000a81548160ff021916908360ff160217905550678ac7230489e8000060075568015af1d78b58c400006008556802b5e3af16b188000060095568056bc75e2d63100000600a556201d650600f60046101000a81548163ffffffff021916908363ffffffff1602179055506004600f60049054906101000a900463ffffffff1602600f60086101000a81548163ffffffff021916908363ffffffff160217905550600c600f60049054906101000a900463ffffffff1602600f600c6101000a81548163ffffffff021916908363ffffffff1602179055506001600f60106101000a81548160ff021916908360ff1602179055506002600f60116101000a81548160ff021916908360ff1602179055506003600f60126101000a81548160ff021916908360ff1602179055503480156200014457600080fd5b506040516200626538038062006265833981810160405260408110156200016a57600080fd5b81019080805190602001909291908051906020019092919050505033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600b60146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050615fdb806200028a6000396000f3fe6080604052600436106101e35760003560e01c80636cd70de611610102578063bd8f25d711610095578063d3b2168211610064578063d3b2168214610a09578063d85dc9c214610a5a578063dfe02bdc14610a85578063f3f12d7914610ab6576101e3565b8063bd8f25d714610911578063c95c0d891461093c578063ced72f871461098d578063d0ebdbe7146109b8576101e3565b8063a37b06d4116100d1578063a37b06d41461073a578063a3a5265114610793578063ac8b4c88146107be578063b84f576f146108d6576101e3565b80636cd70de6146105eb5780637e7efe8f1461061657806382e4eda4146106795780638ba3f7d21461070c576101e3565b80633a4d326f1161017a578063575c978e11610149578063575c978e146104f45780635a630d7a1461051f57806362348f97146105645780636b9cb82c146105b3576101e3565b80633a4d326f14610400578063537f38011461044f57806354b6558b1461049e578063568cc229146104c9576101e3565b8063316e2b34116101b6578063316e2b34146103205780633638227b1461036f57806336d90ffe1461039a578063380f1b36146103d5576101e3565b8063027e37ca146101e857806304f8bb3a146102415780630f6ff069146102905780631c924705146102d1575b600080fd5b3480156101f457600080fd5b5061022b6004803603604081101561020b57600080fd5b810190808035906020019092919080359060200190929190505050610ae1565b6040518082815260200191505060405180910390f35b34801561024d57600080fd5b5061027a6004803603602081101561026457600080fd5b8101908080359060200190929190505050610b73565b6040518082815260200191505060405180910390f35b34801561029c57600080fd5b506102cf600480360360208110156102b357600080fd5b81019080803563ffffffff169060200190929190505050610d0b565b005b3480156102dd57600080fd5b5061030a600480360360208110156102f457600080fd5b8101908080359060200190929190505050610df2565b6040518082815260200191505060405180910390f35b34801561032c57600080fd5b506103596004803603602081101561034357600080fd5b8101908080359060200190929190505050610f2c565b6040518082815260200191505060405180910390f35b34801561037b57600080fd5b50610384611066565b6040518082815260200191505060405180910390f35b3480156103a657600080fd5b506103d3600480360360208110156103bd57600080fd5b81019080803590602001909291905050506110b0565b005b3480156103e157600080fd5b506103ea61189e565b6040518082815260200191505060405180910390f35b34801561040c57600080fd5b506104396004803603602081101561042357600080fd5b8101908080359060200190929190505050611968565b6040518082815260200191505060405180910390f35b34801561045b57600080fd5b506104886004803603602081101561047257600080fd5b8101908080359060200190929190505050611aa2565b6040518082815260200191505060405180910390f35b3480156104aa57600080fd5b506104b3611ca6565b6040518082815260200191505060405180910390f35b3480156104d557600080fd5b506104de611d06565b6040518082815260200191505060405180910390f35b34801561050057600080fd5b50610509611d0c565b6040518082815260200191505060405180910390f35b34801561052b57600080fd5b506105626004803603602081101561054257600080fd5b81019080803567ffffffffffffffff169060200190929190505050611d12565b005b34801561057057600080fd5b5061059d6004803603602081101561058757600080fd5b8101908080359060200190929190505050611e6c565b6040518082815260200191505060405180910390f35b6105e9600480360360408110156105c957600080fd5b810190808035906020019092919080359060200190929190505050612099565b005b3480156105f757600080fd5b50610600612a5c565b6040518082815260200191505060405180910390f35b34801561062257600080fd5b506106636004803603606081101561063957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612aa6565b6040518082815260200191505060405180910390f35b34801561068557600080fd5b506106c86004803603602081101561069c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d13565b604051808681526020018563ffffffff1681526020018481526020018363ffffffff1681526020018263ffffffff1681526020019550505050505060405180910390f35b6107386004803603602081101561072257600080fd5b8101908080359060200190929190505050612d79565b005b34801561074657600080fd5b5061077d6004803603604081101561075d57600080fd5b810190808035906020019092919080359060200190929190505050613e69565b6040518082815260200191505060405180910390f35b34801561079f57600080fd5b506107a8613f3a565b6040518082815260200191505060405180910390f35b3480156107ca57600080fd5b506108d460048036036101408110156107e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050613f42565b005b3480156108e257600080fd5b5061090f600480360360208110156108f957600080fd5b81019080803590602001909291905050506141e7565b005b34801561091d57600080fd5b50610926614a42565b6040518082815260200191505060405180910390f35b34801561094857600080fd5b506109756004803603602081101561095f57600080fd5b8101908080359060200190929190505050614aa2565b60405180821515815260200191505060405180910390f35b34801561099957600080fd5b506109a2614c52565b6040518082815260200191505060405180910390f35b3480156109c457600080fd5b50610a07600480360360208110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614db6565b005b348015610a1557600080fd5b50610a4260048036036020811015610a2c57600080fd5b8101908080359060200190929190505050614f00565b60405180821515815260200191505060405180910390f35b348015610a6657600080fd5b50610a6f6150b0565b6040518082815260200191505060405180910390f35b348015610a9157600080fd5b50610a9a615110565b604051808263ffffffff16815260200191505060405180910390f35b348015610ac257600080fd5b50610acb615126565b6040518082815260200191505060405180910390f35b60006001831015610b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e16602e913960400191505060405180910390fd5b610b6b68056bc75e2d63100000610b5d848661512c90919063ffffffff16565b6151b290919063ffffffff16565b905092915050565b600081610bef601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160009054906101000a900460ff1660ff16915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b80600f60046101000a81548163ffffffff021916908363ffffffff16021790555050565b600081610e6e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b610f24836151fc565b915050919050565b600081610fa8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611055576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b61105e83615228565b915050919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905090565b8061112a601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060010154146111d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8143601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156112ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff161161133757611336836141e7565b5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060000160019054906101000a900460ff1660ff1690506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600101819055506114786001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600087815260200190815260200160002060000160019054906101000a900460ff1660ff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160016101000a81548160ff021916908360ff16021790555061150d6114fc828661512c90919063ffffffff16565b600c5461571690919063ffffffff16565b600c8190555061153a611529828661512c90919063ffffffff16565b600d5461571690919063ffffffff16565b600d8190555061156c6001600f60009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff1602179055506115f36115a2828661512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506116a56001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33611757848861512c90919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b505050506040513d60208110156117d457600080fd5b810190808051906020019092919050505050833373ffffffffffffffffffffffffffffffffffffffff167f8ffaab89f3f3781897b78f7d9ed4bec5778e2a837a25f5773fb6c2c1bf4f2b6c601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff166001604051808363ffffffff16815260200182151581526020019250505060405180910390a350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561192857600080fd5b505afa15801561193c573d6000803e3d6000fd5b505050506040513d602081101561195257600080fd5b8101908080519060200190929190505050905090565b6000816119e4601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b611a9a83615760565b915050919050565b600081611b1e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b611c9e611c77600f60049054906101000a900463ffffffff1663ffffffff16611c69601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060020160089054906101000a900463ffffffff1663ffffffff164361571690919063ffffffff16565b61578290919063ffffffff16565b600f60049054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b915050919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16905090565b600c5481565b600e5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b678ac7230489e800008167ffffffffffffffff161115611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615df26024913960400191505060405180910390fd5b80600b60146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b600081611ee8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16116120115760009150612093565b61209043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b91505b50919050565b81612113601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060010154146121c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8243601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b60016122ad611ca6565b1015612304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615e6b602a913960400191505060405180910390fd5b60018314806123135750600283145b8061231e5750600383145b612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615ef4602a913960400191505060405180910390fd5b61237b614c52565b3410156123d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615e446027913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61242a600261241c614c52565b6151b290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612455573d6000803e3d6000fd5b5043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff16021790555060018314156125f6576124ff600f60049054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60109054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555061284a565b60028314156127215761262a600f60089054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60119054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550612849565b600383141561284857612755600f600c9054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60129054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160019054906101000a900460ff1660ff16111561296b5761296061294f612938601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060000160019054906101000a900460ff1660ff168761512c90919063ffffffff16565b61294187615854565b61571690919063ffffffff16565b600d546157cc90919063ffffffff16565b600d8190555061298f565b61298861297785615854565b600d546157cc90919063ffffffff16565b600d819055505b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16843373ffffffffffffffffffffffffffffffffffffffff167f5be76f11b0a6c1f6d83b914370e22b9ed54ad8a1ecedc55792fe54a57baa36268660016040518083815260200182151581526020019250505060405180910390a450505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154905090565b60006001821015612b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d7573742073656c656374206d6f7265207468656e2031207765656b0000000081525060200191505060405180910390fd5b600080600090505b600184038111612b4b57670de0b6b3a7640000820191508080600101915050612b27565b506000612b588683610ae1565b90506000612b7182600d546157cc90919063ffffffff16565b90506000612c0087612bf2601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008c815260200190815260200160002060000160019054906101000a900460ff1660ff168b61512c90919063ffffffff16565b61512c90919063ffffffff16565b90506000612c20612c1a85846157cc90919063ffffffff16565b84613e69565b90506000612cef60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612cae57600080fd5b505afa158015612cc2573d6000803e3d6000fd5b505050506040513d6020811015612cd857600080fd5b810190808051906020019092919050505083610ae1565b9050612d04888261512c90919063ffffffff16565b96505050505050509392505050565b60106020528060005260406000206000915090508060010154908060020160009054906101000a900463ffffffff16908060030154908060040160009054906101000a900463ffffffff16908060040160049054906101000a900463ffffffff16905085565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612e2157600080fd5b505afa158015612e35573d6000803e3d6000fd5b505050506040513d6020811015612e4b57600080fd5b81019080805190602001909291905050501015612eb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180615f50602d913960400191505060405180910390fd5b612ebb614c52565b341015612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615e446027913960400191505060405180910390fd5b6001811480612f225750600281145b80612f2d5750600381145b612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615f7d6029913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612fd96002612fcb614c52565b6151b290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613004573d6000803e3d6000fd5b506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156130ae57600080fd5b505afa1580156130c2573d6000803e3d6000fd5b505050506040513d60208110156130d857600080fd5b8101908080519060200190929190505050905080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101541415613412576131b36002601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008481526020019081526020016000206001015461512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101819055506132876001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160019054906101000a900460ff1660ff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506133216001600f60009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff1602179055506133ad6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff1602179055506134de565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055505b6134f381600c546157cc90919063ffffffff16565b600c819055506135256001600f60009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff16021790555061359a81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061364c6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff1602179055506137186001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160046101000a81548163ffffffff021916908363ffffffff16021790555043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff160217905550600182141561391857613821600f60049054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60109054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550613b6c565b6002821415613a435761394c600f60089054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60119054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550613b6b565b6003821415613b6a57613a77600f600c9054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60129054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff161115613c8d57613c82613c71613c5a601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060000160019054906101000a900460ff1660ff168461512c90919063ffffffff16565b613c6384615854565b61571690919063ffffffff16565b600d546157cc90919063ffffffff16565b600d81905550613cb1565b613caa613c9982615854565b600d546157cc90919063ffffffff16565b600d819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613d6257600080fd5b505af1158015613d76573d6000803e3d6000fd5b505050506040513d6020811015613d8c57600080fd5b810190808051906020019092919050505050601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f5be76f11b0a6c1f6d83b914370e22b9ed54ad8a1ecedc55792fe54a57baa36268560016040518083815260200182151581526020019250505060405180910390a45050565b60006001613e9b83613e8d68056bc75e2d631000008761512c90919063ffffffff16565b6151b290919063ffffffff16565b1015613ef2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180615eb6603e913960400191505060405180910390fd5b600082905060008490506000613f2c83613f1e68056bc75e2d631000008561512c90919063ffffffff16565b6151b290919063ffffffff16565b905080935050505092915050565b600047905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b89600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600660146101000a81548161ffff021916908361ffff16021790555086600660166101000a81548161ffff021916908361ffff16021790555084600660186101000a81548161ffff021916908361ffff160217905550826006601a6101000a81548161ffff021916908361ffff160217905550806006601c6101000a81548161ffff021916908361ffff16021790555050505050505050505050565b80614261601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101541461430e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8143601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff1611156143f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c6f636b656420756e74696c20746865207765656b206973207570000000000081525060200191505060405180910390fd5b8243601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156144d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b60006144e285600c54613e69565b905060006144f76144f1613f3a565b83610ae1565b9050600061458e614577601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060000160019054906101000a900460ff1660ff168961512c90919063ffffffff16565b61458089615854565b61571690919063ffffffff16565b9050600061459b886151fc565b9050600f60049054906101000a900463ffffffff1663ffffffff164301601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160046101000a81548163ffffffff021916908363ffffffff16021790555043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff1602179055506146b681600e546157cc90919063ffffffff16565b600e819055506146d182600d5461571690919063ffffffff16565b600d819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff16021790555061481281601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506148c46001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561496a573d6000803e3d6000fd5b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156149fc57600080fd5b505af1158015614a10573d6000803e3d6000fd5b505050506040513d6020811015614a2657600080fd5b8101908080519060200190929190505050505050505050505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900463ffffffff1663ffffffff16905090565b600081614b1e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414614bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff1611614c475760019150614c4c565b600091505b50919050565b600080600b60149054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506001600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660149054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b158015614d1e57600080fd5b505afa158015614d32573d6000803e3d6000fd5b505050506040513d6020811015614d4857600080fd5b810190808051906020019092919050505010614d8e57614d836006601e9054906101000a900460ff1660ff16826151b290919063ffffffff16565b905080915050614db3565b600b60149054906101000a900467ffffffffffffffff1667ffffffffffffffff169150505b90565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360405160405180910390a250565b600081614f7c601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414615029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16116150a557600191506150aa565b600091505b50919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff1663ffffffff16905090565b600f60009054906101000a900463ffffffff1681565b600d5481565b60008083141561513f57600090506151ac565b600082840290508284828161515057fe5b04146151a7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615e956021913960400191505060405180910390fd5b809150505b92915050565b60006151f483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061594e565b905092915050565b600061522161520a83615a14565b61521384615b5e565b6157cc90919063ffffffff16565b9050919050565b60008060006152d6600f60049054906101000a900463ffffffff1663ffffffff166152c8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060020160089054906101000a900463ffffffff1663ffffffff164361571690919063ffffffff16565b6151b290919063ffffffff16565b90506001811061570a5760005b60018203811161530757670de0b6b3a76400008301925080806001019150506152e3565b506001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660169054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156153ae57600080fd5b505afa1580156153c2573d6000803e3d6000fd5b505050506040513d60208110156153d857600080fd5b81019080805190602001909291905050501061540657615403600754836157cc90919063ffffffff16565b91505b6001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660189054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156154ac57600080fd5b505afa1580156154c0573d6000803e3d6000fd5b505050506040513d60208110156154d657600080fd5b81019080805190602001909291905050501061550457615501600854836157cc90919063ffffffff16565b91505b6001600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336006601a9054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156155aa57600080fd5b505afa1580156155be573d6000803e3d6000fd5b505050506040513d60208110156155d457600080fd5b810190808051906020019092919050505010615602576155ff600954836157cc90919063ffffffff16565b91505b6001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336006601c9054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156156a857600080fd5b505afa1580156156bc573d6000803e3d6000fd5b505050506040513d60208110156156d257600080fd5b810190808051906020019092919050505010615700576156fd600a54836157cc90919063ffffffff16565b91505b8192505050615711565b6000925050505b919050565b600061575883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615c50565b905092915050565b60008061576c83615854565b905061577a81600d54613e69565b915050919050565b60006157c483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250615d10565b905092915050565b60008082840190508381101561584a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000615947601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160009054906101000a900460ff1660ff16615939601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160019054906101000a900460ff1660ff168561512c90919063ffffffff16565b61512c90919063ffffffff16565b9050919050565b600080831182906159fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156159bf5780820151818401526020810190506159a4565b50505050905090810190601f1680156159ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615a0657fe5b049050809150509392505050565b600080615a2083615dd1565b90506000615a3982600d546157cc90919063ffffffff16565b90506000615a4685615854565b90506000615a66615a6085846157cc90919063ffffffff16565b84613e69565b90506000615b3560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015615af457600080fd5b505afa158015615b08573d6000803e3d6000fd5b505050506040513d6020811015615b1e57600080fd5b810190808051906020019092919050505083610ae1565b9050615b52615b4388615b5e565b8261571690919063ffffffff16565b95505050505050919050565b600080615b6a83615854565b90506000615b7a82600d54613e69565b9050615c4760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015615c0657600080fd5b505afa158015615c1a573d6000803e3d6000fd5b505050506040513d6020811015615c3057600080fd5b810190808051906020019092919050505082610ae1565b92505050919050565b6000838311158290615cfd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615cc2578082015181840152602081019050615ca7565b50505050905090810190601f168015615cef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314158290615dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615d82578082015181840152602081019050615d67565b50505050905090810190601f168015615daf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481615dc757fe5b0690509392505050565b600080615ddd83615228565b9050615de98382610ae1565b91505091905056fe43616e7420736574207468652066656520686967686572207468656e20313020784461694661696c656420746f206d656574206d696e696d756d2028312077656929207265717569726564207061796f7574596f75206d75737420636f766572207468652078446169207472616e73616374696f6e206665654d757374204861766520536f6d657468696e67205374616b6520546f20536574204e6577205465726d73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c656420746f206d656574206d696e696d756d2070657263656e746167652c20546f20736d616c6c20746f206576656e2063616c63756c61746521696e76616c696564207465726d2073656c656374696f6e3a204d75737420626520312c2032206f722033596f75206d75737420656e74657220616e20616d6f756e7420796f752063757272656e746c792068617665207374616b6564596f75206d75737420616c6c6f7720736f6d6520526172652f78446169204c5020746f6b656e73206669727374496e76616c6964207465726d2073656c656374696f6e3a204d75737420626520312c2032206f722033a26469706673582212207705ae4b295b2e9af22b25eaff05ca23492afd4cc58a25529d255f1f0bc380be64736f6c6343000706003300000000000000000000000057e93bb58268de818b42e3795c97bad58afcd3fe0000000000000000000000005805bb63e73ec272c74e210d280c05b41d719827
Deployed Bytecode
0x6080604052600436106101e35760003560e01c80636cd70de611610102578063bd8f25d711610095578063d3b2168211610064578063d3b2168214610a09578063d85dc9c214610a5a578063dfe02bdc14610a85578063f3f12d7914610ab6576101e3565b8063bd8f25d714610911578063c95c0d891461093c578063ced72f871461098d578063d0ebdbe7146109b8576101e3565b8063a37b06d4116100d1578063a37b06d41461073a578063a3a5265114610793578063ac8b4c88146107be578063b84f576f146108d6576101e3565b80636cd70de6146105eb5780637e7efe8f1461061657806382e4eda4146106795780638ba3f7d21461070c576101e3565b80633a4d326f1161017a578063575c978e11610149578063575c978e146104f45780635a630d7a1461051f57806362348f97146105645780636b9cb82c146105b3576101e3565b80633a4d326f14610400578063537f38011461044f57806354b6558b1461049e578063568cc229146104c9576101e3565b8063316e2b34116101b6578063316e2b34146103205780633638227b1461036f57806336d90ffe1461039a578063380f1b36146103d5576101e3565b8063027e37ca146101e857806304f8bb3a146102415780630f6ff069146102905780631c924705146102d1575b600080fd5b3480156101f457600080fd5b5061022b6004803603604081101561020b57600080fd5b810190808035906020019092919080359060200190929190505050610ae1565b6040518082815260200191505060405180910390f35b34801561024d57600080fd5b5061027a6004803603602081101561026457600080fd5b8101908080359060200190929190505050610b73565b6040518082815260200191505060405180910390f35b34801561029c57600080fd5b506102cf600480360360208110156102b357600080fd5b81019080803563ffffffff169060200190929190505050610d0b565b005b3480156102dd57600080fd5b5061030a600480360360208110156102f457600080fd5b8101908080359060200190929190505050610df2565b6040518082815260200191505060405180910390f35b34801561032c57600080fd5b506103596004803603602081101561034357600080fd5b8101908080359060200190929190505050610f2c565b6040518082815260200191505060405180910390f35b34801561037b57600080fd5b50610384611066565b6040518082815260200191505060405180910390f35b3480156103a657600080fd5b506103d3600480360360208110156103bd57600080fd5b81019080803590602001909291905050506110b0565b005b3480156103e157600080fd5b506103ea61189e565b6040518082815260200191505060405180910390f35b34801561040c57600080fd5b506104396004803603602081101561042357600080fd5b8101908080359060200190929190505050611968565b6040518082815260200191505060405180910390f35b34801561045b57600080fd5b506104886004803603602081101561047257600080fd5b8101908080359060200190929190505050611aa2565b6040518082815260200191505060405180910390f35b3480156104aa57600080fd5b506104b3611ca6565b6040518082815260200191505060405180910390f35b3480156104d557600080fd5b506104de611d06565b6040518082815260200191505060405180910390f35b34801561050057600080fd5b50610509611d0c565b6040518082815260200191505060405180910390f35b34801561052b57600080fd5b506105626004803603602081101561054257600080fd5b81019080803567ffffffffffffffff169060200190929190505050611d12565b005b34801561057057600080fd5b5061059d6004803603602081101561058757600080fd5b8101908080359060200190929190505050611e6c565b6040518082815260200191505060405180910390f35b6105e9600480360360408110156105c957600080fd5b810190808035906020019092919080359060200190929190505050612099565b005b3480156105f757600080fd5b50610600612a5c565b6040518082815260200191505060405180910390f35b34801561062257600080fd5b506106636004803603606081101561063957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612aa6565b6040518082815260200191505060405180910390f35b34801561068557600080fd5b506106c86004803603602081101561069c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d13565b604051808681526020018563ffffffff1681526020018481526020018363ffffffff1681526020018263ffffffff1681526020019550505050505060405180910390f35b6107386004803603602081101561072257600080fd5b8101908080359060200190929190505050612d79565b005b34801561074657600080fd5b5061077d6004803603604081101561075d57600080fd5b810190808035906020019092919080359060200190929190505050613e69565b6040518082815260200191505060405180910390f35b34801561079f57600080fd5b506107a8613f3a565b6040518082815260200191505060405180910390f35b3480156107ca57600080fd5b506108d460048036036101408110156107e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050613f42565b005b3480156108e257600080fd5b5061090f600480360360208110156108f957600080fd5b81019080803590602001909291905050506141e7565b005b34801561091d57600080fd5b50610926614a42565b6040518082815260200191505060405180910390f35b34801561094857600080fd5b506109756004803603602081101561095f57600080fd5b8101908080359060200190929190505050614aa2565b60405180821515815260200191505060405180910390f35b34801561099957600080fd5b506109a2614c52565b6040518082815260200191505060405180910390f35b3480156109c457600080fd5b50610a07600480360360208110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614db6565b005b348015610a1557600080fd5b50610a4260048036036020811015610a2c57600080fd5b8101908080359060200190929190505050614f00565b60405180821515815260200191505060405180910390f35b348015610a6657600080fd5b50610a6f6150b0565b6040518082815260200191505060405180910390f35b348015610a9157600080fd5b50610a9a615110565b604051808263ffffffff16815260200191505060405180910390f35b348015610ac257600080fd5b50610acb615126565b6040518082815260200191505060405180910390f35b60006001831015610b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e16602e913960400191505060405180910390fd5b610b6b68056bc75e2d63100000610b5d848661512c90919063ffffffff16565b6151b290919063ffffffff16565b905092915050565b600081610bef601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160009054906101000a900460ff1660ff16915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b80600f60046101000a81548163ffffffff021916908363ffffffff16021790555050565b600081610e6e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b610f24836151fc565b915050919050565b600081610fa8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611055576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b61105e83615228565b915050919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905090565b8061112a601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060010154146111d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8143601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156112ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff161161133757611336836141e7565b5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060000160019054906101000a900460ff1660ff1690506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600101819055506114786001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600087815260200190815260200160002060000160019054906101000a900460ff1660ff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160016101000a81548160ff021916908360ff16021790555061150d6114fc828661512c90919063ffffffff16565b600c5461571690919063ffffffff16565b600c8190555061153a611529828661512c90919063ffffffff16565b600d5461571690919063ffffffff16565b600d8190555061156c6001600f60009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff1602179055506115f36115a2828661512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506116a56001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33611757848861512c90919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b505050506040513d60208110156117d457600080fd5b810190808051906020019092919050505050833373ffffffffffffffffffffffffffffffffffffffff167f8ffaab89f3f3781897b78f7d9ed4bec5778e2a837a25f5773fb6c2c1bf4f2b6c601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff166001604051808363ffffffff16815260200182151581526020019250505060405180910390a350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561192857600080fd5b505afa15801561193c573d6000803e3d6000fd5b505050506040513d602081101561195257600080fd5b8101908080519060200190929190505050905090565b6000816119e4601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b611a9a83615760565b915050919050565b600081611b1e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b611c9e611c77600f60049054906101000a900463ffffffff1663ffffffff16611c69601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060020160089054906101000a900463ffffffff1663ffffffff164361571690919063ffffffff16565b61578290919063ffffffff16565b600f60049054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b915050919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16905090565b600c5481565b600e5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b678ac7230489e800008167ffffffffffffffff161115611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615df26024913960400191505060405180910390fd5b80600b60146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b600081611ee8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16116120115760009150612093565b61209043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b91505b50919050565b81612113601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060010154146121c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8243601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b60016122ad611ca6565b1015612304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615e6b602a913960400191505060405180910390fd5b60018314806123135750600283145b8061231e5750600383145b612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615ef4602a913960400191505060405180910390fd5b61237b614c52565b3410156123d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615e446027913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61242a600261241c614c52565b6151b290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612455573d6000803e3d6000fd5b5043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff16021790555060018314156125f6576124ff600f60049054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60109054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555061284a565b60028314156127215761262a600f60089054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60119054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550612849565b600383141561284857612755600f600c9054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60129054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160019054906101000a900460ff1660ff16111561296b5761296061294f612938601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060000160019054906101000a900460ff1660ff168761512c90919063ffffffff16565b61294187615854565b61571690919063ffffffff16565b600d546157cc90919063ffffffff16565b600d8190555061298f565b61298861297785615854565b600d546157cc90919063ffffffff16565b600d819055505b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16843373ffffffffffffffffffffffffffffffffffffffff167f5be76f11b0a6c1f6d83b914370e22b9ed54ad8a1ecedc55792fe54a57baa36268660016040518083815260200182151581526020019250505060405180910390a450505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154905090565b60006001821015612b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d7573742073656c656374206d6f7265207468656e2031207765656b0000000081525060200191505060405180910390fd5b600080600090505b600184038111612b4b57670de0b6b3a7640000820191508080600101915050612b27565b506000612b588683610ae1565b90506000612b7182600d546157cc90919063ffffffff16565b90506000612c0087612bf2601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008c815260200190815260200160002060000160019054906101000a900460ff1660ff168b61512c90919063ffffffff16565b61512c90919063ffffffff16565b90506000612c20612c1a85846157cc90919063ffffffff16565b84613e69565b90506000612cef60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612cae57600080fd5b505afa158015612cc2573d6000803e3d6000fd5b505050506040513d6020811015612cd857600080fd5b810190808051906020019092919050505083610ae1565b9050612d04888261512c90919063ffffffff16565b96505050505050509392505050565b60106020528060005260406000206000915090508060010154908060020160009054906101000a900463ffffffff16908060030154908060040160009054906101000a900463ffffffff16908060040160049054906101000a900463ffffffff16905085565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612e2157600080fd5b505afa158015612e35573d6000803e3d6000fd5b505050506040513d6020811015612e4b57600080fd5b81019080805190602001909291905050501015612eb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180615f50602d913960400191505060405180910390fd5b612ebb614c52565b341015612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615e446027913960400191505060405180910390fd5b6001811480612f225750600281145b80612f2d5750600381145b612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615f7d6029913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612fd96002612fcb614c52565b6151b290919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613004573d6000803e3d6000fd5b506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156130ae57600080fd5b505afa1580156130c2573d6000803e3d6000fd5b505050506040513d60208110156130d857600080fd5b8101908080519060200190929190505050905080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101541415613412576131b36002601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008481526020019081526020016000206001015461512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101819055506132876001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160019054906101000a900460ff1660ff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506133216001600f60009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff1602179055506133ad6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1661571690919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff1602179055506134de565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055505b6134f381600c546157cc90919063ffffffff16565b600c819055506135256001600f60009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b600f60006101000a81548163ffffffff021916908363ffffffff16021790555061359a81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061364c6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff1602179055506137186001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160046101000a81548163ffffffff021916908363ffffffff16021790555043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff160217905550600182141561391857613821600f60049054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60109054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550613b6c565b6002821415613a435761394c600f60089054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60119054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550613b6b565b6003821415613b6a57613a77600f600c9054906101000a900463ffffffff1663ffffffff16436157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff160217905550600f60129054906101000a900460ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055505b5b5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff161115613c8d57613c82613c71613c5a601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060000160019054906101000a900460ff1660ff168461512c90919063ffffffff16565b613c6384615854565b61571690919063ffffffff16565b600d546157cc90919063ffffffff16565b600d81905550613cb1565b613caa613c9982615854565b600d546157cc90919063ffffffff16565b600d819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613d6257600080fd5b505af1158015613d76573d6000803e3d6000fd5b505050506040513d6020811015613d8c57600080fd5b810190808051906020019092919050505050601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f5be76f11b0a6c1f6d83b914370e22b9ed54ad8a1ecedc55792fe54a57baa36268560016040518083815260200182151581526020019250505060405180910390a45050565b60006001613e9b83613e8d68056bc75e2d631000008761512c90919063ffffffff16565b6151b290919063ffffffff16565b1015613ef2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180615eb6603e913960400191505060405180910390fd5b600082905060008490506000613f2c83613f1e68056bc75e2d631000008561512c90919063ffffffff16565b6151b290919063ffffffff16565b905080935050505092915050565b600047905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b89600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600660146101000a81548161ffff021916908361ffff16021790555086600660166101000a81548161ffff021916908361ffff16021790555084600660186101000a81548161ffff021916908361ffff160217905550826006601a6101000a81548161ffff021916908361ffff160217905550806006601c6101000a81548161ffff021916908361ffff16021790555050505050505050505050565b80614261601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020600101541461430e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b8143601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff1611156143f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c6f636b656420756e74696c20746865207765656b206973207570000000000081525060200191505060405180910390fd5b8243601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff1611156144d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c6f636b656420756e74696c207465726d2069732066696e6e6973686564000081525060200191505060405180910390fd5b60006144e285600c54613e69565b905060006144f76144f1613f3a565b83610ae1565b9050600061458e614577601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060000160019054906101000a900460ff1660ff168961512c90919063ffffffff16565b61458089615854565b61571690919063ffffffff16565b9050600061459b886151fc565b9050600f60049054906101000a900463ffffffff1663ffffffff164301601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160046101000a81548163ffffffff021916908363ffffffff16021790555043601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160086101000a81548163ffffffff021916908363ffffffff1602179055506146b681600e546157cc90919063ffffffff16565b600e819055506146d182600d5461571690919063ffffffff16565b600d819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008a815260200190815260200160002060020160006101000a81548163ffffffff021916908363ffffffff16021790555061481281601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506148c46001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900463ffffffff1663ffffffff166157cc90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561496a573d6000803e3d6000fd5b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156149fc57600080fd5b505af1158015614a10573d6000803e3d6000fd5b505050506040513d6020811015614a2657600080fd5b8101908080519060200190929190505050505050505050505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900463ffffffff1663ffffffff16905090565b600081614b1e601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414614bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160049054906101000a900463ffffffff1663ffffffff1611614c475760019150614c4c565b600091505b50919050565b600080600b60149054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506001600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660149054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b158015614d1e57600080fd5b505afa158015614d32573d6000803e3d6000fd5b505050506040513d6020811015614d4857600080fd5b810190808051906020019092919050505010614d8e57614d836006601e9054906101000a900460ff1660ff16826151b290919063ffffffff16565b905080915050614db3565b600b60149054906101000a900467ffffffffffffffff1667ffffffffffffffff169150505b90565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f7520617265206e6f7420746865206d616e6167657200000000000000000081525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360405160405180910390a250565b600081614f7c601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600083815260200190815260200160002060000160019054906101000a900460ff1660ff168261512c90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008381526020019081526020016000206001015414615029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615f1e6032913960400191505060405180910390fd5b43601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600085815260200190815260200160002060020160009054906101000a900463ffffffff1663ffffffff16116150a557600191506150aa565b600091505b50919050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160049054906101000a900463ffffffff1663ffffffff16905090565b600f60009054906101000a900463ffffffff1681565b600d5481565b60008083141561513f57600090506151ac565b600082840290508284828161515057fe5b04146151a7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615e956021913960400191505060405180910390fd5b809150505b92915050565b60006151f483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061594e565b905092915050565b600061522161520a83615a14565b61521384615b5e565b6157cc90919063ffffffff16565b9050919050565b60008060006152d6600f60049054906101000a900463ffffffff1663ffffffff166152c8601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600088815260200190815260200160002060020160089054906101000a900463ffffffff1663ffffffff164361571690919063ffffffff16565b6151b290919063ffffffff16565b90506001811061570a5760005b60018203811161530757670de0b6b3a76400008301925080806001019150506152e3565b506001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660169054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156153ae57600080fd5b505afa1580156153c2573d6000803e3d6000fd5b505050506040513d60208110156153d857600080fd5b81019080805190602001909291905050501061540657615403600754836157cc90919063ffffffff16565b91505b6001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33600660189054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156154ac57600080fd5b505afa1580156154c0573d6000803e3d6000fd5b505050506040513d60208110156154d657600080fd5b81019080805190602001909291905050501061550457615501600854836157cc90919063ffffffff16565b91505b6001600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336006601a9054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156155aa57600080fd5b505afa1580156155be573d6000803e3d6000fd5b505050506040513d60208110156155d457600080fd5b810190808051906020019092919050505010615602576155ff600954836157cc90919063ffffffff16565b91505b6001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336006601c9054906101000a900461ffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1681526020019250505060206040518083038186803b1580156156a857600080fd5b505afa1580156156bc573d6000803e3d6000fd5b505050506040513d60208110156156d257600080fd5b810190808051906020019092919050505010615700576156fd600a54836157cc90919063ffffffff16565b91505b8192505050615711565b6000925050505b919050565b600061575883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615c50565b905092915050565b60008061576c83615854565b905061577a81600d54613e69565b915050919050565b60006157c483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250615d10565b905092915050565b60008082840190508381101561584a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000615947601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060000160009054906101000a900460ff1660ff16615939601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600086815260200190815260200160002060000160019054906101000a900460ff1660ff168561512c90919063ffffffff16565b61512c90919063ffffffff16565b9050919050565b600080831182906159fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156159bf5780820151818401526020810190506159a4565b50505050905090810190601f1680156159ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615a0657fe5b049050809150509392505050565b600080615a2083615dd1565b90506000615a3982600d546157cc90919063ffffffff16565b90506000615a4685615854565b90506000615a66615a6085846157cc90919063ffffffff16565b84613e69565b90506000615b3560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015615af457600080fd5b505afa158015615b08573d6000803e3d6000fd5b505050506040513d6020811015615b1e57600080fd5b810190808051906020019092919050505083610ae1565b9050615b52615b4388615b5e565b8261571690919063ffffffff16565b95505050505050919050565b600080615b6a83615854565b90506000615b7a82600d54613e69565b9050615c4760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015615c0657600080fd5b505afa158015615c1a573d6000803e3d6000fd5b505050506040513d6020811015615c3057600080fd5b810190808051906020019092919050505082610ae1565b92505050919050565b6000838311158290615cfd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615cc2578082015181840152602081019050615ca7565b50505050905090810190601f168015615cef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314158290615dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615d82578082015181840152602081019050615d67565b50505050905090810190601f168015615daf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481615dc757fe5b0690509392505050565b600080615ddd83615228565b9050615de98382610ae1565b91505091905056fe43616e7420736574207468652066656520686967686572207468656e20313020784461694661696c656420746f206d656574206d696e696d756d2028312077656929207265717569726564207061796f7574596f75206d75737420636f766572207468652078446169207472616e73616374696f6e206665654d757374204861766520536f6d657468696e67205374616b6520546f20536574204e6577205465726d73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c656420746f206d656574206d696e696d756d2070657263656e746167652c20546f20736d616c6c20746f206576656e2063616c63756c61746521696e76616c696564207465726d2073656c656374696f6e3a204d75737420626520312c2032206f722033596f75206d75737420656e74657220616e20616d6f756e7420796f752063757272656e746c792068617665207374616b6564596f75206d75737420616c6c6f7720736f6d6520526172652f78446169204c5020746f6b656e73206669727374496e76616c6964207465726d2073656c656374696f6e3a204d75737420626520312c2032206f722033a26469706673582212207705ae4b295b2e9af22b25eaff05ca23492afd4cc58a25529d255f1f0bc380be64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000057e93bb58268de818b42e3795c97bad58afcd3fe0000000000000000000000005805bb63e73ec272c74e210d280c05b41d719827
-----Decoded View---------------
Arg [0] : _rareAddress (address): 0x57e93BB58268dE818B42E3795c97BAD58aFCD3Fe
Arg [1] : _LPAddress (address): 0x5805bb63e73Ec272c74e210D280C05B41D719827
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000057e93bb58268de818b42e3795c97bad58afcd3fe
Arg [1] : 0000000000000000000000005805bb63e73ec272c74e210d280c05b41d719827
Loading...
Loading
Loading...
Loading
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.