Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MSconnext
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-23 */ pragma solidity >=0.4.22 <0.7.0; // MRconnect contracts contract MSconnext { using SafeMath for uint256; using SafeERC20 for IERC20; uint256 public startAt = 0; uint256 public lastUpdateTime; uint256 public lastUpdateTimeofMSPool; uint256 public rewardPerTokenStored; uint256 public contractTotalGroupStaked = 0; uint256 public mrTotalDeposit = 0;// mr 总质押 uint256 public msTotalDeposit = 0;// ms 总质押 uint256 public daysOfProcess; // 默认为0 uint256 public baseHalve = 0; uint256 public msbankPeriod = 10800000 ;//125*86400 // 用于计算动态收益的抵押 // 系统临时变量 mapping(address => uint256) public stakeForDynamic; mapping(address => uint256) public userRewardPerTokenPaidForDynamic; mapping(address => uint256) public rewardsForDynamic; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; mapping(uint256 => uint256) public rewardsOfEveryDay; //记录每日收获 mapping(address => bool) public isOwner; //记录每日收获 // 我的团队质押 // 只拿五代 // 也包括我自己的 mapping(address => uint256) public groupStaked; uint256 public groupTeamTotalRelease;// 一共发放了多少星级奖励 uint256 public mrStaticRewardTotalRelease; // 一共发放了多少静态奖励 uint256 public mrDynamicRewardTotalRelease; // 一共发放了多少动态奖励 uint256 public usdtTotalRelease; // 一共释放多少USDT mapping(address => uint256) public mrDynamicRewardAlreadyRelase; mapping(address => uint256) public mrStaticRewardAlreadyRelase; // mr 矿池个人静态奖励已经发放的 mapping(address => uint256) public usdtAlreadyWithdraw; // usdt 已经提取的 mapping(address => uint256) public groupTeamRelease; // 个人星级矿池释放 uint256 public eachDayRelase = 1050 * 1e18; // 每秒静态收益 uint256 public staticRewardPerSecond = uint256(eachDayRelase).mul(40).div(86400).div(100); address public msToken=address(0xeDFFAdB79bc62737d6033594fAf56A5A3DF48aA2); // mr erc20 token address public mrToken=address(0xc4BfcF8821dbE9681F81e8213Bbe1b7cAbB78F13); // usdt 的erc20 地址 address public usdtToken = address(0xdAC17F958D2ee523a2206206994597C13D831ec7); address public usdtMsUniContract = address(0xCaBD18918115B98e2fA0bDcB77A24AE6aB3d9c9c); address public owner; // 推荐关系 mapping (address => address) public relationship; // 用户的直接下级(只记录前6个) mapping (address => address[]) public derives; mapping (address => uint256) public mrDeposit; // 个人 mr 总质押 mapping (address => uint256) public mrTimestamp; // 个人最后一次 存入mr 的时间 mapping (address => uint256) public msDeposit; // 个人 ms 总质押 struct UserMsBank{ uint256 lastupdate; // 用户最后一次投入对时间 uint256 profit ;// 待领取的金额 uint256 remain; //待发收益的总数 uint256 totalUsdt ;// 总基数 USDT } mapping (address => UserMsBank) public userMsBank; // 用户的 MSBANKINFO event Deposit(address indexed user, uint256 amount); // 存入MR event TeamReward(address indexed user,uint256 reward); // 领取团队奖励 event DepositMs(address indexed user,uint256 amount); // 存入MS event Withdraw(address indexed user,uint256 amount); // 领取MS event WithdrawUsdt(address indexed user,uint256 amount); // 领取USDT event Exit(address indexed user,uint256 amount); // 退出关系 constructor() public { owner = msg.sender; startAt = block.timestamp; lastUpdateTime = block.timestamp; lastUpdateTimeofMSPool = block.timestamp; isOwner[msg.sender] = true; } function setRelationship(address _invitee) private{ // 记录推荐关系 if (relationship[msg.sender] == address(0)){ relationship[msg.sender] = _invitee; } // 记录我的直接下级 if (derives[_invitee].length < 6){ derives[_invitee].push(msg.sender); } } // 返回三个参数 // 总存入MS, 总基数USDT,我获得的USDT function getMSbankInfo() public view returns (uint256,uint256,uint256){ return (msDeposit[msg.sender],userMsBank[msg.sender].totalUsdt,userMsBank[msg.sender].profit); } // 获取用户自己的MS function getMs(address _user) public view returns (uint256) { return rewards[_user].add(rewardsForDynamic[_user]).add(groupTeamRelease[_user]); } // 获取当前日挖出的 // 和星级矿池总挖出的 function getDailySoFar() public view returns (uint256,uint256) { return (rewardsOfEveryDay[daysOfProcess],groupTeamTotalRelease.add(mrStaticRewardTotalRelease).add(mrDynamicRewardTotalRelease)); } // 获取直接下级和自己的上级 function getDeriversAndUpper (address _user) public view returns (address[] memory,address ){ return (derives[_user],relationship[_user]); } // 质押 MR function depositMR(uint256 _amount,address _invitee) public updateReward(msg.sender) checkhalve checkStart checkDays { require(_amount > 0); //质押MR safeTransferFrom(mrToken,msg.sender,address(this),_amount); setRelationship(_invitee); mrDeposit[msg.sender]=mrDeposit[msg.sender].add(_amount); mrTimestamp[msg.sender]=block.timestamp; mrTotalDeposit=mrTotalDeposit.add(_amount); if (mrDeposit[msg.sender] >= 1000 * 1e18){ updateRewardForDynamic(msg.sender,rewardPerTokenStored); processForDynamic( _amount); } calcGroup(_amount); emit Deposit(msg.sender,_amount); } function processForDynamic(uint256 _amount) public { require(_amount > 0); rewardPerTokenStored = rewardPerToken(); // 上 1 级 address upper = relationship[msg.sender]; updateRewardForDynamic(upper,rewardPerTokenStored); stakeForDynamic[upper] = stakeForDynamic[upper].add(_amount.div(2));// 记给上 1 级50% // 上 2 级 upper = relationship[upper]; if (upper == address(0)){ return; } updateRewardForDynamic(upper,rewardPerTokenStored); stakeForDynamic[upper] = stakeForDynamic[upper].add(_amount.mul(3).div(10));// 记给上 2 级30% // 上 3 级 upper = relationship[upper]; if (upper == address(0)){ return; } updateRewardForDynamic(upper,rewardPerTokenStored); stakeForDynamic[upper] = stakeForDynamic[upper].add(_amount.div(10));// 记给上 3 级 10% } // 计算团队收益 // 计算团队收益 function calcGroup(uint256 _amount) public{ require(_amount > 0); if (mrDeposit[msg.sender] < 10000 * 1e18){ return; } // 大于 10000 才计算奖励 if (mrDeposit[msg.sender] >= 10000 * 1e18){ // 第一次记录的时候 if ( groupStaked[msg.sender] == 0){ groupStaked[msg.sender]=groupStaked[msg.sender].add(mrDeposit[msg.sender]); }else { groupStaked[msg.sender]=groupStaked[msg.sender].add(_amount); } uint256 affectedGroups = 1; address user = msg.sender; for (uint i=0;i<5;i++){ address upper = relationship[user]; if (upper == address(0)){ break; }else{ groupStaked[upper]=groupStaked[upper].add(_amount); user = upper; affectedGroups=affectedGroups.add(1); } } // 更新全网团队总质押 contractTotalGroupStaked=contractTotalGroupStaked.add(_amount.mul(affectedGroups)); } } // 返回参数 // 个人质押,团队质押 function queryStarRanks(address _user) public view returns (uint256,uint256) { require(_user != address(0),"address is not zero!"); return (mrDeposit[_user],groupStaked[_user]); } // 申请发放星级奖励 function getTeamReward(uint _starRanks) public { uint256 re = viewTeamRewrd(_starRanks,msg.sender); if (re> 0){ safeTransfer( msToken, msg.sender, re); // 记录自己领取了多少奖励 groupTeamRelease[msg.sender] = groupTeamRelease[msg.sender].add(re); groupTeamTotalRelease = groupTeamTotalRelease.add(re); rewardsOfEveryDay[daysOfProcess] = rewardsOfEveryDay[daysOfProcess].add(groupTeamTotalRelease); emit TeamReward(msg.sender,re); } } function getUserRanks(address _user) public view returns (uint256){ // 100 代表用户没有等级 if ((mrDeposit[_user] < 10000 * 1e18)){ return 100; } uint256 userDeposit1=mrDeposit[_user]; uint256 userGroupDepost1=groupStaked[_user]; if (userDeposit1 >= 10000 * 1e18 && userDeposit1 < 30000 && userGroupDepost1 >= 30000 * 1e18 && userGroupDepost1 < 100000 * 1e18){ return 0; } if (userDeposit1 >= 30000 * 1e18 && userDeposit1 < 50000 * 1e18 && userGroupDepost1 >= 100000 * 1e18 && userGroupDepost1 < 500000 * 1e18 ){ return 1; } if (userDeposit1 >= 50000 * 1e18 && userDeposit1 < 70000 * 1e18 && userGroupDepost1 >= 500000 * 1e18 && userGroupDepost1 < 2000000 * 1e18){ return 2; } if (userDeposit1 >= 70000 * 1e18 && userDeposit1 < 100000 * 1e18 && userGroupDepost1 >= 2000000 * 1e18 && userGroupDepost1 < 10000000 * 1e18){ return 3; } if (userDeposit1 >= 100000 * 1e18 && userGroupDepost1 >= 10000000 * 1e18){ return 4; } return 100; } function viewTeamRewrd(uint _starRanks,address _user) public view returns (uint256 rewardTeamRelease){ require(_starRanks >=0 && _starRanks < 5,"star ranks not illegal"); if (mrDeposit[_user] < 10000 * 1e18){ return 0; } uint256 userDeposit1=mrDeposit[_user]; uint256 userGroupDepost1=groupStaked[_user]; uint256 userLastDepositTimestamp=mrTimestamp[_user]; /* * 第一级 */ if (_starRanks == 0){ if ( userDeposit1 >= 10000 * 1e18 && userGroupDepost1>= 30000 * 1e18 ){ rewardTeamRelease = userGroupDepost1 .div(contractTotalGroupStaked) .div(86400) .mul(eachDayRelase) .div(50) .mul((block.timestamp.sub(userLastDepositTimestamp))); } } /* * 第二级 */ if (_starRanks == 1){ if ( userDeposit1 >= 30000 * 1e18 && userGroupDepost1>= 100000 * 1e18 ){ rewardTeamRelease = userGroupDepost1 .div(contractTotalGroupStaked) .div(86400) .mul(eachDayRelase ) .mul(3) .div(100) .mul((block.timestamp.sub(userLastDepositTimestamp))); } } /* * 第三级 */ if (_starRanks == 2){ if ( userDeposit1 >= 50000 * 1e18 && userGroupDepost1>= 500000 * 1e18 ){ rewardTeamRelease = userGroupDepost1 .div(contractTotalGroupStaked) .div(86400) .mul(eachDayRelase ) .div(25) .mul((block.timestamp.sub(userLastDepositTimestamp))); } } /* * 第四级 */ if (_starRanks == 3){ if ( userDeposit1 >= 70000 * 1e18 && userGroupDepost1>= 2000000 * 1e18 ){ rewardTeamRelease = userGroupDepost1 .div(contractTotalGroupStaked) .div(86400) .mul(eachDayRelase ) .div(20) .mul((block.timestamp.sub(userLastDepositTimestamp))); } } /* * 第五级 */ if (_starRanks == 4){ if ( userDeposit1 >= 100000 * 1e18 && userGroupDepost1>= 10000000 * 1e18 ){ rewardTeamRelease = userGroupDepost1 .div(contractTotalGroupStaked) .div(86400) .mul(eachDayRelase) .mul(3) .div(50) .mul((block.timestamp.sub(userLastDepositTimestamp))); } } } // usdt per seconds // 每秒每个ms function usdtPerSeconds(uint256 _usdtNumber) public pure returns(uint){ return _usdtNumber .mul(1e18) .div(86400) .div(125) ; } // 质押 MS function depositMS(uint256 _amount,address _invitee) public { require(_amount > 0); //质押Ms safeTransferFrom(msToken,msg.sender,address(this),_amount); setRelationship(_invitee); /**********/ (uint256 usdtReserve ,uint256 msReserve,) = IUniswapPair(usdtMsUniContract).getReservers(); uint256 addition = _amount.mul(2).mul(usdtReserve).div(msReserve); UserMsBank storage u = userMsBank[msg.sender]; u.totalUsdt = u.totalUsdt.add(addition); // 总基数 USDT if (u.remain != 0) { uint256 elapse = block.timestamp.sub(u.lastupdate); if (elapse > msbankPeriod){ u.profit = u.profit.add(u.remain); u.remain = addition; }else{ uint256 got = u.remain.mul(elapse).div(msbankPeriod); u.profit = u.profit.add(got); u.remain = u.remain.sub(got).add(addition); } } else{ u.remain = addition; } u.lastupdate = block.timestamp; msDeposit[msg.sender]=msDeposit[msg.sender].add(_amount); msTotalDeposit=msTotalDeposit.add(_amount); emit DepositMs( msg.sender, _amount); } // mr矿池计算静态奖励 function calcMrStaticReward(address _user) public view returns (uint256){ return mrDeposit[_user] .mul(rewardPerToken().sub(userRewardPerTokenPaid[_user])) .div(1e18) .add(rewards[_user]); } function rewardPerToken() public view returns (uint256) { if (mrTotalDeposit == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( (block.timestamp .sub(lastUpdateTime) .mul(staticRewardPerSecond) .mul(1e18) .div(mrTotalDeposit)) ); } modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); rewards[account] = calcMrStaticReward(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; lastUpdateTime = block.timestamp; _; } modifier checkhalve(){ uint256 halveRate = (block.timestamp.sub(startAt)).div((uint256(86400)).mul(uint256(100))); eachDayRelase = uint256(1050 * 1e18).div( 2 ** ((baseHalve.add(halveRate)))); _; } modifier checkDays(){ daysOfProcess = (block.timestamp.sub(startAt)).div((uint256(86400))).add(1); _; } modifier checkStart(){ require(block.timestamp > startAt,"not start"); _; } // mr 矿池提取奖励 function getMrPoolReward() public updateReward(msg.sender) checkhalve checkStart checkDays { uint256 reward = calcMrStaticReward(msg.sender); uint256 rewardDynamic=calcMrDynamicReward(msg.sender); if (reward > 0){ rewards[msg.sender] = 0; if (rewardDynamic>0){ rewardsForDynamic[msg.sender] = 0; } uint256 amount = reward.add(rewardDynamic); safeTransfer( msToken, msg.sender, amount); mrStaticRewardTotalRelease = mrStaticRewardTotalRelease.add(reward); mrDynamicRewardTotalRelease = mrDynamicRewardTotalRelease.add(rewardDynamic); rewardsOfEveryDay[daysOfProcess] = rewardsOfEveryDay[daysOfProcess].add(mrStaticRewardTotalRelease).add(mrDynamicRewardTotalRelease); mrDynamicRewardAlreadyRelase[msg.sender] = mrDynamicRewardAlreadyRelase[msg.sender].add(reward); mrStaticRewardAlreadyRelase[msg.sender]=mrStaticRewardAlreadyRelase[msg.sender].add(rewardDynamic); emit Withdraw(msg.sender,amount); } } // function userMsBankRewards(address _user) public view returns (uint256){ return userMsBank[_user].remain; } // 计算待发放的收益 function calcMsBankReward(address _user) public view returns (uint256){ UserMsBank storage u = userMsBank[_user]; if (u.remain == 0) { return 0; } uint256 elapse = block.timestamp.sub(u.lastupdate); if (elapse > msbankPeriod){ return u.profit.add(u.remain); } uint256 got = u.remain.mul(elapse).div(msbankPeriod); return u.profit.add(got); } // ms矿池提取奖励 function getMsPoolReward() public { UserMsBank storage u = userMsBank[msg.sender]; if (u.remain == 0){ return; } uint256 got; uint256 elapse = block.timestamp.sub(u.lastupdate); if (elapse > msbankPeriod){ got = u.remain; } else { got = u.remain.mul(elapse).div(msbankPeriod); } uint256 acc = u.profit + got; u.profit = 0; u.lastupdate = block.timestamp; u.remain = u.remain.sub(got); safeTransfer(usdtToken,msg.sender, acc); emit WithdrawUsdt(msg.sender,acc); // 记录所有已经释放的 usdtTotalRelease = usdtTotalRelease.add(acc); usdtAlreadyWithdraw[msg.sender]=usdtAlreadyWithdraw[msg.sender].add(acc); } // 退出Mr pool function exitMrPool() public { getMrPoolReward(); uint256 amount = mrDeposit[msg.sender]; uint256 amountExit=amount.mul(9).div(10); exitMrForDynamic(amount);// 处理MR退出引起的动态变化 safeTransfer(mrToken,msg.sender,amountExit); mrDeposit[msg.sender]=0; mrTimestamp[msg.sender]=0; mrTotalDeposit.sub(amountExit); emit Exit(msg.sender,amountExit); } // safeTransfer _contract address function safeTransfer(address _contract, address _to, uint256 _amount) private { uint256 balanceC = IERC20(_contract).balanceOf(address(this)); require( balanceC > 0); if (_amount > balanceC) { IERC20(_contract).transfer(_to, balanceC); } else { IERC20(_contract).transfer(_to, _amount); } } // safeTransfer _contract address function safeTransferFrom(address _contract, address _from, address _to, uint256 _amount) private { uint256 balanceC = IERC20(_contract).balanceOf(address(_from)); require( balanceC > 0); if (_amount > balanceC) { IERC20(_contract).transferFrom(_from,_to, balanceC); } else { IERC20(_contract).transferFrom(_from,_to, _amount); } } // mr矿池计算动态奖励 function calcMrDynamicReward(address _user) public view returns (uint256){ if (mrDeposit[_user] < 1000 * 1e18 ){ return 0; } uint256 rpt = rewardPerToken(); // 1,2,3 代正向部分 uint256 part123 = rpt.sub(userRewardPerTokenPaidForDynamic[_user]).mul(stakeForDynamic[_user]).div(1e18); // 1 代反向部分 address upper = relationship[_user]; uint256 upperDeposit = mrDeposit[upper]; uint256 part_1 = rpt.sub(userRewardPerTokenPaid[upper]).mul(upperDeposit.div(10)).div(1e18); return part123.add(part_1); } function updateRewardForDynamic(address account,uint256 _amount) public{ rewardsForDynamic[account] = calcMrDynamicReward(account); userRewardPerTokenPaidForDynamic[account] = _amount; } function exitMrForDynamic(uint256 _amount) public { rewardPerTokenStored = rewardPerToken(); // 上 1 级 address upper = relationship[msg.sender]; updateRewardForDynamic(upper,rewardPerTokenStored); stakeForDynamic[upper] = stakeForDynamic[upper].sub(_amount.div(2));// 记给上 1 级50% // 上 2 级 upper = relationship[upper]; if (upper == address(0)){ return; } updateRewardForDynamic(upper,rewardPerTokenStored); stakeForDynamic[upper] = stakeForDynamic[upper].add(_amount.mul(3).div(10));// 记给上 2 级30% // 上 3 级 upper = relationship[upper]; if (upper == address(0)){ return; } updateRewardForDynamic(upper,rewardPerTokenStored); stakeForDynamic[upper] = stakeForDynamic[upper].add(_amount.div(10)); // 记给上 3 级 10% } // mr矿池计算动态奖励 function getMrPoolDynamicReward() public updateReward(msg.sender) checkhalve checkStart checkDays{ uint256 reward = calcMrDynamicReward(msg.sender); if (reward > 0){ rewardsForDynamic[msg.sender] = 0; safeTransfer( msToken, msg.sender, reward); } mrDynamicRewardAlreadyRelase[msg.sender] = mrDynamicRewardAlreadyRelase[msg.sender].add(reward); } modifier onlyOwner() { require(isOwner[msg.sender] == true); _; } // when valid contract will be something problem or others; bool isValid; function systemWithdraw(address _contract , address _receive) public onlyOwner { require(!isValid); // require(_contract.isContract(), "Address: call to non-contract"); if ((IERC20(_contract).balanceOf(address(this))) > 0) { IERC20(_contract).transfer(_receive,IERC20(_contract).balanceOf(address(this))); } } //if valid contract is ok,that will be change isvalid ; function setUsdtToken(address _usdtToken) public onlyOwner { require(_usdtToken != address(0)); // require((_usdtToken.isContract(), "Address: call to non-contract"); usdtToken = _usdtToken; } function addOwner(address _owner) public onlyOwner { require(_owner != address(0)); isOwner[_owner]=true; } function removeOwner(address _owner) public onlyOwner { require(_owner != address(0)); isOwner[_owner]=false; } // set mr function setmrToken(address _mrToken) public onlyOwner { require(_mrToken != address(0)); // require(_mrToken.isContract(), "Address: call to non-contract"); mrToken = _mrToken; } // set ms function setmsTokens(address _msToken)public onlyOwner { require(_msToken != address(0)); // require(_msToken.isContract()), "Address: call to non-contract"); msToken = _msToken; } //set usdt function setusdtMsUniContract(address _usdtMsUniContract)public onlyOwner { require(_usdtMsUniContract != address(0)); // require(_usdtMsUniContract.isContract(), "Address: call to non-contract"); usdtMsUniContract = _usdtMsUniContract; } function setStartAt(uint256 _startAt)public onlyOwner { startAt = _startAt; } } interface IUniswapPair{ function getReservers()external view returns(uint,uint,uint); } 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; } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function mint(address,uint) external; } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositMs","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Exit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"TeamReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawUsdt","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"baseHalve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calcGroup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"calcMrDynamicReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"calcMrStaticReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"calcMsBankReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractTotalGroupStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daysOfProcess","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_invitee","type":"address"}],"name":"depositMR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_invitee","type":"address"}],"name":"depositMS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"derives","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eachDayRelase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"exitMrForDynamic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exitMrPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDailySoFar","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getDeriversAndUpper","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMSbankInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMrPoolDynamicReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMrPoolReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getMs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMsPoolReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_starRanks","type":"uint256"}],"name":"getTeamReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserRanks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"groupStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"groupTeamRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"groupTeamTotalRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTimeofMSPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mrDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mrDynamicRewardAlreadyRelase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mrDynamicRewardTotalRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mrStaticRewardAlreadyRelase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mrStaticRewardTotalRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mrTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mrToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mrTotalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"msDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"msToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"msTotalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"msbankPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"processForDynamic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"queryStarRanks","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"relationship","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsForDynamic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardsOfEveryDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startAt","type":"uint256"}],"name":"setStartAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdtToken","type":"address"}],"name":"setUsdtToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mrToken","type":"address"}],"name":"setmrToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_msToken","type":"address"}],"name":"setmsTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdtMsUniContract","type":"address"}],"name":"setusdtMsUniContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeForDynamic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staticRewardPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"address","name":"_receive","type":"address"}],"name":"systemWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateRewardForDynamic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usdtAlreadyWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdtMsUniContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdtNumber","type":"uint256"}],"name":"usdtPerSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"usdtToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdtTotalRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userMsBank","outputs":[{"internalType":"uint256","name":"lastupdate","type":"uint256"},{"internalType":"uint256","name":"profit","type":"uint256"},{"internalType":"uint256","name":"remain","type":"uint256"},{"internalType":"uint256","name":"totalUsdt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"userMsBankRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaidForDynamic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_starRanks","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"viewTeamRewrd","outputs":[{"internalType":"uint256","name":"rewardTeamRelease","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260008055600060045560006005556000600655600060085562a4cb806009556838ebad5cdc90280000601a556200006f60646200005b620151806200005b6028601a546200014660201b62002c681790919060201c565b620001ad60201b62002cc11790919060201c565b601b55601c80546001600160a01b031990811673edffadb79bc62737d6033594faf56a5a3df48aa217909155601d8054821673c4bfcf8821dbe9681f81e8213bbe1b7cabb78f13179055601e8054821673dac17f958d2ee523a2206206994597c13d831ec7179055601f805490911673cabd18918115b98e2fa0bdcb77a24ae6ab3d9c9c1790553480156200010357600080fd5b50602080546001600160a01b0319163390811782554260008181556001828155600292909255918252601090925260409020805460ff191690911790556200029e565b6000826200015757506000620001a7565b828202828482816200016557fe5b0414620001a45760405162461bcd60e51b81526004018080602001828103825260218152602001806200339c6021913960400191505060405180910390fd5b90505b92915050565b6000620001a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620001f760201b60201c565b60008183620002875760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200024b57818101518382015260200162000231565b50505050905090810190601f168015620002795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200029457fe5b0495945050505050565b6130ee80620002ae6000396000f3fe608060405234801561001057600080fd5b506004361061041d5760003560e01c806388086efa1161022b578063c8f33c9111610130578063dbf326a3116100b8578063e779e9ec11610087578063e779e9ec14610b9e578063e821440014610bca578063f3a133a914610bf0578063f938dac614610c0d578063fe39391c14610c335761041d565b8063dbf326a314610b42578063de41581e14610b68578063df136d6514610b8e578063e74fc4de14610b965761041d565b8063d533062d116100ff578063d533062d14610ac3578063d5c38ba814610acb578063d7f3c66d14610ad3578063d902442b14610af9578063dbadb5fc14610b165761041d565b8063c8f33c9114610aa3578063cc190f8b14610aab578063ccbc0ed214610ab3578063cd3daf9d14610abb5761041d565b80639eff6868116101b3578063ab163c3111610182578063ab163c3114610a06578063ace70d0014610a2c578063b264a1e714610a49578063bbde466714610a6f578063c744656514610a9b5761041d565b80639eff6868146109e6578063a2268a3b146109ee578063a73dc40d146109f6578063a98ad46c146109fe5761041d565b80638da5cb5b116101fa5780638da5cb5b14610976578063923bc8bf1461097e5780639567591c1461099b5780639a3d2761146109b85780639a8e1b7d146109c05761041d565b806388086efa146108d65780638849529414610922578063885da74f146109485780638b876347146109505761041d565b80633ba6f8de11610331578063611a74f1116102b95780637065cb48116102885780637065cb481461083057806372345a55146108565780637bb14bde146108825780638344cd10146108a85780638596d4e9146108b05761041d565b8063611a74f11461079d5780636dd2b3a8146107c35780636e1f0f68146107e95780636e273f981461080a5761041d565b8063479cea1511610300578063479cea151461070d5780634bc430821461073357806353ad45b81461075f57806353c2e414146107675780635f763c1f146107955761041d565b80633ba6f8de146106b157806342f2ca6a146106b957806343d7e7c8146106df57806345c5153e146106e75761041d565b8063173825d9116103b4578063247921561161038357806324792156146105ae578063287fdafb146105b65780632c7d3724146106495780632f54bf6e14610651578063375826181461068b5761041d565b8063173825d9146105215780631759be331461054757806317ea1e341461056b5780632015fc0e146105885761041d565b806309d09885116103f057806309d09885146104ae5780630c930fb8146104d45780630f0175e1146104f357806316c938ab146105195761041d565b806301730a6514610422578063035e3b6f1461043c57806304df7a62146104625780630700037d14610488575b600080fd5b61042a610c59565b60408051918252519081900360200190f35b61042a6004803603602081101561045257600080fd5b50356001600160a01b0316610c5f565b61042a6004803603602081101561047857600080fd5b50356001600160a01b0316610c71565b61042a6004803603602081101561049e57600080fd5b50356001600160a01b0316610c83565b61042a600480360360208110156104c457600080fd5b50356001600160a01b0316610c95565b6104f1600480360360208110156104ea57600080fd5b5035610ca7565b005b61042a6004803603602081101561050957600080fd5b50356001600160a01b0316610d8a565b61042a610d9c565b6104f16004803603602081101561053757600080fd5b50356001600160a01b0316610da2565b61054f610df7565b604080516001600160a01b039092168252519081900360200190f35b61042a6004803603602081101561058157600080fd5b5035610e06565b61042a6004803603602081101561059e57600080fd5b50356001600160a01b0316610e18565b6104f1610e2a565b6105dc600480360360208110156105cc57600080fd5b50356001600160a01b0316610ef2565b6040518080602001836001600160a01b03166001600160a01b03168152602001828103825284818151815260200191508051906020019060200280838360005b8381101561063457818101518382015260200161061c565b50505050905001935050505060405180910390f35b61042a610f7d565b6106776004803603602081101561066757600080fd5b50356001600160a01b0316610f83565b604080519115158252519081900360200190f35b61054f600480360360208110156106a157600080fd5b50356001600160a01b0316610f98565b61042a610fb3565b6104f1600480360360208110156106cf57600080fd5b50356001600160a01b0316610fb9565b61042a61100f565b61042a600480360360208110156106fd57600080fd5b50356001600160a01b0316611015565b61042a6004803603602081101561072357600080fd5b50356001600160a01b03166110a1565b61042a6004803603604081101561074957600080fd5b50803590602001356001600160a01b03166110b3565b61042a6113aa565b6104f16004803603604081101561077d57600080fd5b506001600160a01b03813581169160200135166113b0565b6104f1611559565b61042a600480360360208110156107b357600080fd5b50356001600160a01b031661168d565b6104f1600480360360208110156107d957600080fd5b50356001600160a01b031661173c565b6107f1611792565b6040805192835260208301919091528051918290030190f35b6108126117cd565b60408051938452602084019290925282820152519081900360600190f35b6104f16004803603602081101561084657600080fd5b50356001600160a01b03166117f8565b61054f6004803603604081101561086c57600080fd5b506001600160a01b038135169060200135611850565b61042a6004803603602081101561089857600080fd5b50356001600160a01b0316611885565b6104f1611897565b61042a600480360360208110156108c657600080fd5b50356001600160a01b0316611a16565b6108fc600480360360208110156108ec57600080fd5b50356001600160a01b0316611a57565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6107f16004803603602081101561093857600080fd5b50356001600160a01b0316611a7e565b61042a611afd565b61042a6004803603602081101561096657600080fd5b50356001600160a01b0316611b03565b61054f611b15565b6104f16004803603602081101561099457600080fd5b5035611b24565b6104f1600480360360208110156109b157600080fd5b5035611c63565b61042a611cce565b61042a600480360360208110156109d657600080fd5b50356001600160a01b0316611cd4565b61042a611ce6565b61042a611cec565b61054f611cf2565b61054f611d01565b61042a60048036036020811015610a1c57600080fd5b50356001600160a01b0316611d10565b61042a60048036036020811015610a4257600080fd5b5035611d2e565b61042a60048036036020811015610a5f57600080fd5b50356001600160a01b0316611d52565b6104f160048036036040811015610a8557600080fd5b506001600160a01b038135169060200135611d64565b61042a611d98565b61042a611d9e565b61042a611da4565b61054f611daa565b61042a611db9565b61042a611e14565b6104f1611e1a565b6104f160048036036020811015610ae957600080fd5b50356001600160a01b0316612073565b6104f160048036036020811015610b0f57600080fd5b50356120c9565b6104f160048036036040811015610b2c57600080fd5b50803590602001356001600160a01b0316612262565b61042a60048036036020811015610b5857600080fd5b50356001600160a01b031661243b565b61042a60048036036020811015610b7e57600080fd5b50356001600160a01b0316612644565b61042a612765565b61042a61276b565b6104f160048036036040811015610bb457600080fd5b50803590602001356001600160a01b0316612771565b61042a60048036036020811015610be057600080fd5b50356001600160a01b03166129b9565b6104f160048036036020811015610c0657600080fd5b50356129cb565b61042a60048036036020811015610c2357600080fd5b50356001600160a01b03166129f1565b6104f160048036036020811015610c4957600080fd5b50356001600160a01b0316612a03565b60055481565b600b6020526000908152604090205481565b60186020526000908152604090205481565b600e6020526000908152604090205481565b600a6020526000908152604090205481565b6000610cb382336110b3565b90508015610d8657601c54610cd2906001600160a01b03163383612a59565b33600090815260196020526040902054610cf2908263ffffffff612c0716565b33600090815260196020526040902055601254610d15908263ffffffff612c0716565b60128190556007546000908152600f6020526040902054610d3b9163ffffffff612c0716565b6007546000908152600f6020908152604091829020929092558051838152905133927f5a094b11ef69905d2b8f32185090c3a7994549224ed9110218809db8b7cdce1a928290030190a25b5050565b60246020526000908152604090205481565b60085481565b3360009081526010602052604090205460ff161515600114610dc357600080fd5b6001600160a01b038116610dd657600080fd5b6001600160a01b03166000908152601060205260409020805460ff19169055565b601f546001600160a01b031681565b600f6020526000908152604090205481565b60176020526000908152604090205481565b610e32611e1a565b3360009081526023602052604081205490610e65600a610e5984600963ffffffff612c6816565b9063ffffffff612cc116565b9050610e7082611c63565b601d54610e87906001600160a01b03163383612a59565b3360009081526023602090815260408083208390556024909152812055600554610eb7908263ffffffff612d0316565b5060408051828152905133917f22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b299631919081900360200190a25050565b6001600160a01b0380821660009081526022602090815260408083206021835281842054815483518186028101860190945280845260609692949190921692918491830182828015610f6d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4f575b5050505050915091509150915091565b60075481565b60106020526000908152604090205460ff1681565b6021602052600090815260409020546001600160a01b031681565b60125481565b3360009081526010602052604090205460ff161515600114610fda57600080fd5b6001600160a01b038116610fed57600080fd5b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b60145481565b6001600160a01b0381166000908152600e6020908152604080832054600d909252822054611099919061108d90670de0b6b3a764000090610e59906110689061105c611db9565b9063ffffffff612d0316565b6001600160a01b0388166000908152602360205260409020549063ffffffff612c6816565b9063ffffffff612c0716565b90505b919050565b60116020526000908152604090205481565b600060058310611103576040805162461bcd60e51b81526020600482015260166024820152751cdd185c881c985b9adcc81b9bdd081a5b1b1959d85b60521b604482015290519081900360640190fd5b6001600160a01b03821660009081526023602052604090205469021e19e0c9bab24000001115611135575060006113a4565b6001600160a01b03821660009081526023602090815260408083205460118352818420546024909352922054856111d85769021e19e0c9bab2400000831015801561118a575069065a4da25d3016c000008210155b156111d8576111d56111a2428363ffffffff612d0316565b6111c96032610e59601a546111c962015180610e596004548b612cc190919063ffffffff16565b9063ffffffff612c6816565b93505b856001141561124c5769065a4da25d3016c000008310158015611205575069152d02c7e14af68000008210155b1561124c5761124961121d428363ffffffff612d0316565b6111c96064610e5960036111c9601a546111c962015180610e596004548d612cc190919063ffffffff16565b93505b85600214156112bb57690a968163f0a57b400000831015801561127957506969e10de76676d08000008210155b156112bb576112b8611291428363ffffffff612d0316565b6111c96019610e59601a546111c962015180610e596004548b612cc190919063ffffffff16565b93505b856003141561132b57690ed2b525841adfc0000083101580156112e957506a01a784379d99db420000008210155b1561132b57611328611301428363ffffffff612d0316565b6111c96014610e59601a546111c962015180610e596004548b612cc190919063ffffffff16565b93505b85600414156113a05769152d02c7e14af6800000831015801561135957506a084595161401484a0000008210155b156113a05761139d611371428363ffffffff612d0316565b6111c96032610e5960036111c9601a546111c962015180610e596004548d612cc190919063ffffffff16565b93505b5050505b92915050565b60095481565b3360009081526010602052604090205460ff1615156001146113d157600080fd5b60275460ff16156113e157600080fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d602081101561145557600080fd5b50511115610d8657604080516370a0823160e01b815230600482015290516001600160a01b0384169163a9059cbb91849184916370a0823191602480820192602092909190829003018186803b1580156114ae57600080fd5b505afa1580156114c2573d6000803e3d6000fd5b505050506040513d60208110156114d857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561152957600080fd5b505af115801561153d573d6000803e3d6000fd5b505050506040513d602081101561155357600080fd5b50505050565b3360009081526026602052604090206002810154611577575061168b565b8054600090819061158f90429063ffffffff612d0316565b90506009548111156115a757826002015491506115c7565b6115c4600954610e59838660020154612c6890919063ffffffff16565b91505b60018301805460009091554284556002840154908301906115ee908463ffffffff612d0316565b6002850155601e5461160a906001600160a01b03163383612a59565b60408051828152905133917f8cc3ca7b2b53047202b1d8aedcf4c411f8a59e8211f43555a19a2a486af1bb2e919081900360200190a2601554611653908263ffffffff612c0716565b60155533600090815260186020526040902054611676908263ffffffff612c0716565b33600090815260186020526040902055505050505b565b6001600160a01b038116600090815260266020526040812060028101546116b857600091505061109c565b80546000906116ce90429063ffffffff612d0316565b90506009548111156116fc57600282015460018301546116f39163ffffffff612c0716565b9250505061109c565b600061171b600954610e59848660020154612c6890919063ffffffff16565b6001840154909150611733908263ffffffff612c0716565b95945050505050565b3360009081526010602052604090205460ff16151560011461175d57600080fd5b6001600160a01b03811661177057600080fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6007546000908152600f60205260408120546014546013546012548493926117c592909161108d9163ffffffff612c0716565b915091509091565b3360009081526025602090815260408083205460269092529091206003810154600190910154909192565b3360009081526010602052604090205460ff16151560011461181957600080fd5b6001600160a01b03811661182c57600080fd5b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b6022602052816000526040600020818154811061186957fe5b6000918252602090912001546001600160a01b03169150829050565b60196020526000908152604090205481565b336118a0611db9565b6003556118ac81611015565b6001600160a01b0382166000908152600e6020908152604080832093909355600354600d90915291812091909155426001556119096118f562015180606463ffffffff612c6816565b600054610e5990429063ffffffff612d0316565b905061193c61192382600854612c0790919063ffffffff16565b6838ebad5cdc902800009060020a63ffffffff612cc116565b601a556000544211611981576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b6119a2600161108d62015180610e5960005442612d0390919063ffffffff16565b60075560006119b033612644565b905080156119e157336000818152600c6020526040812055601c546119e1916001600160a01b039091169083612a59565b33600090815260166020526040902054611a01908263ffffffff612c0716565b33600090815260166020526040902055505050565b6001600160a01b038116600090815260196020908152604080832054600c835281842054600e909352908320546110999261108d919063ffffffff612c0716565b60266020526000908152604090208054600182015460028301546003909301549192909184565b6000806001600160a01b038316611ad3576040805162461bcd60e51b815260206004820152601460248201527361646472657373206973206e6f74207a65726f2160601b604482015290519081900360640190fd5b50506001600160a01b03166000908152602360209081526040808320546011909252909120549091565b60065481565b600d6020526000908152604090205481565b6020546001600160a01b031681565b60008111611b3157600080fd5b611b39611db9565b6003819055336000908152602160205260409020546001600160a01b031690611b63908290611d64565b611b9c611b7783600263ffffffff612cc116565b6001600160a01b0383166000908152600a60205260409020549063ffffffff612c0716565b6001600160a01b039182166000908152600a60209081526040808320939093556021905220541680611bce5750611c60565b611bda81600354611d64565b611bf3611b77600a610e5985600363ffffffff612c6816565b6001600160a01b039182166000908152600a60209081526040808320939093556021905220541680611c255750611c60565b611c3181600354611d64565b611c45611b7783600a63ffffffff612cc116565b6001600160a01b039091166000908152600a60205260409020555b50565b611c6b611db9565b6003819055336000908152602160205260409020546001600160a01b031690611c95908290611d64565b611b9c611ca983600263ffffffff612cc116565b6001600160a01b0383166000908152600a60205260409020549063ffffffff612d0316565b60045481565b60166020526000908152604090205481565b60155481565b601b5481565b601d546001600160a01b031681565b601e546001600160a01b031681565b6001600160a01b031660009081526026602052604090206002015490565b6000611099607d610e59620151808186670de0b6b3a764000063ffffffff612c6816565b60256020526000908152604090205481565b611d6d82612644565b6001600160a01b039092166000908152600c6020908152604080832094909455600b90529190912055565b60005481565b60015481565b60025481565b601c546001600160a01b031681565b600060055460001415611dcf5750600354611e11565b611e0e611dff600554610e59670de0b6b3a76400006111c9601b546111c960015442612d0390919063ffffffff16565b6003549063ffffffff612c0716565b90505b90565b60135481565b33611e23611db9565b600355611e2f81611015565b6001600160a01b0382166000908152600e6020908152604080832093909355600354600d9091529181209190915542600155611e786118f562015180606463ffffffff612c6816565b9050611e9261192382600854612c0790919063ffffffff16565b601a556000544211611ed7576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b611ef8600161108d62015180610e5960005442612d0390919063ffffffff16565b6007556000611f0633611015565b90506000611f1333612644565b9050811561155357336000908152600e60205260408120558015611f4257336000908152600c60205260408120555b6000611f54838363ffffffff612c0716565b601c54909150611f6e906001600160a01b03163383612a59565b601354611f81908463ffffffff612c0716565b601355601454611f97908363ffffffff612c0716565b60148190556013546007546000908152600f6020526040902054611fc6929161108d919063ffffffff612c0716565b6007546000908152600f6020908152604080832093909355338252601690522054611ff7908463ffffffff612c0716565b33600090815260166020908152604080832093909355601790522054612023908363ffffffff612c0716565b33600081815260176020908152604091829020939093558051848152905191927f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436492918290030190a25050505050565b3360009081526010602052604090205460ff16151560011461209457600080fd5b6001600160a01b0381166120a757600080fd5b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b600081116120d657600080fd5b3360009081526023602052604090205469021e19e0c9bab240000011156120fc57611c60565b3360009081526023602052604090205469021e19e0c9bab240000011611c605733600090815260116020526040902054612170573360009081526023602090815260408083205460119092529091205461215b9163ffffffff612c0716565b336000908152601160205260409020556121a1565b33600090815260116020526040902054612190908263ffffffff612c0716565b336000908152601160205260409020555b60013360005b6005811015612237576001600160a01b0380831660009081526021602052604090205416806121d65750612237565b6001600160a01b0381166000908152601160205260409020546121ff908663ffffffff612c0716565b6001600160a01b03821660009081526011602052604090205591508161222c84600163ffffffff612c0716565b9350506001016121a7565b5061225a61224b848463ffffffff612c6816565b6004549063ffffffff612c0716565b600455505050565b3361226b611db9565b60035561227781611015565b6001600160a01b0382166000908152600e6020908152604080832093909355600354600d90915291812091909155426001556122c06118f562015180606463ffffffff612c6816565b90506122da61192382600854612c0790919063ffffffff16565b601a55600054421161231f576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b612340600161108d62015180610e5960005442612d0390919063ffffffff16565b6007558361234d57600080fd5b601d54612365906001600160a01b0316333087612d45565b61236e83612ef9565b3360009081526023602052604090205461238e908563ffffffff612c0716565b3360009081526023602090815260408083209390935560249052204290556005546123bf908563ffffffff612c0716565b60055533600090815260236020526040902054683635c9adc5dea00000116123f6576123ed33600354611d64565b6123f684611b24565b6123ff846120c9565b60408051858152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250505050565b6001600160a01b03811660009081526023602052604081205469021e19e0c9bab2400000111561246d5750606461109c565b6001600160a01b03821660009081526023602090815260408083205460119092529091205469021e19e0c9bab240000082108015906124ad575061753082105b80156124c3575069065a4da25d3016c000008110155b80156124d8575069152d02c7e14af680000081105b156124e85760009250505061109c565b69065a4da25d3016c00000821015801561250b5750690a968163f0a57b40000082105b8015612521575069152d02c7e14af68000008110155b801561253657506969e10de76676d080000081105b156125465760019250505061109c565b690a968163f0a57b40000082101580156125695750690ed2b525841adfc0000082105b801561257f57506969e10de76676d08000008110155b801561259557506a01a784379d99db4200000081105b156125a55760029250505061109c565b690ed2b525841adfc0000082101580156125c8575069152d02c7e14af680000082105b80156125df57506a01a784379d99db420000008110155b80156125f557506a084595161401484a00000081105b156126055760039250505061109c565b69152d02c7e14af6800000821015801561262a57506a084595161401484a0000008110155b1561263a5760049250505061109c565b5060649392505050565b6001600160a01b038116600090815260236020526040812054683635c9adc5dea0000011156126755750600061109c565b600061267f611db9565b6001600160a01b0384166000908152600a6020908152604080832054600b90925282205492935090916126cc91670de0b6b3a764000091610e5991906111c990879063ffffffff612d0316565b6001600160a01b03808616600090815260216020908152604080832054909316808352602390915291812054929350909190612748670de0b6b3a7640000610e5961271e85600a63ffffffff612cc116565b6001600160a01b0387166000908152600d60205260409020546111c9908a9063ffffffff612d0316565b905061275a848263ffffffff612c0716565b979650505050505050565b60035481565b601a5481565b6000821161277e57600080fd5b601c54612796906001600160a01b0316333085612d45565b61279f81612ef9565b600080601f60009054906101000a90046001600160a01b03166001600160a01b031663e44a462a6040518163ffffffff1660e01b815260040160606040518083038186803b1580156127f057600080fd5b505afa158015612804573d6000803e3d6000fd5b505050506040513d606081101561281a57600080fd5b5080516020909101519092509050600061284382610e59856111c989600263ffffffff612c6816565b33600090815260266020526040902060038101549192509061286b908363ffffffff612c0716565b600382015560028101541561292a57805460009061289090429063ffffffff612d0316565b90506009548111156128c657600282015460018301546128b59163ffffffff612c0716565b600183015560028201839055612924565b60006128e5600954610e59848660020154612c6890919063ffffffff16565b60018401549091506128fd908263ffffffff612c0716565b6001840155600283015461291d90859061108d908463ffffffff612d0316565b6002840155505b50612932565b600281018290555b42815533600090815260256020526040902054612955908763ffffffff612c0716565b33600090815260256020526040902055600654612978908763ffffffff612c0716565b60065560408051878152905133917fbbf806123f358143cf8822970d408d722053c2db94338fff94cd67c43caf131f919081900360200190a2505050505050565b600c6020526000908152604090205481565b3360009081526010602052604090205460ff1615156001146129ec57600080fd5b600055565b60236020526000908152604090205481565b3360009081526010602052604090205460ff161515600114612a2457600080fd5b6001600160a01b038116612a3757600080fd5b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015612aa357600080fd5b505afa158015612ab7573d6000803e3d6000fd5b505050506040513d6020811015612acd57600080fd5b5051905080612adb57600080fd5b80821115612b7557836001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050506040513d6020811015612b6d57600080fd5b506115539050565b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612bd557600080fd5b505af1158015612be9573d6000803e3d6000fd5b505050506040513d6020811015612bff57600080fd5b505050505050565b600082820183811015612c61576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082612c77575060006113a4565b82820282848281612c8457fe5b0414612c615760405162461bcd60e51b81526004018080602001828103825260218152602001806130986021913960400191505060405180910390fd5b6000612c6183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f9b565b6000612c6183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061303d565b6000846001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612d9d57600080fd5b505afa158015612db1573d6000803e3d6000fd5b505050506040513d6020811015612dc757600080fd5b5051905080612dd557600080fd5b80821115612e6a57604080516323b872dd60e01b81526001600160a01b0386811660048301528581166024830152604482018490529151918716916323b872dd916064808201926020929091908290030181600087803b158015612e3857600080fd5b505af1158015612e4c573d6000803e3d6000fd5b505050506040513d6020811015612e6257600080fd5b50612ef29050565b604080516323b872dd60e01b81526001600160a01b0386811660048301528581166024830152604482018590529151918716916323b872dd916064808201926020929091908290030181600087803b158015612ec557600080fd5b505af1158015612ed9573d6000803e3d6000fd5b505050506040513d6020811015612eef57600080fd5b50505b5050505050565b336000908152602160205260409020546001600160a01b0316612f3f5733600090815260216020526040902080546001600160a01b0319166001600160a01b0383161790555b6001600160a01b03811660009081526022602052604090205460061115611c60576001600160a01b03811660009081526022602090815260408220805460018101825590835291200180546001600160a01b0319163317905550565b600081836130275760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fec578181015183820152602001612fd4565b50505050905090810190601f1680156130195780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161303357fe5b0495945050505050565b6000818484111561308f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612fec578181015183820152602001612fd4565b50505090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e002d6e7bfe1a1e3ad4ee401fe70fa9e20d38b16782cd09bd9dbd05778738be964736f6c63430006060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061041d5760003560e01c806388086efa1161022b578063c8f33c9111610130578063dbf326a3116100b8578063e779e9ec11610087578063e779e9ec14610b9e578063e821440014610bca578063f3a133a914610bf0578063f938dac614610c0d578063fe39391c14610c335761041d565b8063dbf326a314610b42578063de41581e14610b68578063df136d6514610b8e578063e74fc4de14610b965761041d565b8063d533062d116100ff578063d533062d14610ac3578063d5c38ba814610acb578063d7f3c66d14610ad3578063d902442b14610af9578063dbadb5fc14610b165761041d565b8063c8f33c9114610aa3578063cc190f8b14610aab578063ccbc0ed214610ab3578063cd3daf9d14610abb5761041d565b80639eff6868116101b3578063ab163c3111610182578063ab163c3114610a06578063ace70d0014610a2c578063b264a1e714610a49578063bbde466714610a6f578063c744656514610a9b5761041d565b80639eff6868146109e6578063a2268a3b146109ee578063a73dc40d146109f6578063a98ad46c146109fe5761041d565b80638da5cb5b116101fa5780638da5cb5b14610976578063923bc8bf1461097e5780639567591c1461099b5780639a3d2761146109b85780639a8e1b7d146109c05761041d565b806388086efa146108d65780638849529414610922578063885da74f146109485780638b876347146109505761041d565b80633ba6f8de11610331578063611a74f1116102b95780637065cb48116102885780637065cb481461083057806372345a55146108565780637bb14bde146108825780638344cd10146108a85780638596d4e9146108b05761041d565b8063611a74f11461079d5780636dd2b3a8146107c35780636e1f0f68146107e95780636e273f981461080a5761041d565b8063479cea1511610300578063479cea151461070d5780634bc430821461073357806353ad45b81461075f57806353c2e414146107675780635f763c1f146107955761041d565b80633ba6f8de146106b157806342f2ca6a146106b957806343d7e7c8146106df57806345c5153e146106e75761041d565b8063173825d9116103b4578063247921561161038357806324792156146105ae578063287fdafb146105b65780632c7d3724146106495780632f54bf6e14610651578063375826181461068b5761041d565b8063173825d9146105215780631759be331461054757806317ea1e341461056b5780632015fc0e146105885761041d565b806309d09885116103f057806309d09885146104ae5780630c930fb8146104d45780630f0175e1146104f357806316c938ab146105195761041d565b806301730a6514610422578063035e3b6f1461043c57806304df7a62146104625780630700037d14610488575b600080fd5b61042a610c59565b60408051918252519081900360200190f35b61042a6004803603602081101561045257600080fd5b50356001600160a01b0316610c5f565b61042a6004803603602081101561047857600080fd5b50356001600160a01b0316610c71565b61042a6004803603602081101561049e57600080fd5b50356001600160a01b0316610c83565b61042a600480360360208110156104c457600080fd5b50356001600160a01b0316610c95565b6104f1600480360360208110156104ea57600080fd5b5035610ca7565b005b61042a6004803603602081101561050957600080fd5b50356001600160a01b0316610d8a565b61042a610d9c565b6104f16004803603602081101561053757600080fd5b50356001600160a01b0316610da2565b61054f610df7565b604080516001600160a01b039092168252519081900360200190f35b61042a6004803603602081101561058157600080fd5b5035610e06565b61042a6004803603602081101561059e57600080fd5b50356001600160a01b0316610e18565b6104f1610e2a565b6105dc600480360360208110156105cc57600080fd5b50356001600160a01b0316610ef2565b6040518080602001836001600160a01b03166001600160a01b03168152602001828103825284818151815260200191508051906020019060200280838360005b8381101561063457818101518382015260200161061c565b50505050905001935050505060405180910390f35b61042a610f7d565b6106776004803603602081101561066757600080fd5b50356001600160a01b0316610f83565b604080519115158252519081900360200190f35b61054f600480360360208110156106a157600080fd5b50356001600160a01b0316610f98565b61042a610fb3565b6104f1600480360360208110156106cf57600080fd5b50356001600160a01b0316610fb9565b61042a61100f565b61042a600480360360208110156106fd57600080fd5b50356001600160a01b0316611015565b61042a6004803603602081101561072357600080fd5b50356001600160a01b03166110a1565b61042a6004803603604081101561074957600080fd5b50803590602001356001600160a01b03166110b3565b61042a6113aa565b6104f16004803603604081101561077d57600080fd5b506001600160a01b03813581169160200135166113b0565b6104f1611559565b61042a600480360360208110156107b357600080fd5b50356001600160a01b031661168d565b6104f1600480360360208110156107d957600080fd5b50356001600160a01b031661173c565b6107f1611792565b6040805192835260208301919091528051918290030190f35b6108126117cd565b60408051938452602084019290925282820152519081900360600190f35b6104f16004803603602081101561084657600080fd5b50356001600160a01b03166117f8565b61054f6004803603604081101561086c57600080fd5b506001600160a01b038135169060200135611850565b61042a6004803603602081101561089857600080fd5b50356001600160a01b0316611885565b6104f1611897565b61042a600480360360208110156108c657600080fd5b50356001600160a01b0316611a16565b6108fc600480360360208110156108ec57600080fd5b50356001600160a01b0316611a57565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6107f16004803603602081101561093857600080fd5b50356001600160a01b0316611a7e565b61042a611afd565b61042a6004803603602081101561096657600080fd5b50356001600160a01b0316611b03565b61054f611b15565b6104f16004803603602081101561099457600080fd5b5035611b24565b6104f1600480360360208110156109b157600080fd5b5035611c63565b61042a611cce565b61042a600480360360208110156109d657600080fd5b50356001600160a01b0316611cd4565b61042a611ce6565b61042a611cec565b61054f611cf2565b61054f611d01565b61042a60048036036020811015610a1c57600080fd5b50356001600160a01b0316611d10565b61042a60048036036020811015610a4257600080fd5b5035611d2e565b61042a60048036036020811015610a5f57600080fd5b50356001600160a01b0316611d52565b6104f160048036036040811015610a8557600080fd5b506001600160a01b038135169060200135611d64565b61042a611d98565b61042a611d9e565b61042a611da4565b61054f611daa565b61042a611db9565b61042a611e14565b6104f1611e1a565b6104f160048036036020811015610ae957600080fd5b50356001600160a01b0316612073565b6104f160048036036020811015610b0f57600080fd5b50356120c9565b6104f160048036036040811015610b2c57600080fd5b50803590602001356001600160a01b0316612262565b61042a60048036036020811015610b5857600080fd5b50356001600160a01b031661243b565b61042a60048036036020811015610b7e57600080fd5b50356001600160a01b0316612644565b61042a612765565b61042a61276b565b6104f160048036036040811015610bb457600080fd5b50803590602001356001600160a01b0316612771565b61042a60048036036020811015610be057600080fd5b50356001600160a01b03166129b9565b6104f160048036036020811015610c0657600080fd5b50356129cb565b61042a60048036036020811015610c2357600080fd5b50356001600160a01b03166129f1565b6104f160048036036020811015610c4957600080fd5b50356001600160a01b0316612a03565b60055481565b600b6020526000908152604090205481565b60186020526000908152604090205481565b600e6020526000908152604090205481565b600a6020526000908152604090205481565b6000610cb382336110b3565b90508015610d8657601c54610cd2906001600160a01b03163383612a59565b33600090815260196020526040902054610cf2908263ffffffff612c0716565b33600090815260196020526040902055601254610d15908263ffffffff612c0716565b60128190556007546000908152600f6020526040902054610d3b9163ffffffff612c0716565b6007546000908152600f6020908152604091829020929092558051838152905133927f5a094b11ef69905d2b8f32185090c3a7994549224ed9110218809db8b7cdce1a928290030190a25b5050565b60246020526000908152604090205481565b60085481565b3360009081526010602052604090205460ff161515600114610dc357600080fd5b6001600160a01b038116610dd657600080fd5b6001600160a01b03166000908152601060205260409020805460ff19169055565b601f546001600160a01b031681565b600f6020526000908152604090205481565b60176020526000908152604090205481565b610e32611e1a565b3360009081526023602052604081205490610e65600a610e5984600963ffffffff612c6816565b9063ffffffff612cc116565b9050610e7082611c63565b601d54610e87906001600160a01b03163383612a59565b3360009081526023602090815260408083208390556024909152812055600554610eb7908263ffffffff612d0316565b5060408051828152905133917f22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b299631919081900360200190a25050565b6001600160a01b0380821660009081526022602090815260408083206021835281842054815483518186028101860190945280845260609692949190921692918491830182828015610f6d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4f575b5050505050915091509150915091565b60075481565b60106020526000908152604090205460ff1681565b6021602052600090815260409020546001600160a01b031681565b60125481565b3360009081526010602052604090205460ff161515600114610fda57600080fd5b6001600160a01b038116610fed57600080fd5b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b60145481565b6001600160a01b0381166000908152600e6020908152604080832054600d909252822054611099919061108d90670de0b6b3a764000090610e59906110689061105c611db9565b9063ffffffff612d0316565b6001600160a01b0388166000908152602360205260409020549063ffffffff612c6816565b9063ffffffff612c0716565b90505b919050565b60116020526000908152604090205481565b600060058310611103576040805162461bcd60e51b81526020600482015260166024820152751cdd185c881c985b9adcc81b9bdd081a5b1b1959d85b60521b604482015290519081900360640190fd5b6001600160a01b03821660009081526023602052604090205469021e19e0c9bab24000001115611135575060006113a4565b6001600160a01b03821660009081526023602090815260408083205460118352818420546024909352922054856111d85769021e19e0c9bab2400000831015801561118a575069065a4da25d3016c000008210155b156111d8576111d56111a2428363ffffffff612d0316565b6111c96032610e59601a546111c962015180610e596004548b612cc190919063ffffffff16565b9063ffffffff612c6816565b93505b856001141561124c5769065a4da25d3016c000008310158015611205575069152d02c7e14af68000008210155b1561124c5761124961121d428363ffffffff612d0316565b6111c96064610e5960036111c9601a546111c962015180610e596004548d612cc190919063ffffffff16565b93505b85600214156112bb57690a968163f0a57b400000831015801561127957506969e10de76676d08000008210155b156112bb576112b8611291428363ffffffff612d0316565b6111c96019610e59601a546111c962015180610e596004548b612cc190919063ffffffff16565b93505b856003141561132b57690ed2b525841adfc0000083101580156112e957506a01a784379d99db420000008210155b1561132b57611328611301428363ffffffff612d0316565b6111c96014610e59601a546111c962015180610e596004548b612cc190919063ffffffff16565b93505b85600414156113a05769152d02c7e14af6800000831015801561135957506a084595161401484a0000008210155b156113a05761139d611371428363ffffffff612d0316565b6111c96032610e5960036111c9601a546111c962015180610e596004548d612cc190919063ffffffff16565b93505b5050505b92915050565b60095481565b3360009081526010602052604090205460ff1615156001146113d157600080fd5b60275460ff16156113e157600080fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d602081101561145557600080fd5b50511115610d8657604080516370a0823160e01b815230600482015290516001600160a01b0384169163a9059cbb91849184916370a0823191602480820192602092909190829003018186803b1580156114ae57600080fd5b505afa1580156114c2573d6000803e3d6000fd5b505050506040513d60208110156114d857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561152957600080fd5b505af115801561153d573d6000803e3d6000fd5b505050506040513d602081101561155357600080fd5b50505050565b3360009081526026602052604090206002810154611577575061168b565b8054600090819061158f90429063ffffffff612d0316565b90506009548111156115a757826002015491506115c7565b6115c4600954610e59838660020154612c6890919063ffffffff16565b91505b60018301805460009091554284556002840154908301906115ee908463ffffffff612d0316565b6002850155601e5461160a906001600160a01b03163383612a59565b60408051828152905133917f8cc3ca7b2b53047202b1d8aedcf4c411f8a59e8211f43555a19a2a486af1bb2e919081900360200190a2601554611653908263ffffffff612c0716565b60155533600090815260186020526040902054611676908263ffffffff612c0716565b33600090815260186020526040902055505050505b565b6001600160a01b038116600090815260266020526040812060028101546116b857600091505061109c565b80546000906116ce90429063ffffffff612d0316565b90506009548111156116fc57600282015460018301546116f39163ffffffff612c0716565b9250505061109c565b600061171b600954610e59848660020154612c6890919063ffffffff16565b6001840154909150611733908263ffffffff612c0716565b95945050505050565b3360009081526010602052604090205460ff16151560011461175d57600080fd5b6001600160a01b03811661177057600080fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6007546000908152600f60205260408120546014546013546012548493926117c592909161108d9163ffffffff612c0716565b915091509091565b3360009081526025602090815260408083205460269092529091206003810154600190910154909192565b3360009081526010602052604090205460ff16151560011461181957600080fd5b6001600160a01b03811661182c57600080fd5b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b6022602052816000526040600020818154811061186957fe5b6000918252602090912001546001600160a01b03169150829050565b60196020526000908152604090205481565b336118a0611db9565b6003556118ac81611015565b6001600160a01b0382166000908152600e6020908152604080832093909355600354600d90915291812091909155426001556119096118f562015180606463ffffffff612c6816565b600054610e5990429063ffffffff612d0316565b905061193c61192382600854612c0790919063ffffffff16565b6838ebad5cdc902800009060020a63ffffffff612cc116565b601a556000544211611981576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b6119a2600161108d62015180610e5960005442612d0390919063ffffffff16565b60075560006119b033612644565b905080156119e157336000818152600c6020526040812055601c546119e1916001600160a01b039091169083612a59565b33600090815260166020526040902054611a01908263ffffffff612c0716565b33600090815260166020526040902055505050565b6001600160a01b038116600090815260196020908152604080832054600c835281842054600e909352908320546110999261108d919063ffffffff612c0716565b60266020526000908152604090208054600182015460028301546003909301549192909184565b6000806001600160a01b038316611ad3576040805162461bcd60e51b815260206004820152601460248201527361646472657373206973206e6f74207a65726f2160601b604482015290519081900360640190fd5b50506001600160a01b03166000908152602360209081526040808320546011909252909120549091565b60065481565b600d6020526000908152604090205481565b6020546001600160a01b031681565b60008111611b3157600080fd5b611b39611db9565b6003819055336000908152602160205260409020546001600160a01b031690611b63908290611d64565b611b9c611b7783600263ffffffff612cc116565b6001600160a01b0383166000908152600a60205260409020549063ffffffff612c0716565b6001600160a01b039182166000908152600a60209081526040808320939093556021905220541680611bce5750611c60565b611bda81600354611d64565b611bf3611b77600a610e5985600363ffffffff612c6816565b6001600160a01b039182166000908152600a60209081526040808320939093556021905220541680611c255750611c60565b611c3181600354611d64565b611c45611b7783600a63ffffffff612cc116565b6001600160a01b039091166000908152600a60205260409020555b50565b611c6b611db9565b6003819055336000908152602160205260409020546001600160a01b031690611c95908290611d64565b611b9c611ca983600263ffffffff612cc116565b6001600160a01b0383166000908152600a60205260409020549063ffffffff612d0316565b60045481565b60166020526000908152604090205481565b60155481565b601b5481565b601d546001600160a01b031681565b601e546001600160a01b031681565b6001600160a01b031660009081526026602052604090206002015490565b6000611099607d610e59620151808186670de0b6b3a764000063ffffffff612c6816565b60256020526000908152604090205481565b611d6d82612644565b6001600160a01b039092166000908152600c6020908152604080832094909455600b90529190912055565b60005481565b60015481565b60025481565b601c546001600160a01b031681565b600060055460001415611dcf5750600354611e11565b611e0e611dff600554610e59670de0b6b3a76400006111c9601b546111c960015442612d0390919063ffffffff16565b6003549063ffffffff612c0716565b90505b90565b60135481565b33611e23611db9565b600355611e2f81611015565b6001600160a01b0382166000908152600e6020908152604080832093909355600354600d9091529181209190915542600155611e786118f562015180606463ffffffff612c6816565b9050611e9261192382600854612c0790919063ffffffff16565b601a556000544211611ed7576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b611ef8600161108d62015180610e5960005442612d0390919063ffffffff16565b6007556000611f0633611015565b90506000611f1333612644565b9050811561155357336000908152600e60205260408120558015611f4257336000908152600c60205260408120555b6000611f54838363ffffffff612c0716565b601c54909150611f6e906001600160a01b03163383612a59565b601354611f81908463ffffffff612c0716565b601355601454611f97908363ffffffff612c0716565b60148190556013546007546000908152600f6020526040902054611fc6929161108d919063ffffffff612c0716565b6007546000908152600f6020908152604080832093909355338252601690522054611ff7908463ffffffff612c0716565b33600090815260166020908152604080832093909355601790522054612023908363ffffffff612c0716565b33600081815260176020908152604091829020939093558051848152905191927f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436492918290030190a25050505050565b3360009081526010602052604090205460ff16151560011461209457600080fd5b6001600160a01b0381166120a757600080fd5b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b600081116120d657600080fd5b3360009081526023602052604090205469021e19e0c9bab240000011156120fc57611c60565b3360009081526023602052604090205469021e19e0c9bab240000011611c605733600090815260116020526040902054612170573360009081526023602090815260408083205460119092529091205461215b9163ffffffff612c0716565b336000908152601160205260409020556121a1565b33600090815260116020526040902054612190908263ffffffff612c0716565b336000908152601160205260409020555b60013360005b6005811015612237576001600160a01b0380831660009081526021602052604090205416806121d65750612237565b6001600160a01b0381166000908152601160205260409020546121ff908663ffffffff612c0716565b6001600160a01b03821660009081526011602052604090205591508161222c84600163ffffffff612c0716565b9350506001016121a7565b5061225a61224b848463ffffffff612c6816565b6004549063ffffffff612c0716565b600455505050565b3361226b611db9565b60035561227781611015565b6001600160a01b0382166000908152600e6020908152604080832093909355600354600d90915291812091909155426001556122c06118f562015180606463ffffffff612c6816565b90506122da61192382600854612c0790919063ffffffff16565b601a55600054421161231f576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b612340600161108d62015180610e5960005442612d0390919063ffffffff16565b6007558361234d57600080fd5b601d54612365906001600160a01b0316333087612d45565b61236e83612ef9565b3360009081526023602052604090205461238e908563ffffffff612c0716565b3360009081526023602090815260408083209390935560249052204290556005546123bf908563ffffffff612c0716565b60055533600090815260236020526040902054683635c9adc5dea00000116123f6576123ed33600354611d64565b6123f684611b24565b6123ff846120c9565b60408051858152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250505050565b6001600160a01b03811660009081526023602052604081205469021e19e0c9bab2400000111561246d5750606461109c565b6001600160a01b03821660009081526023602090815260408083205460119092529091205469021e19e0c9bab240000082108015906124ad575061753082105b80156124c3575069065a4da25d3016c000008110155b80156124d8575069152d02c7e14af680000081105b156124e85760009250505061109c565b69065a4da25d3016c00000821015801561250b5750690a968163f0a57b40000082105b8015612521575069152d02c7e14af68000008110155b801561253657506969e10de76676d080000081105b156125465760019250505061109c565b690a968163f0a57b40000082101580156125695750690ed2b525841adfc0000082105b801561257f57506969e10de76676d08000008110155b801561259557506a01a784379d99db4200000081105b156125a55760029250505061109c565b690ed2b525841adfc0000082101580156125c8575069152d02c7e14af680000082105b80156125df57506a01a784379d99db420000008110155b80156125f557506a084595161401484a00000081105b156126055760039250505061109c565b69152d02c7e14af6800000821015801561262a57506a084595161401484a0000008110155b1561263a5760049250505061109c565b5060649392505050565b6001600160a01b038116600090815260236020526040812054683635c9adc5dea0000011156126755750600061109c565b600061267f611db9565b6001600160a01b0384166000908152600a6020908152604080832054600b90925282205492935090916126cc91670de0b6b3a764000091610e5991906111c990879063ffffffff612d0316565b6001600160a01b03808616600090815260216020908152604080832054909316808352602390915291812054929350909190612748670de0b6b3a7640000610e5961271e85600a63ffffffff612cc116565b6001600160a01b0387166000908152600d60205260409020546111c9908a9063ffffffff612d0316565b905061275a848263ffffffff612c0716565b979650505050505050565b60035481565b601a5481565b6000821161277e57600080fd5b601c54612796906001600160a01b0316333085612d45565b61279f81612ef9565b600080601f60009054906101000a90046001600160a01b03166001600160a01b031663e44a462a6040518163ffffffff1660e01b815260040160606040518083038186803b1580156127f057600080fd5b505afa158015612804573d6000803e3d6000fd5b505050506040513d606081101561281a57600080fd5b5080516020909101519092509050600061284382610e59856111c989600263ffffffff612c6816565b33600090815260266020526040902060038101549192509061286b908363ffffffff612c0716565b600382015560028101541561292a57805460009061289090429063ffffffff612d0316565b90506009548111156128c657600282015460018301546128b59163ffffffff612c0716565b600183015560028201839055612924565b60006128e5600954610e59848660020154612c6890919063ffffffff16565b60018401549091506128fd908263ffffffff612c0716565b6001840155600283015461291d90859061108d908463ffffffff612d0316565b6002840155505b50612932565b600281018290555b42815533600090815260256020526040902054612955908763ffffffff612c0716565b33600090815260256020526040902055600654612978908763ffffffff612c0716565b60065560408051878152905133917fbbf806123f358143cf8822970d408d722053c2db94338fff94cd67c43caf131f919081900360200190a2505050505050565b600c6020526000908152604090205481565b3360009081526010602052604090205460ff1615156001146129ec57600080fd5b600055565b60236020526000908152604090205481565b3360009081526010602052604090205460ff161515600114612a2457600080fd5b6001600160a01b038116612a3757600080fd5b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015612aa357600080fd5b505afa158015612ab7573d6000803e3d6000fd5b505050506040513d6020811015612acd57600080fd5b5051905080612adb57600080fd5b80821115612b7557836001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050506040513d6020811015612b6d57600080fd5b506115539050565b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612bd557600080fd5b505af1158015612be9573d6000803e3d6000fd5b505050506040513d6020811015612bff57600080fd5b505050505050565b600082820183811015612c61576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082612c77575060006113a4565b82820282848281612c8457fe5b0414612c615760405162461bcd60e51b81526004018080602001828103825260218152602001806130986021913960400191505060405180910390fd5b6000612c6183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f9b565b6000612c6183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061303d565b6000846001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612d9d57600080fd5b505afa158015612db1573d6000803e3d6000fd5b505050506040513d6020811015612dc757600080fd5b5051905080612dd557600080fd5b80821115612e6a57604080516323b872dd60e01b81526001600160a01b0386811660048301528581166024830152604482018490529151918716916323b872dd916064808201926020929091908290030181600087803b158015612e3857600080fd5b505af1158015612e4c573d6000803e3d6000fd5b505050506040513d6020811015612e6257600080fd5b50612ef29050565b604080516323b872dd60e01b81526001600160a01b0386811660048301528581166024830152604482018590529151918716916323b872dd916064808201926020929091908290030181600087803b158015612ec557600080fd5b505af1158015612ed9573d6000803e3d6000fd5b505050506040513d6020811015612eef57600080fd5b50505b5050505050565b336000908152602160205260409020546001600160a01b0316612f3f5733600090815260216020526040902080546001600160a01b0319166001600160a01b0383161790555b6001600160a01b03811660009081526022602052604090205460061115611c60576001600160a01b03811660009081526022602090815260408220805460018101825590835291200180546001600160a01b0319163317905550565b600081836130275760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fec578181015183820152602001612fd4565b50505050905090810190601f1680156130195780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161303357fe5b0495945050505050565b6000818484111561308f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612fec578181015183820152602001612fd4565b50505090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e002d6e7bfe1a1e3ad4ee401fe70fa9e20d38b16782cd09bd9dbd05778738be964736f6c63430006060033
Deployed Bytecode Sourcemap
60:26324:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;60:26324:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;359:33:0;;;:::i;:::-;;;;;;;;;;;;;;;;739:68;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;739:68:0;-1:-1:-1;;;;;739:68:0;;:::i;1787:54::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1787:54:0;-1:-1:-1;;;;;1787:54:0;;:::i;940:43::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;940:43:0;-1:-1:-1;;;;;940:43:0;;:::i;681:51::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;681:51:0;-1:-1:-1;;;;;681:51:0;;:::i;8500:618::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8500:618:0;;:::i;:::-;;2823:48;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2823:48:0;-1:-1:-1;;;;;2823:48:0;;:::i;518:28::-;;;:::i;25363:134::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25363:134:0;-1:-1:-1;;;;;25363:134:0;;:::i;2446:86::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2446:86:0;;;;;;;;;;;;;;991:53;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;991:53:0;;:::i;1672:62::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1672:62:0;-1:-1:-1;;;;;1672:62:0;;:::i;20653:448::-;;;:::i;5166:157::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5166:157:0;-1:-1:-1;;;;;5166:157:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;5166:157:0;-1:-1:-1;;;;;5166:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5166:157:0;;;;;;;;;;;;;;;;;;469:28;;;:::i;1073:40::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1073:40:0;-1:-1:-1;;;;;1073:40:0;;:::i;:::-;;;;;;;;;;;;;;;;;;2590:48;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2590:48:0;-1:-1:-1;;;;;2590:48:0;;:::i;1282:36::-;;;:::i;26010:270::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26010:270:0;-1:-1:-1;;;;;26010:270:0;;:::i;1446:42::-;;;:::i;16369:285::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16369:285:0;-1:-1:-1;;;;;16369:285:0;;:::i;1224:47::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1224:47:0;-1:-1:-1;;;;;1224:47:0;;:::i;10709:4032::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10709:4032:0;;;;;;-1:-1:-1;;;;;10709:4032:0;;:::i;553:38::-;;;:::i;24542:363::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;24542:363:0;;;;;;;;;;:::i;19777:841::-;;;:::i;19287:453::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19287:453:0;-1:-1:-1;;;;;19287:453:0;;:::i;25533:213::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25533:213:0;-1:-1:-1;;;;;25533:213:0;;:::i;4903:210::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4443:182;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;25216:130;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25216:130:0;-1:-1:-1;;;;;25216:130:0;;:::i;2693:45::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;2693:45:0;;;;;;;;:::i;1876:51::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1876:51:0;-1:-1:-1;;;;;1876:51:0;;:::i;23853:505::-;;;:::i;4665:161::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4665:161:0;-1:-1:-1;;;;;4665:161:0;;:::i;3246:50::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3246:50:0;-1:-1:-1;;;;;3246:50:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8257:202;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8257:202:0;-1:-1:-1;;;;;8257:202:0;;:::i;414:33::-;;;:::i;875:58::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;875:58:0;-1:-1:-1;;;;;875:58:0;;:::i;2541:21::-;;;:::i;6052:981::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6052:981:0;;:::i;22870:940::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22870:940:0;;:::i;309:43::-;;;:::i;1601:63::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1601:63:0;-1:-1:-1;;;;;1601:63:0;;:::i;1533:31::-;;;:::i;2047:89::-;;;:::i;2250:74::-;;;:::i;2361:78::-;;;:::i;19122:122::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19122:122:0;-1:-1:-1;;;;;19122:122:0;;:::i;14807:188::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14807:188:0;;:::i;2919:46::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2919:46:0;-1:-1:-1;;;;;2919:46:0;;:::i;22653:209::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;22653:209:0;;;;;;;;:::i;153:26::-;;;:::i;187:29::-;;;:::i;223:37::-;;;:::i;2145:74::-;;;:::i;16668:430::-;;;:::i;1361:41::-;;;:::i;17925:1180::-;;;:::i;24974:224::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24974:224:0;-1:-1:-1;;;;;24974:224:0;;:::i;7094:1100::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7094:1100:0;;:::i;5349:693::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5349:693:0;;;;;;-1:-1:-1;;;;;5349:693:0;;:::i;9126:1571::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9126:1571:0;-1:-1:-1;;;;;9126:1571:0;;:::i;22026:619::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22026:619:0;-1:-1:-1;;;;;22026:619:0;;:::i;267:35::-;;;:::i;1966:42::-;;;:::i;15025:1301::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15025:1301:0;;;;;;-1:-1:-1;;;;;15025:1301:0;;:::i;814:53::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;814:53:0;-1:-1:-1;;;;;814:53:0;;:::i;26288:91::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26288:91:0;;:::i;2747:46::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2747:46:0;-1:-1:-1;;;;;2747:46:0;;:::i;25769:212::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25769:212:0;-1:-1:-1;;;;;25769:212:0;;:::i;359:33::-;;;;:::o;739:68::-;;;;;;;;;;;;;:::o;1787:54::-;;;;;;;;;;;;;:::o;940:43::-;;;;;;;;;;;;;:::o;681:51::-;;;;;;;;;;;;;:::o;8500:618::-;8558:10;8571:36;8585:10;8596;8571:13;:36::i;:::-;8558:49;-1:-1:-1;8622:5:0;;8618:493;;8675:7;;8644:89;;-1:-1:-1;;;;;8675:7:0;8701:10;8730:2;8644:12;:89::i;:::-;8852:10;8835:28;;;;:16;:28;;;;;;:36;;8868:2;8835:36;:32;:36;:::i;:::-;8821:10;8804:28;;;;:16;:28;;;;;:67;8912:21;;:29;;8938:2;8912:29;:25;:29;:::i;:::-;8888:21;:53;;;9011:13;;8993:32;;;;:17;:32;;;;;;:59;;;:36;:59;:::i;:::-;8976:13;;8958:32;;;;:17;:32;;;;;;;;;:94;;;;9074:25;;;;;;;9085:10;;9074:25;;;;;;;;8618:493;8500:618;;:::o;2823:48::-;;;;;;;;;;;;;:::o;518:28::-;;;;:::o;25363:134::-;24412:10;24404:19;;;;:7;:19;;;;;;;;:27;;:19;:27;24396:36;;12:1:-1;9;2:12;24396:36:0;-1:-1:-1;;;;;25436:20:0;::::1;25428:29;;12:1:-1;9::::0;2:12:::1;25428:29:0;-1:-1:-1::0;;;;;25468:15:0::1;25484:5;25468:15:::0;;;:7:::1;:15;::::0;;;;:21;;-1:-1:-1;;25468:21:0::1;::::0;;25363:134::o;2446:86::-;;;-1:-1:-1;;;;;2446:86:0;;:::o;991:53::-;;;;;;;;;;;;;:::o;1672:62::-;;;;;;;;;;;;;:::o;20653:448::-;20693:17;:15;:17::i;:::-;20750:10;20723:14;20740:21;;;:9;:21;;;;;;;20791;20809:2;20791:13;20740:21;20802:1;20791:13;:10;:13;:::i;:::-;:17;:21;:17;:21;:::i;:::-;20772:40;;20823:24;20840:6;20823:16;:24::i;:::-;20909:7;;20896:43;;-1:-1:-1;;;;;20909:7:0;20917:10;20928;20896:12;:43::i;:::-;20960:10;20972:1;20950:21;;;:9;:21;;;;;;;;:23;;;20984:11;:23;;;;;:25;21020:14;;:30;;21039:10;21020:30;:18;:30;:::i;:::-;-1:-1:-1;21066:27:0;;;;;;;;21071:10;;21066:27;;;;;;;;;;20653:448;;:::o;5166:157::-;-1:-1:-1;;;;;5280:14:0;;;5249:7;5280:14;;;:7;:14;;;;;;;;5295:12;:19;;;;;;5272:43;;;;;;;;;;;;;;;;;5232:16;;5280:14;;5295:19;;;;;5272:43;5280:14;;5272:43;;5280:14;5272:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5272:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5166:157;;;:::o;469:28::-;;;;:::o;1073:40::-;;;;;;;;;;;;;;;:::o;2590:48::-;;;;;;;;;;;;-1:-1:-1;;;;;2590:48:0;;:::o;1282:36::-;;;;:::o;26010:270::-;24412:10;24404:19;;;;:7;:19;;;;;;;;:27;;:19;:27;24396:36;;12:1:-1;9;2:12;24396:36:0;-1:-1:-1;;;;;26103:32:0;::::1;26095:41;;12:1:-1;9::::0;2:12:::1;26095:41:0;26234:17;:38:::0;;-1:-1:-1;;;;;;26234:38:0::1;-1:-1:-1::0;;;;;26234:38:0;;;::::1;::::0;;;::::1;::::0;;26010:270::o;1446:42::-;;;;:::o;16369:285::-;-1:-1:-1;;;;;16631:14:0;;16433:7;16631:14;;;:7;:14;;;;;;;;;16533:22;:29;;;;;;16473:173;;16631:14;16473:119;;16587:4;;16473:91;;16512:51;;:16;:14;:16::i;:::-;:20;:51;:20;:51;:::i;:::-;-1:-1:-1;;;;;16473:16:0;;;;;;:9;:16;;;;;;;:91;:38;:91;:::i;:119::-;:157;:173;:157;:173;:::i;:::-;16452:194;;16369:285;;;;:::o;1224:47::-;;;;;;;;;;;;;:::o;10709:4032::-;10784:25;10864:1;10851:10;:14;10825:66;;;;;-1:-1:-1;;;10825:66:0;;;;;;;;;;;;-1:-1:-1;;;10825:66:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10910:16:0;;;;;;:9;:16;;;;;;10929:12;-1:-1:-1;10906:79:0;;;-1:-1:-1;10968:1:0;10961:8;;10906:79;-1:-1:-1;;;;;11020:16:0;;10999:20;11020:16;;;:9;:16;;;;;;;;;11076:11;:18;;;;;;11142:11;:18;;;;;;11252:15;11248:606;;11309:13;11292:12;:30;;:89;;;;;11368:13;11349:16;:32;;11292:89;11287:552;;;11430:387;11770:45;:15;11790:24;11770:45;:19;:45;:::i;:::-;11430:284;11711:2;11430:226;11642:13;;11430:157;11581:5;11430:96;11501:24;;11430:16;:70;;:96;;;;:::i;:157::-;:211;:226;:211;:226;:::i;:387::-;11410:407;;11287:552;11957:10;11971:1;11957:15;11953:664;;;12014:13;11997:12;:30;;:90;;;;;12073:14;12054:16;:33;;11997:90;11992:610;;;12136:446;12535:45;:15;12555:24;12535:45;:19;:45;:::i;:::-;12136:343;12475:3;12136:284;12418:1;12136:227;12348:13;;12136:157;12287:5;12136:96;12207:24;;12136:16;:70;;:96;;;;:::i;:446::-;12116:466;;11992:610;12695:10;12709:1;12695:15;12691:606;;;12752:13;12735:12;:30;;:90;;;;;12811:14;12792:16;:33;;12735:90;12730:552;;;12874:388;13215:45;:15;13235:24;13215:45;:19;:45;:::i;:::-;12874:285;13156:2;12874:227;13086:13;;12874:157;13025:5;12874:96;12945:24;;12874:16;:70;;:96;;;;:::i;:388::-;12854:408;;12730:552;13377:10;13391:1;13377:15;13373:607;;;13434:13;13417:12;:30;;:91;;;;;13493:15;13474:16;:34;;13417:91;13412:553;;;13557:388;13898:45;:15;13918:24;13898:45;:19;:45;:::i;:::-;13557:285;13839:2;13557:227;13769:13;;13557:157;13708:5;13557:96;13628:24;;13557:16;:70;;:96;;;;:::i;:388::-;13537:408;;13412:553;14070:10;14084:1;14070:15;14066:664;;;14127:14;14110:12;:31;;:92;;;;;14187:15;14168:16;:34;;14110:92;14105:610;;;14251:444;14648:45;:15;14668:24;14648:45;:19;:45;:::i;:::-;14251:341;14589:2;14251:283;14532:1;14251:226;14463:13;;14251:157;14402:5;14251:96;14322:24;;14251:16;:70;;:96;;;;:::i;:444::-;14231:464;;14105:610;10709:4032;;;;;;;;:::o;553:38::-;;;;:::o;24542:363::-;24412:10;24404:19;;;;:7;:19;;;;;;;;:27;;:19;:27;24396:36;;12:1:-1;9;2:12;24396:36:0;24641:7:::1;::::0;::::1;;24640:8;24632:17;;12:1:-1;9::::0;2:12:::1;24632:17:0;24743:42;::::0;;-1:-1:-1;;;24743:42:0;;24779:4:::1;24743:42;::::0;::::1;::::0;;;24789:1:::1;::::0;-1:-1:-1;;;;;24743:27:0;::::1;::::0;::::1;::::0;:42;;;;;::::1;::::0;;;;;;;;;:27;:42;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24743:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24743:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24743:42:0;24742:48:::1;24738:160;;;24843:42;::::0;;-1:-1:-1;;;24843:42:0;;24879:4:::1;24843:42;::::0;::::1;::::0;;;-1:-1:-1;;;;;24807:26:0;::::1;::::0;::::1;::::0;24834:8;;24807:26;;24843:27:::1;::::0;:42;;;;;::::1;::::0;;;;;;;;;24807:26;24843:42;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24843:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24843:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24843:42:0;24807:79:::1;::::0;;-1:-1:-1;;;;;;24807:79:0::1;::::0;;;;;;-1:-1:-1;;;;;24807:79:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;24843:42:::1;::::0;24807:79;;;;;;;-1:-1:-1;24807:79:0;;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24807:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24807:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;24542:363:0;;:::o;19777:841::-;19857:10;19823:20;19846:22;;;:10;:22;;;;;19883:8;;;;19879:51;;19912:7;;;19879:51;20009:12;;19950:11;;;;19989:33;;:15;;:33;:19;:33;:::i;:::-;19972:50;;20046:12;;20037:6;:21;20033:144;;;20080:1;:8;;;20074:14;;20033:144;;;20127:38;20152:12;;20127:20;20140:6;20127:1;:8;;;:12;;:20;;;;:::i;:38::-;20121:44;;20033:144;20201:8;;;;;20187:11;20236:12;;;20274:15;20259:30;;20311:8;;;;20201:14;;;;20311:17;;20212:3;20311:17;:12;:17;:::i;:::-;20300:8;;;:28;20352:9;;20339:39;;-1:-1:-1;;;;;20352:9:0;20362:10;20374:3;20339:12;:39::i;:::-;20394:28;;;;;;;;20407:10;;20394:28;;;;;;;;;;20502:16;;:25;;20523:3;20502:25;:20;:25;:::i;:::-;20483:16;:44;20590:10;20570:31;;;;:19;:31;;;;;;:40;;20606:3;20570:40;:35;:40;:::i;:::-;20558:10;20538:31;;;;:19;:31;;;;;:72;-1:-1:-1;;;;19777:841:0;:::o;19287:453::-;-1:-1:-1;;;;;19391:17:0;;19349:7;19391:17;;;:10;:17;;;;;19425:8;;;;19421:54;;19462:1;19455:8;;;;;19421:54;19524:12;;19487:14;;19504:33;;:15;;:33;:19;:33;:::i;:::-;19487:50;;19561:12;;19552:6;:21;19548:82;;;19609:8;;;;19596;;;;:22;;;:12;:22;:::i;:::-;19589:29;;;;;;19548:82;19640:11;19654:38;19679:12;;19654:20;19667:6;19654:1;:8;;;:12;;:20;;;;:::i;:38::-;19710:8;;;;19640:52;;-1:-1:-1;19710:17:0;;19640:52;19710:17;:12;:17;:::i;:::-;19703:24;19287:453;-1:-1:-1;;;;;19287:453:0:o;25533:213::-;24412:10;24404:19;;;;:7;:19;;;;;;;;:27;;:19;:27;24396:36;;12:1:-1;9;2:12;24396:36:0;-1:-1:-1;;;;;25607:22:0;::::1;25599:31;;12:1:-1;9::::0;2:12:::1;25599:31:0;25720:7;:18:::0;;-1:-1:-1;;;;;;25720:18:0::1;-1:-1:-1::0;;;;;25720:18:0;;;::::1;::::0;;;::::1;::::0;;25533:213::o;4903:210::-;5003:13;;4949:7;4985:32;;;:17;:32;;;;;;5076:27;;5044:26;;5018:21;;4949:7;;4985:32;5018:86;;5076:27;;5018:53;;;:25;:53;:::i;:86::-;4977:128;;;;4903:210;;:::o;4443:182::-;4542:10;4489:7;4532:21;;;:9;:21;;;;;;;;;4554:10;:22;;;;;;:32;;;;4587:29;;;;;4443:182;;;:::o;25216:130::-;24412:10;24404:19;;;;:7;:19;;;;;;;;:27;;:19;:27;24396:36;;12:1:-1;9;2:12;24396:36:0;-1:-1:-1;;;;;25286:20:0;::::1;25278:29;;12:1:-1;9::::0;2:12:::1;25278:29:0;-1:-1:-1::0;;;;;25318:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;:20;;-1:-1:-1;;25318:20:0::1;25334:4;25318:20;::::0;;25216:130::o;2693:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2693:45:0;;-1:-1:-1;2693:45:0;;-1:-1:-1;2693:45:0:o;1876:51::-;;;;;;;;;;;;;:::o;23853:505::-;23907:10;17179:16;:14;:16::i;:::-;17156:20;:39;17225:27;17244:7;17225:18;:27::i;:::-;-1:-1:-1;;;;;17206:16:0;;;;;;:7;:16;;;;;;;;:46;;;;17297:20;;17263:22;:31;;;;;;:54;;;;17345:15;17328:14;:32;17445:70:::1;17480:34;17489:5;17509:3;17480:34;:20;:34;:::i;:::-;17466:7;::::0;17446:28:::1;::::0;:15:::1;::::0;:28:::1;:19;:28;:::i;17445:70::-;17425:90;;17542:60;17575:24;17589:9;17575;;:13;;:24;;;;:::i;:::-;17550:11;::::0;17568:1:::1;:33;17542:60;:24;:60;:::i;:::-;17526:13;:76:::0;17847:7:::2;::::0;17829:15:::2;:25;17821:46;;;::::0;;-1:-1:-1;;;17821:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;17821:46:0;;;;;;;;;;;;;::::2;;17686:59:::3;17743:1;17686:52;17730:5;17687:28;17707:7;;17687:15;:19;;:28;;;;:::i;17686:59::-;17670:13;:75:::0;23969:14:::4;23986:31;24006:10;23986:19;:31::i;:::-;23969:48:::0;-1:-1:-1;24036:10:0;;24032:207:::4;;24084:10;24098:1;24066:29:::0;;;:17:::4;:29;::::0;;;;:33;24153:7:::4;::::0;24118:105:::4;::::0;-1:-1:-1;;;;;24153:7:0;;::::4;::::0;24216:6;24118:12:::4;:105::i;:::-;24325:10;24296:40;::::0;;;:28:::4;:40;::::0;;;;;:52:::4;::::0;24341:6;24296:52:::4;:44;:52;:::i;:::-;24282:10;24253:40;::::0;;;:28:::4;:40;::::0;;;;:95;-1:-1:-1;;;23853:505:0:o;4665:161::-;-1:-1:-1;;;;;4792:23:0;;4716:7;4792:23;;;:16;:23;;;;;;;;;4762:17;:24;;;;;;4743:7;:14;;;;;;;:73;;:44;;:14;:44;:18;:44;:::i;3246:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8257:202::-;8317:7;;-1:-1:-1;;;;;8353:19:0;;8345:51;;;;;-1:-1:-1;;;8345:51:0;;;;;;;;;;;;-1:-1:-1;;;8345:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;8415:16:0;;;;;:9;:16;;;;;;;;;8432:11;:18;;;;;;;8415:16;;8257:202::o;414:33::-;;;;:::o;875:58::-;;;;;;;;;;;;;:::o;2541:21::-;;;-1:-1:-1;;;;;2541:21:0;;:::o;6052:981::-;6132:1;6122:7;:11;6114:20;;12:1:-1;9;2:12;6114:20:0;6168:16;:14;:16::i;:::-;6145:20;:39;;;6248:10;6219:13;6235:24;;;:12;:24;;;;;;-1:-1:-1;;;;;6235:24:0;;6270:50;;6235:24;;6270:22;:50::i;:::-;6356:42;6383:14;:7;6395:1;6383:14;:11;:14;:::i;:::-;-1:-1:-1;;;;;6356:22:0;;;;;;:15;:22;;;;;;;:42;:26;:42;:::i;:::-;-1:-1:-1;;;;;6331:22:0;;;;;;;:15;:22;;;;;;;;:67;;;;6470:12;:19;;;;;6504;6500:57;;6539:7;;;6500:57;6567:50;6590:5;6596:20;;6567:22;:50::i;:::-;6653;6680:22;6699:2;6680:14;:7;6692:1;6680:14;:11;:14;:::i;6653:50::-;-1:-1:-1;;;;;6628:22:0;;;;;;;:15;:22;;;;;;;;:75;;;;6775:12;:19;;;;;6809;6805:57;;6844:7;;;6805:57;6872:50;6895:5;6901:20;;6872:22;:50::i;:::-;6958:43;6985:15;:7;6997:2;6985:15;:11;:15;:::i;6958:43::-;-1:-1:-1;;;;;6933:22:0;;;;;;;:15;:22;;;;;:68;6052:981;;:::o;22870:940::-;22954:16;:14;:16::i;:::-;22931:20;:39;;;23034:10;23005:13;23021:24;;;:12;:24;;;;;;-1:-1:-1;;;;;23021:24:0;;23056:50;;23021:24;;23056:22;:50::i;:::-;23142:42;23169:14;:7;23181:1;23169:14;:11;:14;:::i;:::-;-1:-1:-1;;;;;23142:22:0;;;;;;:15;:22;;;;;;;:42;:26;:42;:::i;309:43::-;;;;:::o;1601:63::-;;;;;;;;;;;;;:::o;1533:31::-;;;;:::o;2047:89::-;;;;:::o;2250:74::-;;;-1:-1:-1;;;;;2250:74:0;;:::o;2361:78::-;;;-1:-1:-1;;;;;2361:78:0;;:::o;19122:122::-;-1:-1:-1;;;;;19212:17:0;19186:7;19212:17;;;:10;:17;;;;;:24;;;;19122:122::o;14807:188::-;14873:4;14906:71;14973:3;14906:52;14952:5;14906:52;:11;14932:4;14906:31;:25;:31;:::i;2919:46::-;;;;;;;;;;;;;:::o;22653:209::-;22764:28;22784:7;22764:19;:28::i;:::-;-1:-1:-1;;;;;22735:26:0;;;;;;;:17;:26;;;;;;;;:57;;;;22803:32;:41;;;;;;:51;22653:209::o;153:26::-;;;;:::o;187:29::-;;;;:::o;223:37::-;;;;:::o;2145:74::-;;;-1:-1:-1;;;;;2145:74:0;;:::o;16668:430::-;16715:7;16739:14;;16757:1;16739:19;16735:79;;;-1:-1:-1;16782:20:0;;16775:27;;16735:79;16846:244;16894:180;17059:14;;16894:138;17027:4;16894:106;16978:21;;16894:57;16936:14;;16894:15;:41;;:57;;;;:::i;:180::-;16846:20;;;:244;:24;:244;:::i;:::-;16826:264;;16668:430;;:::o;1361:41::-;;;;:::o;17925:1180::-;17972:10;17179:16;:14;:16::i;:::-;17156:20;:39;17225:27;17244:7;17225:18;:27::i;:::-;-1:-1:-1;;;;;17206:16:0;;;;;;:7;:16;;;;;;;;:46;;;;17297:20;;17263:22;:31;;;;;;:54;;;;17345:15;17328:14;:32;17445:70:::1;17480:34;17489:5;17509:3;17480:34;:20;:34;:::i;17445:70::-;17425:90;;17542:60;17575:24;17589:9;17575;;:13;;:24;;;;:::i;17542:60::-;17526:13;:76:::0;17847:7:::2;::::0;17829:15:::2;:25;17821:46;;;::::0;;-1:-1:-1;;;17821:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;17821:46:0;;;;;;;;;;;;;::::2;;17686:59:::3;17743:1;17686:52;17730:5;17687:28;17707:7;;17687:15;:19;;:28;;;;:::i;17686:59::-;17670:13;:75:::0;18030:14:::4;18047:30;18066:10;18047:18;:30::i;:::-;18030:47;;18088:21;18110:31;18130:10;18110:19;:31::i;:::-;18088:53:::0;-1:-1:-1;18156:10:0;;18152:946:::4;;18190:10;18204:1;18182:19:::0;;;:7:::4;:19;::::0;;;;:23;18224:15;;18220:88:::4;;18277:10;18291:1;18259:29:::0;;;:17:::4;:29;::::0;;;;:33;18220:88:::4;18322:14;18339:25;:6:::0;18350:13;18339:25:::4;:10;:25;:::i;:::-;18412:7;::::0;18322:42;;-1:-1:-1;18381:93:0::4;::::0;-1:-1:-1;;;;;18412:7:0::4;18438:10;18322:42:::0;18381:12:::4;:93::i;:::-;18518:26;::::0;:38:::4;::::0;18549:6;18518:38:::4;:30;:38;:::i;:::-;18489:26;:67:::0;18603:27:::4;::::0;:46:::4;::::0;18635:13;18603:46:::4;:31;:46;:::i;:::-;18573:27;:76:::0;;;18738:26:::4;::::0;18719:13:::4;::::0;18701:32:::4;::::0;;;:17:::4;:32;::::0;;;;;:97:::4;::::0;18573:76;18701:64:::4;::::0;:32;:64:::4;:36;:64;:::i;:97::-;18684:13;::::0;18666:32:::4;::::0;;;:17:::4;:32;::::0;;;;;;;:132;;;;18887:10:::4;18858:40:::0;;:28:::4;:40:::0;;;;:52:::4;::::0;18903:6;18858:52:::4;:44;:52;:::i;:::-;18844:10;18815:40;::::0;;;:28:::4;:40;::::0;;;;;;;:95;;;;18965:27:::4;:39:::0;;;;:58:::4;::::0;19009:13;18965:58:::4;:43;:58;:::i;:::-;18953:10;18925:39;::::0;;;:27:::4;:39;::::0;;;;;;;;:98;;;;19047:27;;;;;;;18953:10;;19047:27:::4;::::0;;;;;;;::::4;18152:946;17760:1;;17371::::1;17925:1180:::0;:::o;24974:224::-;24412:10;24404:19;;;;:7;:19;;;;;;;;:27;;:19;:27;24396:36;;12:1:-1;9;2:12;24396:36:0;-1:-1:-1;;;;;25052:24:0;::::1;25044:33;;12:1:-1;9::::0;2:12:::1;25044:33:0;25168:9;:22:::0;;-1:-1:-1;;;;;;25168:22:0::1;-1:-1:-1::0;;;;;25168:22:0;;;::::1;::::0;;;::::1;::::0;;24974:224::o;7094:1100::-;7165:1;7155:7;:11;7147:20;;12:1:-1;9;2:12;7147:20:0;7192:10;7182:21;;;;:9;:21;;;;;;7206:12;-1:-1:-1;7178:74:0;;;7234:7;;7178:74;7323:10;7313:21;;;;:9;:21;;;;;;7338:12;-1:-1:-1;7309:877:0;;7416:10;7404:23;;;;:11;:23;;;;;;7399:227;;7510:10;7500:21;;;;:9;:21;;;;;;;;;7472:11;:23;;;;;;;:50;;;:27;:50;:::i;:::-;7460:10;7448:23;;;;:11;:23;;;;;:74;7399:227;;;7590:10;7578:23;;;;:11;:23;;;;;;:36;;7606:7;7578:36;:27;:36;:::i;:::-;7566:10;7554:23;;;;:11;:23;;;;;:60;7399:227;7661:1;7688:10;7636:22;7711:336;7727:1;7725;:3;7711:336;;;-1:-1:-1;;;;;7764:18:0;;;7748:13;7764:18;;;:12;:18;;;;;;;7801:19;7797:239;;7840:5;;;7797:239;-1:-1:-1;;;;;7903:18:0;;;;;;:11;:18;;;;;;:31;;7926:7;7903:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;7884:18:0;;;;;;:11;:18;;;;;:50;7896:5;-1:-1:-1;7896:5:0;7999:21;:14;8018:1;7999:21;:18;:21;:::i;:::-;7984:36;;-1:-1:-1;7729:3:0;;7711:336;;;-1:-1:-1;8119:57:0;8148:27;:7;8160:14;8148:27;:11;:27;:::i;:::-;8119:24;;;:57;:28;:57;:::i;:::-;8094:24;:82;-1:-1:-1;;7094:1100:0;:::o;5349:693::-;5422:10;17179:16;:14;:16::i;:::-;17156:20;:39;17225:27;17244:7;17225:18;:27::i;:::-;-1:-1:-1;;;;;17206:16:0;;;;;;:7;:16;;;;;;;;:46;;;;17297:20;;17263:22;:31;;;;;;:54;;;;17345:15;17328:14;:32;17445:70:::1;17480:34;17489:5;17509:3;17480:34;:20;:34;:::i;17445:70::-;17425:90;;17542:60;17575:24;17589:9;17575;;:13;;:24;;;;:::i;17542:60::-;17526:13;:76:::0;17847:7:::2;::::0;17829:15:::2;:25;17821:46;;;::::0;;-1:-1:-1;;;17821:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;17821:46:0;;;;;;;;;;;;;::::2;;17686:59:::3;17743:1;17686:52;17730:5;17687:28;17707:7;;17687:15;:19;;:28;;;;:::i;17686:59::-;17670:13;:75:::0;5485:11;5477:20:::4;;12:1:-1;9::::0;2:12:::4;5477:20:0;5544:7;::::0;5527:58:::4;::::0;-1:-1:-1;;;;;5544:7:0::4;5552:10;5571:4;5577:7:::0;5527:16:::4;:58::i;:::-;5595:25;5611:8;5595:15;:25::i;:::-;5662:10;5652:21;::::0;;;:9:::4;:21;::::0;;;;;:34:::4;::::0;5678:7;5652:34:::4;:25;:34;:::i;:::-;5640:10;5630:21;::::0;;;:9:::4;:21;::::0;;;;;;;:56;;;;5696:11:::4;:23:::0;;;5720:15:::4;5696:39:::0;;5760:14:::4;::::0;:27:::4;::::0;5779:7;5760:27:::4;:18;:27;:::i;:::-;5745:14;:42:::0;5811:10:::4;5801:21;::::0;;;:9:::4;:21;::::0;;;;;5826:11:::4;-1:-1:-1::0;5797:166:0::4;;5853:55;5876:10;5887:20;;5853:22;:55::i;:::-;5923:27;5942:7;5923:17;:27::i;:::-;5974:18;5984:7;5974:9;:18::i;:::-;6007:27;::::0;;;;;;;6015:10:::4;::::0;6007:27:::4;::::0;;;;;::::4;::::0;;::::4;17371:1:::1;5349:693:::0;;;:::o;9126:1571::-;-1:-1:-1;;;;;9261:16:0;;9184:7;9261:16;;;:9;:16;;;;;;9280:12;-1:-1:-1;9256:79:0;;;-1:-1:-1;9320:3:0;9313:10;;9256:79;-1:-1:-1;;;;;9366:16:0;;9345:20;9366:16;;;:9;:16;;;;;;;;;9418:11;:18;;;;;;;9468:13;9451:30;;;;;:69;;;9515:5;9499:12;:21;9451:69;:120;;;;;9558:13;9538:16;:33;;9451:120;:171;;;;;9608:14;9589:16;:33;9451:171;9447:223;;;9657:1;9650:8;;;;;;9447:223;9702:13;9685:12;:30;;:78;;;;;9750:13;9734:12;:29;9685:78;:139;;;;;9810:14;9790:16;:34;;9685:139;:198;;;;;9869:14;9849:16;:34;9685:198;9681:263;;;9919:1;9912:8;;;;;;9681:263;9976:13;9959:12;:30;;:78;;;;;10024:13;10007:12;:30;9959:78;:139;;;;;10084:14;10064:16;:34;;9959:139;:199;;;;;10143:15;10124:16;:34;9959:199;9955:263;;;10193:1;10186:8;;;;;;9955:263;10252:13;10235:12;:30;;:78;;;;;10299:14;10283:12;:30;10235:78;:141;;;;;10361:15;10341:16;:35;;10235:141;:203;;;;;10422:16;10403;:35;10235:203;10231:267;;;10473:1;10466:8;;;;;;10231:267;10532:14;10515:12;:31;;:94;;;;;10593:16;10573;:36;;10515:94;10511:158;;;10644:1;10637:8;;;;;;10511:158;-1:-1:-1;10686:3:0;;9126:1571;-1:-1:-1;;;9126:1571:0:o;22026:619::-;-1:-1:-1;;;;;22114:16:0;;22091:7;22114:16;;;:9;:16;;;;;;22133:11;-1:-1:-1;22110:71:0;;;-1:-1:-1;22168:1:0;22161:8;;22110:71;22193:11;22207:16;:14;:16::i;:::-;-1:-1:-1;;;;;22339:22:0;;22268:15;22339:22;;;:15;:22;;;;;;;;;22294:32;:39;;;;;;22193:30;;-1:-1:-1;22268:15:0;;22286:86;;22367:4;;22286:76;;22339:22;22286:48;;22193:30;;22286:48;:7;:48;:::i;:86::-;-1:-1:-1;;;;;22429:19:0;;;22413:13;22429:19;;;:12;:19;;;;;;;;;;;;22482:16;;;:9;:16;;;;;;;22268:104;;-1:-1:-1;22429:19:0;;22482:16;22526:74;22595:4;22526:64;22569:20;22482:16;22586:2;22569:20;:16;:20;:::i;:::-;-1:-1:-1;;;;;22534:29:0;;;;;;:22;:29;;;;;;22526:38;;:3;;:38;:7;:38;:::i;:74::-;22509:91;-1:-1:-1;22618:19:0;:7;22509:91;22618:19;:11;:19;:::i;:::-;22611:26;22026:619;-1:-1:-1;;;;;;;22026:619:0:o;267:35::-;;;;:::o;1966:42::-;;;;:::o;15025:1301::-;15115:1;15105:7;:11;15097:20;;12:1:-1;9;2:12;15097:20:0;15165:7;;15148:58;;-1:-1:-1;;;;;15165:7:0;15173:10;15192:4;15198:7;15148:16;:58::i;:::-;15217:25;15233:8;15217:15;:25::i;:::-;15278:19;15299:17;15334;;;;;;;;;-1:-1:-1;;;;;15334:17:0;-1:-1:-1;;;;;15321:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15321:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15321:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15321:46:0;;;;;;;;;-1:-1:-1;15321:46:0;-1:-1:-1;15378:16:0;15400:46;15321;15400:31;15321:46;15400:14;:7;15412:1;15400:14;:11;:14;:::i;:46::-;15493:10;15459:20;15482:22;;;:10;:22;;;;;15550:11;;;;15378:68;;-1:-1:-1;15482:22:0;15550:25;;15378:68;15550:25;:15;:25;:::i;:::-;15535:11;;;:40;15609:8;;;;:13;15605:496;;15676:12;;15639:14;;15656:33;;:15;;:33;:19;:33;:::i;:::-;15639:50;;15717:12;;15708:6;:21;15704:331;;;15773:8;;;;15760;;;;:22;;;:12;:22;:::i;:::-;15749:8;;;:33;15801:8;;;:19;;;15704:331;;;15859:11;15873:38;15898:12;;15873:20;15886:6;15873:1;:8;;;:12;;:20;;;;:::i;:38::-;15941:8;;;;15859:52;;-1:-1:-1;15941:17:0;;15859:52;15941:17;:12;:17;:::i;:::-;15930:8;;;:28;15988:8;;;;:31;;16010:8;;15988:17;;16001:3;15988:17;:12;:17;:::i;:31::-;15977:8;;;:42;-1:-1:-1;15704:331:0;15605:496;;;;16070:8;;;:19;;;15605:496;16126:15;16111:30;;16194:10;16111:12;16184:21;;;:9;:21;;;;;;:34;;16210:7;16184:34;:25;:34;:::i;:::-;16172:10;16162:21;;;;:9;:21;;;;;:56;16244:14;;:27;;16263:7;16244:27;:18;:27;:::i;:::-;16229:14;:42;16287:31;;;;;;;;16298:10;;16287:31;;;;;;;;;;15025:1301;;;;;;:::o;814:53::-;;;;;;;;;;;;;:::o;26288:91::-;24412:10;24404:19;;;;:7;:19;;;;;;;;:27;;:19;:27;24396:36;;12:1:-1;9;2:12;24396:36:0;26353:7:::1;:18:::0;26288:91::o;2747:46::-;;;;;;;;;;;;;:::o;25769:212::-;24412:10;24404:19;;;;:7;:19;;;;;;;;:27;;:19;:27;24396:36;;12:1:-1;9;2:12;24396:36:0;-1:-1:-1;;;;;25843:22:0;::::1;25835:31;;12:1:-1;9::::0;2:12:::1;25835:31:0;25955:7;:18:::0;;-1:-1:-1;;;;;;25955:18:0::1;-1:-1:-1::0;;;;;25955:18:0;;;::::1;::::0;;;::::1;::::0;;25769:212::o;21153:367::-;21262:42;;;-1:-1:-1;;;21262:42:0;;21298:4;21262:42;;;;;;21243:16;;-1:-1:-1;;;;;21262:27:0;;;;;:42;;;;;;;;;;;;;;;:27;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;21262:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21262:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21262:42:0;;-1:-1:-1;21324:12:0;21315:22;;12:1:-1;9;2:12;21315:22:0;21362:8;21352:7;:18;21348:165;;;21394:9;-1:-1:-1;;;;;21387:26:0;;21414:3;21419:8;21387:41;;;;;;;;;;;;;-1:-1:-1;;;;;21387:41:0;-1:-1:-1;;;;;21387:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21387:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21387:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21348:165:0;;-1:-1:-1;21348:165:0;;21468:9;-1:-1:-1;;;;;21461:26:0;;21488:3;21493:7;21461:40;;;;;;;;;;;;;-1:-1:-1;;;;;21461:40:0;-1:-1:-1;;;;;21461:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21461:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21461:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;21153:367:0;;;;:::o;26753:181::-;26811:7;26843:5;;;26867:6;;;;26859:46;;;;;-1:-1:-1;;;26859:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26925:1;26753:181;-1:-1:-1;;;26753:181:0:o;28107:471::-;28165:7;28410:6;28406:47;;-1:-1:-1;28440:1:0;28433:8;;28406:47;28477:5;;;28481:1;28477;:5;:1;28501:5;;;;;:10;28493:56;;;;-1:-1:-1;;;28493:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29054:132;29112:7;29139:39;29143:1;29146;29139:39;;;;;;;;;;;;;;;;;:3;:39::i;27217:136::-;27275:7;27302:43;27306:1;27309;27302:43;;;;;;;;;;;;;;;;;:3;:43::i;21570:407::-;21679:16;21705:9;-1:-1:-1;;;;;21698:27:0;;21734:5;21698:43;;;;;;;;;;;;;-1:-1:-1;;;;;21698:43:0;-1:-1:-1;;;;;21698:43:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21698:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21698:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21698:43:0;;-1:-1:-1;21761:12:0;21752:22;;12:1:-1;9;2:12;21752:22:0;21799:8;21789:7;:18;21785:185;;;21824:51;;;-1:-1:-1;;;21824:51:0;;-1:-1:-1;;;;;21824:51:0;;;;;;;;;;;;;;;;;;;;;;:30;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;21824:30:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;21824:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21824:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21785:185:0;;-1:-1:-1;21785:185:0;;21908:50;;;-1:-1:-1;;;21908:50:0;;-1:-1:-1;;;;;21908:50:0;;;;;;;;;;;;;;;;;;;;;;:30;;;;;;:50;;;;;;;;;;;;;;;-1:-1:-1;21908:30:0;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;21908:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21908:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;21785:185:0;21570:407;;;;;:::o;4007:349::-;4116:10;4139:1;4103:24;;;:12;:24;;;;;;-1:-1:-1;;;;;4103:24:0;4099:105;;4170:10;4157:24;;;;:12;:24;;;;;:35;;-1:-1:-1;;;;;;4157:35:0;-1:-1:-1;;;;;4157:35:0;;;;;4099:105;-1:-1:-1;;;;;4259:17:0;;;;;;:7;:17;;;;;:24;4286:1;-1:-1:-1;4255:94:0;;;-1:-1:-1;;;;;4303:17:0;;;;;;:7;:17;;;;;;;27:10:-1;;39:1;23:18;;45:23;;4303:34:0;;;;;;;;-1:-1:-1;;;;;;4303:34:0;4326:10;4303:34;;;4007:349;:::o;29682:278::-;29768:7;29803:12;29796:5;29788:28;;;;-1:-1:-1;;;29788:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29788:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29827:9;29843:1;29839;:5;;;;;;;29682:278;-1:-1:-1;;;;;29682:278:0:o;27656:192::-;27742:7;27778:12;27770:6;;;;27762:29;;;;-1:-1:-1;;;27762:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;27762:29:0;-1:-1:-1;;;27814:5:0;;;27656:192::o
Swarm Source
ipfs://e002d6e7bfe1a1e3ad4ee401fe70fa9e20d38b16782cd09bd9dbd05778738be9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.