Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 11108674 | 1494 days ago | IN | 0 ETH | 0.12194468 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
sbGenericServicePool
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; import "./IERC20.sol"; import "./SafeMath.sol"; import "./sbEthFeePoolInterface.sol"; import "./sbControllerInterface.sol"; import "./sbStrongValuePoolInterface.sol"; contract sbGenericServicePool { using SafeMath for uint256; bool public initDone; address public admin; address public pendingAdmin; address public superAdmin; address public pendingSuperAdmin; address public serviceAdmin; sbStrongValuePoolInterface public sbStrongValuePool; sbEthFeePoolInterface public sbEthFeePool; sbControllerInterface public sbController; mapping(address => uint256[]) public minerMineDays; mapping(address => uint256[]) public minerMineAmounts; mapping(address => uint256[]) public minerMineMineSeconds; uint256[] public mineDays; uint256[] public mineAmounts; uint256[] public mineMineSeconds; mapping(address => uint256) public minerDayLastClaimedFor; address[] public services; mapping(address => uint256) public serviceIndex; mapping(address => bool) public serviceAccepted; mapping(address => bool) public requestPending; string public description; function init( address sbStrongValuePoolAddress, address sbEthFeePoolAddress, address sbControllerAddress, address adminAddress, address superAdminAddress, address serviceAdminAddress, string memory desc ) public { require(!initDone, "init done"); sbStrongValuePool = sbStrongValuePoolInterface( sbStrongValuePoolAddress ); sbEthFeePool = sbEthFeePoolInterface(sbEthFeePoolAddress); sbController = sbControllerInterface(sbControllerAddress); admin = adminAddress; superAdmin = superAdminAddress; serviceAdmin = serviceAdminAddress; description = desc; initDone = true; } // ADMIN // ************************************************************************************* function updateServiceAdmin(address newServiceAdmin) public { require(msg.sender == superAdmin); serviceAdmin = newServiceAdmin; } function setPendingAdmin(address newPendingAdmin) public { require(msg.sender == admin, "not admin"); pendingAdmin = newPendingAdmin; } function acceptAdmin() public { require( msg.sender == pendingAdmin && msg.sender != address(0), "not pendingAdmin" ); admin = pendingAdmin; pendingAdmin = address(0); } function setPendingSuperAdmin(address newPendingSuperAdmin) public { require(msg.sender == superAdmin, "not superAdmin"); pendingSuperAdmin = newPendingSuperAdmin; } function acceptSuperAdmin() public { require( msg.sender == pendingSuperAdmin && msg.sender != address(0), "not pendingSuperAdmin" ); superAdmin = pendingSuperAdmin; pendingSuperAdmin = address(0); } // SERVICES // ************************************************************************************* function getServices() public view returns (address[] memory) { return services; } function isServiceAccepted(address service) public view returns (bool) { return serviceAccepted[service]; } // MINING // ************************************************************************************* function requestAccess() public payable { require(!requestPending[msg.sender], "pending"); require(!serviceAccepted[msg.sender], "accepted"); uint256 feeInWei = sbController.getServicePoolRequestFeeInWei( address(this) ); require(msg.value == feeInWei, "invalid fee"); sbEthFeePool.deposit{value: msg.value}(); requestPending[msg.sender] = true; } function grantAccess(address[] memory miners, bool useChecks) public payable { require( msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, "not admin" ); require(miners.length != 0, "zero"); uint256 currentDay = _getCurrentDay(); for (uint256 i = 0; i < miners.length; i++) { address miner = miners[i]; if (useChecks) { require(requestPending[miner], "not pending"); require( sbStrongValuePool.serviceMinMined(miner), "not min mined" ); } require(!serviceAccepted[miner], "exists"); _update( minerMineDays[miner], minerMineAmounts[miner], minerMineMineSeconds[miner], 1, true, currentDay ); _update( mineDays, mineAmounts, mineMineSeconds, 1, true, currentDay ); uint256 len = services.length; serviceIndex[miner] = len; services.push(miner); serviceAccepted[miner] = true; requestPending[miner] = false; } } function revokeAccess(address miner) public payable { require( msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, "not admin" ); require(serviceAccepted[miner], "invalid miner"); uint256 currentDay = _getCurrentDay(); _update( minerMineDays[miner], minerMineAmounts[miner], minerMineMineSeconds[miner], 1, false, currentDay ); _update(mineDays, mineAmounts, mineMineSeconds, 1, false, currentDay); _deleteIndex(serviceIndex[miner]); serviceAccepted[miner] = false; } function getMinerDayLastClaimedFor(address miner) public view returns (uint256) { uint256 len = minerMineDays[miner].length; if (len != 0) { return minerDayLastClaimedFor[miner] == 0 ? minerMineDays[miner][0].sub(1) : minerDayLastClaimedFor[miner]; } return 0; } function getMinerMineData(address miner, uint256 dayNumber) public view returns ( uint256, uint256, uint256 ) { uint256 day = dayNumber == 0 ? _getCurrentDay() : dayNumber; return _getMinerMineData(miner, day); } function getMineData(uint256 dayNumber) public view returns ( uint256, uint256, uint256 ) { uint256 day = dayNumber == 0 ? _getCurrentDay() : dayNumber; return _getMineData(day); } // CLAIMING // ************************************************************************************* function claimAll() public payable { uint256 len = minerMineDays[msg.sender].length; require(len != 0, "no mines"); require(serviceAccepted[msg.sender], "invalid miner"); require(sbStrongValuePool.serviceMinMined(msg.sender), "not min mined"); uint256 currentDay = _getCurrentDay(); uint256 dayLastClaimedFor = minerDayLastClaimedFor[msg.sender] == 0 ? minerMineDays[msg.sender][0].sub(1) : minerDayLastClaimedFor[msg.sender]; uint256 vestingDays = sbController.getServicePoolVestingDays( address(this) ); require( currentDay > dayLastClaimedFor.add(vestingDays), "already claimed" ); // fees are taken in _claim _claim(currentDay, msg.sender, dayLastClaimedFor, vestingDays); } function claimUpTo(uint256 day) public payable { uint256 len = minerMineDays[msg.sender].length; require(len != 0, "no mines"); require(serviceAccepted[msg.sender], "invalid miner"); require(sbStrongValuePool.serviceMinMined(msg.sender), "not min mined"); require(day <= _getCurrentDay(), "invalid day"); uint256 dayLastClaimedFor = minerDayLastClaimedFor[msg.sender] == 0 ? minerMineDays[msg.sender][0].sub(1) : minerDayLastClaimedFor[msg.sender]; uint256 vestingDays = sbController.getServicePoolVestingDays( address(this) ); require(day > dayLastClaimedFor.add(vestingDays), "already claimed"); // fees are taken in _claim _claim(day, msg.sender, dayLastClaimedFor, vestingDays); } function getRewardsDueAll(address miner) public view returns (uint256) { uint256 len = minerMineDays[miner].length; if (len == 0) { return 0; } uint256 currentDay = _getCurrentDay(); uint256 dayLastClaimedFor = minerDayLastClaimedFor[miner] == 0 ? minerMineDays[miner][0].sub(1) : minerDayLastClaimedFor[miner]; uint256 vestingDays = sbController.getServicePoolVestingDays( address(this) ); if (!(currentDay > dayLastClaimedFor.add(vestingDays))) { return 0; } return _getRewardsDue(currentDay, miner, dayLastClaimedFor, vestingDays); } function getRewardsDueUpTo(uint256 day, address miner) public view returns (uint256) { uint256 len = minerMineDays[miner].length; if (len == 0) { return 0; } require(day <= _getCurrentDay(), "invalid day"); uint256 dayLastClaimedFor = minerDayLastClaimedFor[miner] == 0 ? minerMineDays[miner][0].sub(1) : minerDayLastClaimedFor[miner]; uint256 vestingDays = sbController.getServicePoolVestingDays( address(this) ); if (!(day > dayLastClaimedFor.add(vestingDays))) { return 0; } return _getRewardsDue(day, miner, dayLastClaimedFor, vestingDays); } // SUPPORT // ************************************************************************************* function _getMinerMineData(address miner, uint256 day) internal view returns ( uint256, uint256, uint256 ) { uint256[] memory _Days = minerMineDays[miner]; uint256[] memory _Amounts = minerMineAmounts[miner]; uint256[] memory _UnitSeconds = minerMineMineSeconds[miner]; return _get(_Days, _Amounts, _UnitSeconds, day); } function _getMineData(uint256 day) internal view returns ( uint256, uint256, uint256 ) { return _get(mineDays, mineAmounts, mineMineSeconds, day); } function _get( uint256[] memory _Days, uint256[] memory _Amounts, uint256[] memory _UnitSeconds, uint256 day ) internal pure returns ( uint256, uint256, uint256 ) { uint256 len = _Days.length; if (len == 0) { return (day, 0, 0); } if (day < _Days[0]) { return (day, 0, 0); } uint256 lastIndex = len.sub(1); uint256 lastMinedDay = _Days[lastIndex]; if (day == lastMinedDay) { return (day, _Amounts[lastIndex], _UnitSeconds[lastIndex]); } else if (day > lastMinedDay) { return (day, _Amounts[lastIndex], _Amounts[lastIndex].mul(1 days)); } return _find(_Days, _Amounts, _UnitSeconds, day); } function _find( uint256[] memory _Days, uint256[] memory _Amounts, uint256[] memory _UnitSeconds, uint256 day ) internal pure returns ( uint256, uint256, uint256 ) { uint256 left = 0; uint256 right = _Days.length.sub(1); uint256 middle = right.add(left).div(2); while (left < right) { if (_Days[middle] == day) { return (day, _Amounts[middle], _UnitSeconds[middle]); } else if (_Days[middle] > day) { if (middle > 0 && _Days[middle.sub(1)] < day) { return ( day, _Amounts[middle.sub(1)], _Amounts[middle.sub(1)].mul(1 days) ); } if (middle == 0) { return (day, 0, 0); } right = middle.sub(1); } else if (_Days[middle] < day) { if ( middle < _Days.length.sub(1) && _Days[middle.add(1)] > day ) { return ( day, _Amounts[middle], _Amounts[middle].mul(1 days) ); } left = middle.add(1); } middle = right.add(left).div(2); } if (_Days[middle] != day) { return (day, 0, 0); } else { return (day, _Amounts[middle], _UnitSeconds[middle]); } } function _update( uint256[] storage _Days, uint256[] storage _Amounts, uint256[] storage _UnitSeconds, uint256 amount, bool adding, uint256 currentDay ) internal { uint256 len = _Days.length; uint256 secondsInADay = 1 days; uint256 secondsSinceStartOfDay = block.timestamp % secondsInADay; uint256 secondsUntilEndOfDay = secondsInADay.sub( secondsSinceStartOfDay ); if (len == 0) { if (adding) { _Days.push(currentDay); _Amounts.push(amount); _UnitSeconds.push(amount.mul(secondsUntilEndOfDay)); } else { require(false, "1: not enough mine"); } } else { uint256 lastIndex = len.sub(1); uint256 lastMinedDay = _Days[lastIndex]; uint256 lastMinedAmount = _Amounts[lastIndex]; uint256 lastUnitSeconds = _UnitSeconds[lastIndex]; uint256 newAmount; uint256 newUnitSeconds; if (lastMinedDay == currentDay) { if (adding) { newAmount = lastMinedAmount.add(amount); newUnitSeconds = lastUnitSeconds.add( amount.mul(secondsUntilEndOfDay) ); } else { require(lastMinedAmount >= amount, "2: not enough mine"); newAmount = lastMinedAmount.sub(amount); newUnitSeconds = lastUnitSeconds.sub( amount.mul(secondsUntilEndOfDay) ); } _Amounts[lastIndex] = newAmount; _UnitSeconds[lastIndex] = newUnitSeconds; } else { if (adding) { newAmount = lastMinedAmount.add(amount); newUnitSeconds = lastMinedAmount.mul(1 days).add( amount.mul(secondsUntilEndOfDay) ); } else { require(lastMinedAmount >= amount, "3: not enough mine"); newAmount = lastMinedAmount.sub(amount); newUnitSeconds = lastMinedAmount.mul(1 days).sub( amount.mul(secondsUntilEndOfDay) ); } _Days.push(currentDay); _Amounts.push(newAmount); _UnitSeconds.push(newUnitSeconds); } } } function _claim( uint256 upToDay, address miner, uint256 dayLastClaimedFor, uint256 vestingDays ) internal { uint256 rewards = _getRewardsDue( upToDay, miner, dayLastClaimedFor, vestingDays ); require(rewards > 0, "no rewards"); (uint256 numerator, uint256 denominator) = sbController .getServicePoolClaimingFee(address(this)); uint256 fee = rewards.mul(numerator).div(denominator); require(msg.value == fee, "invalid fee"); sbEthFeePool.deposit{value: msg.value}(); minerDayLastClaimedFor[miner] = upToDay.sub(vestingDays); sbController.requestRewards(miner, rewards); } function _getRewardsDue( uint256 upToDay, address miner, uint256 dayLastClaimedFor, uint256 vestingDays ) internal view returns (uint256) { uint256 rewards; for ( uint256 day = dayLastClaimedFor.add(1); day <= upToDay.sub(vestingDays); day++ ) { uint256 availableRewards = sbController.getServicePoolRewards( address(this), day ); (, , uint256 strongPoolMinerMineSecondsForDay) = sbStrongValuePool .getMinerMineData(miner, day); (, , uint256 strongPoolMineSecondsForDay) = sbStrongValuePool .getMineData(day); if (strongPoolMineSecondsForDay == 0) { continue; } uint256 amount = availableRewards .mul(strongPoolMinerMineSecondsForDay) .div(strongPoolMineSecondsForDay); rewards = rewards.add(amount); } return rewards; } function _getCurrentDay() internal view returns (uint256) { return block.timestamp.div(1 days).add(1); } function _deleteIndex(uint256 index) internal { uint256 lastIndex = services.length.sub(1); address lastService = services[lastIndex]; if (index == lastIndex) { serviceIndex[lastService] = 0; services.pop(); } else { address serviceAtIndex = services[index]; serviceIndex[serviceAtIndex] = 0; serviceIndex[lastService] = index; services[index] = lastService; services.pop(); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface sbControllerInterface { function requestRewards(address miner, uint256 amount) external; function isValuePoolAccepted(address valuePool) external view returns (bool); function getValuePoolRewards(address valuePool, uint256 day) external view returns (uint256); function getValuePoolMiningFee(address valuePool) external returns (uint256, uint256); function getValuePoolUnminingFee(address valuePool) external returns (uint256, uint256); function getValuePoolClaimingFee(address valuePool) external returns (uint256, uint256); function isServicePoolAccepted(address servicePool) external view returns (bool); function getServicePoolRewards(address servicePool, uint256 day) external view returns (uint256); function getServicePoolClaimingFee(address servicePool) external returns (uint256, uint256); function getServicePoolRequestFeeInWei(address servicePool) external returns (uint256); function getVoteForServicePoolsCount() external view returns (uint256); function getVoteForServicesCount() external view returns (uint256); function getVoteCastersRewards(uint256 dayNumber) external view returns (uint256); function getVoteReceiversRewards(uint256 dayNumber) external view returns (uint256); function getMinerMinMineDays() external view returns (uint256); function getServiceMinMineDays() external view returns (uint256); function getMinerMinMineAmountInWei() external view returns (uint256); function getServiceMinMineAmountInWei() external view returns (uint256); function getValuePoolVestingDays(address valuePool) external view returns (uint256); function getServicePoolVestingDays(address poservicePoolol) external view returns (uint256); function getVoteCasterVestingDays() external view returns (uint256); function getVoteReceiverVestingDays() external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface sbEthFeePoolInterface { function deposit() external payable; }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface sbStrongValuePoolInterface { function mineFor(address miner, uint256 amount) external; function getMinerMineData(address miner, uint256 day) external view returns ( uint256, uint256, uint256 ); function getMineData(uint256 day) external view returns ( uint256, uint256, uint256 ); function serviceMinMined(address miner) external view returns (bool); function minerMinMined(address miner) external view returns (bool); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"day","type":"uint256"}],"name":"claimUpTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dayNumber","type":"uint256"}],"name":"getMineData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"getMinerDayLastClaimedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"},{"internalType":"uint256","name":"dayNumber","type":"uint256"}],"name":"getMinerMineData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"getRewardsDueAll","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"address","name":"miner","type":"address"}],"name":"getRewardsDueUpTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getServices","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"miners","type":"address[]"},{"internalType":"bool","name":"useChecks","type":"bool"}],"name":"grantAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sbStrongValuePoolAddress","type":"address"},{"internalType":"address","name":"sbEthFeePoolAddress","type":"address"},{"internalType":"address","name":"sbControllerAddress","type":"address"},{"internalType":"address","name":"adminAddress","type":"address"},{"internalType":"address","name":"superAdminAddress","type":"address"},{"internalType":"address","name":"serviceAdminAddress","type":"address"},{"internalType":"string","name":"desc","type":"string"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"service","type":"address"}],"name":"isServiceAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mineAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mineDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mineMineSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minerDayLastClaimedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"minerMineAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"minerMineDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"minerMineMineSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSuperAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"requestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"revokeAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"sbController","outputs":[{"internalType":"contract sbControllerInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sbEthFeePool","outputs":[{"internalType":"contract sbEthFeePoolInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sbStrongValuePool","outputs":[{"internalType":"contract sbStrongValuePoolInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"serviceAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"serviceAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"serviceIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"services","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingSuperAdmin","type":"address"}],"name":"setPendingSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"superAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newServiceAdmin","type":"address"}],"name":"updateServiceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061312f806100206000396000f3fe6080604052600436106102305760003560e01c8063754178511161012e578063db02fc60116100ab578063eb87e89b1161006f578063eb87e89b14610984578063f1e5ff3e146109ae578063f851a440146109e1578063fed0a20e146109f6578063ffbb698914610a0b57610230565b8063db02fc60146108d1578063db374cbb14610904578063e4d01a641461093d578063e7f9cefd14610967578063eb2f48171461097c57610230565b8063c84ad2c7116100f2578063c84ad2c714610815578063d1058e5914610848578063d39ca7de14610850578063d5c16c2f14610883578063da998dca146108bc57610230565b8063754178511461070357806385e68531146107685780639900285b1461078e578063ad553eef146107b8578063c22c4f43146107eb57610230565b80632fa41caf116101bc57806348028d631161018057806348028d63146105b75780634dd18bf5146105cc578063667e3f61146105ff5780637284e4161461064657806373b29a8b146106d057610230565b80632fa41caf146104355780633481050e1461044a578063358ff3d814610536578063426338b21461056f57806346d071fc146105a257610230565b8063267822471161020357806326782247146102e557806329575f6a146102fa5780632d27a8711461030f5780632e7fba1d146103395780632ede39201461039057610230565b80630d65d00a146102355780630e18b681146102665780631320671d1461027d5780631ba2295a146102c8575b600080fd5b34801561024157600080fd5b5061024a610a3e565b604080516001600160a01b039092168252519081900360200190f35b34801561027257600080fd5b5061027b610a4d565b005b34801561028957600080fd5b506102b6600480360360408110156102a057600080fd5b506001600160a01b038135169060200135610adc565b60408051918252519081900360200190f35b61027b600480360360208110156102de57600080fd5b5035610b0a565b3480156102f157600080fd5b5061024a610def565b34801561030657600080fd5b5061024a610dfe565b34801561031b57600080fd5b506102b66004803603602081101561033257600080fd5b5035610e0d565b34801561034557600080fd5b506103726004803603604081101561035c57600080fd5b506001600160a01b038135169060200135610e2b565b60408051938452602084019290925282820152519081900360600190f35b61027b600480360360408110156103a657600080fd5b8101906020810181356401000000008111156103c157600080fd5b8201836020820111156103d357600080fd5b803590602001918460208302840111640100000000831117156103f557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050503515159050610e5e565b34801561044157600080fd5b5061024a61118d565b34801561045657600080fd5b5061027b600480360360e081101561046d57600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135811692608081013582169260a08201359092169181019060e0810160c08201356401000000008111156104c157600080fd5b8201836020820111156104d357600080fd5b803590602001918460018302840111640100000000831117156104f557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061119c945050505050565b34801561054257600080fd5b506102b66004803603604081101561055957600080fd5b50803590602001356001600160a01b0316611279565b34801561057b57600080fd5b506102b66004803603602081101561059257600080fd5b50356001600160a01b0316611402565b3480156105ae57600080fd5b5061024a611498565b3480156105c357600080fd5b5061024a6114a7565b3480156105d857600080fd5b5061027b600480360360208110156105ef57600080fd5b50356001600160a01b03166114b6565b34801561060b57600080fd5b506106326004803603602081101561062257600080fd5b50356001600160a01b0316611528565b604080519115158252519081900360200190f35b34801561065257600080fd5b5061065b61153d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561069557818101518382015260200161067d565b50505050905090810190601f1680156106c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106dc57600080fd5b506102b6600480360360208110156106f357600080fd5b50356001600160a01b03166115cb565b34801561070f57600080fd5b506107186115dd565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561075457818101518382015260200161073c565b505050509050019250505060405180910390f35b61027b6004803603602081101561077e57600080fd5b50356001600160a01b031661163f565b34801561079a57600080fd5b506102b6600480360360208110156107b157600080fd5b50356117b3565b3480156107c457600080fd5b5061027b600480360360208110156107db57600080fd5b50356001600160a01b03166117c0565b3480156107f757600080fd5b5061024a6004803603602081101561080e57600080fd5b50356117f9565b34801561082157600080fd5b506106326004803603602081101561083857600080fd5b50356001600160a01b0316611820565b61027b61183e565b34801561085c57600080fd5b5061027b6004803603602081101561087357600080fd5b50356001600160a01b0316611ac8565b34801561088f57600080fd5b506102b6600480360360408110156108a657600080fd5b506001600160a01b038135169060200135611b3a565b3480156108c857600080fd5b5061024a611b53565b3480156108dd57600080fd5b506102b6600480360360208110156108f457600080fd5b50356001600160a01b0316611b62565b34801561091057600080fd5b506102b66004803603604081101561092757600080fd5b506001600160a01b038135169060200135611b74565b34801561094957600080fd5b506102b66004803603602081101561096057600080fd5b5035611b8d565b34801561097357600080fd5b5061027b611b9a565b61027b611c23565b34801561099057600080fd5b50610372600480360360208110156109a757600080fd5b5035611e04565b3480156109ba57600080fd5b506102b6600480360360208110156109d157600080fd5b50356001600160a01b0316611e36565b3480156109ed57600080fd5b5061024a611f82565b348015610a0257600080fd5b50610632611f96565b348015610a1757600080fd5b5061063260048036036020811015610a2e57600080fd5b50356001600160a01b0316611f9f565b6007546001600160a01b031681565b6001546001600160a01b031633148015610a6657503315155b610aaa576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60086020528160005260406000208181548110610af557fe5b90600052602060002001600091509150505481565b3360009081526008602052604090205480610b57576040805162461bcd60e51b81526020600482015260086024820152676e6f206d696e657360c01b604482015290519081900360640190fd5b3360009081526011602052604090205460ff16610bab576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b600554604080516376d53d6160e01b815233600482015290516001600160a01b03909216916376d53d6191602480820192602092909190829003018186803b158015610bf657600080fd5b505afa158015610c0a573d6000803e3d6000fd5b505050506040513d6020811015610c2057600080fd5b5051610c63576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b610c6b611fb4565b821115610cad576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642064617960a81b604482015290519081900360640190fd5b336000908152600e602052604081205415610cd757336000908152600e6020526040902054610d0f565b3360009081526008602052604081208054610d0f9260019291610cf657fe5b9060005260206000200154611fd390919063ffffffff16565b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015610d6057600080fd5b505afa158015610d74573d6000803e3d6000fd5b505050506040513d6020811015610d8a57600080fd5b50519050610d98828261201c565b8411610ddd576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610de984338484612076565b50505050565b6001546001600160a01b031681565b6002546001600160a01b031681565b600c8181548110610e1a57fe5b600091825260209091200154905081565b60008080808415610e3c5784610e44565b610e44611fb4565b9050610e5086826122ab565b935093509350509250925092565b60005461010090046001600160a01b0316331480610e8657506004546001600160a01b031633145b80610e9b57506002546001600160a01b031633145b610ed8576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b8151610f14576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6000610f1e611fb4565b905060005b8351811015610de9576000848281518110610f3a57fe5b60200260200101519050831561105f576001600160a01b03811660009081526012602052604090205460ff16610fa5576040805162461bcd60e51b815260206004820152600b60248201526a6e6f742070656e64696e6760a81b604482015290519081900360640190fd5b600554604080516376d53d6160e01b81526001600160a01b038481166004830152915191909216916376d53d61916024808301926020929190829003018186803b158015610ff257600080fd5b505afa158015611006573d6000803e3d6000fd5b505050506040513d602081101561101c57600080fd5b505161105f576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526011602052604090205460ff16156110b6576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b6001600160a01b038116600090815260086020908152604080832060098352818420600a90935292206110ee92919060018088612408565b611100600b600c600d60018088612408565b600f80546001600160a01b03909216600081815260106020908152604080832086905560018087019095557f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290950180546001600160a01b0319168417905591815260118252838120805460ff199081168517909155601290925292909220805490921690915501610f23565b6005546001600160a01b031681565b60005460ff16156111e0576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b600580546001600160a01b03199081166001600160a01b038a81169190911790925560068054821689841617905560078054821688841617905560008054610100600160a81b03191661010088851602179055600280548216868416179055600480549091169184169190911790558051611262906013906020840190613045565b50506000805460ff19166001179055505050505050565b6001600160a01b038116600090815260086020526040812054806112a15760009150506113fc565b6112a9611fb4565b8411156112eb576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642064617960a81b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e602052604081205415611327576001600160a01b0384166000908152600e602052604090205461134f565b6001600160a01b0384166000908152600860205260408120805461134f9260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b1580156113a057600080fd5b505afa1580156113b4573d6000803e3d6000fd5b505050506040513d60208110156113ca57600080fd5b505190506113d8828261201c565b86116113ea57600093505050506113fc565b6113f686868484612739565b93505050505b92915050565b6001600160a01b038116600090815260086020526040812054801561148d576001600160a01b0383166000908152600e60205260409020541561145d576001600160a01b0383166000908152600e6020526040902054611485565b6001600160a01b038316600090815260086020526040812080546114859260019291610cf657fe5b915050611493565b60009150505b919050565b6006546001600160a01b031681565b6003546001600160a01b031681565b60005461010090046001600160a01b03163314611506576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60116020526000908152604090205460ff1681565b6013805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b505050505081565b60106020526000908152604090205481565b6060600f80548060200260200160405190810160405280929190818152602001828054801561163557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611617575b5050505050905090565b60005461010090046001600160a01b031633148061166757506004546001600160a01b031633145b8061167c57506002546001600160a01b031633145b6116b9576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b03811660009081526011602052604090205460ff16611716576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b6000611720611fb4565b6001600160a01b038316600090815260086020908152604080832060098352818420600a90935290832093945061175c93909260019086612408565b61176f600b600c600d6001600086612408565b6001600160a01b03821660009081526010602052604090205461179190612927565b506001600160a01b03166000908152601160205260409020805460ff19169055565b600b8181548110610e1a57fe5b6002546001600160a01b031633146117d757600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600f818154811061180657fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b031660009081526011602052604090205460ff1690565b336000908152600860205260409020548061188b576040805162461bcd60e51b81526020600482015260086024820152676e6f206d696e657360c01b604482015290519081900360640190fd5b3360009081526011602052604090205460ff166118df576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b600554604080516376d53d6160e01b815233600482015290516001600160a01b03909216916376d53d6191602480820192602092909190829003018186803b15801561192a57600080fd5b505afa15801561193e573d6000803e3d6000fd5b505050506040513d602081101561195457600080fd5b5051611997576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b60006119a1611fb4565b336000908152600e602052604081205491925090156119cf57336000908152600e60205260409020546119ee565b33600090815260086020526040812080546119ee9260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015611a3f57600080fd5b505afa158015611a53573d6000803e3d6000fd5b505050506040513d6020811015611a6957600080fd5b50519050611a77828261201c565b8311611abc576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610de983338484612076565b6002546001600160a01b03163314611b18576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60096020528160005260406000208181548110610af557fe5b6004546001600160a01b031681565b600e6020526000908152604090205481565b600a6020528160005260406000208181548110610af557fe5b600d8181548110610e1a57fe5b6003546001600160a01b031633148015611bb357503315155b611bfc576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526012602052604090205460ff1615611c72576040805162461bcd60e51b815260206004820152600760248201526670656e64696e6760c81b604482015290519081900360640190fd5b3360009081526011602052604090205460ff1615611cc2576040805162461bcd60e51b81526020600482015260086024820152671858d8d95c1d195960c21b604482015290519081900360640190fd5b60075460408051633af850df60e21b815230600482015290516000926001600160a01b03169163ebe1437c91602480830192602092919082900301818787803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b505050506040513d6020811015611d3857600080fd5b50519050348114611d7e576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dce57600080fd5b505af1158015611de2573d6000803e3d6000fd5b5050336000908152601260205260409020805460ff1916600117905550505050565b60008080808415611e155784611e1d565b611e1d611fb4565b9050611e2881612a6b565b935093509350509193909250565b6001600160a01b03811660009081526008602052604081205480611e5e576000915050611493565b6000611e68611fb4565b6001600160a01b0385166000908152600e60205260408120549192509015611ea8576001600160a01b0385166000908152600e6020526040902054611ed0565b6001600160a01b03851660009081526008602052604081208054611ed09260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d6020811015611f4b57600080fd5b50519050611f59828261201c565b8311611f6c576000945050505050611493565b611f7883878484612739565b9695505050505050565b60005461010090046001600160a01b031681565b60005460ff1681565b60126020526000908152604090205460ff1681565b6000611fce6001611fc84262015180612b79565b9061201c565b905090565b600061201583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612bbb565b9392505050565b600082820183811015612015576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061208485858585612739565b9050600081116120c8576040805162461bcd60e51b815260206004820152600a6024820152696e6f207265776172647360b01b604482015290519081900360640190fd5b60075460408051632c8abfc160e11b8152306004820152815160009384936001600160a01b03909116926359157f82926024808301939282900301818787803b15801561211457600080fd5b505af1158015612128573d6000803e3d6000fd5b505050506040513d604081101561213e57600080fd5b508051602090910151909250905060006121628261215c8686612c52565b90612b79565b90508034146121a6576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121f657600080fd5b505af115801561220a573d6000803e3d6000fd5b50505050506122228589611fd390919063ffffffff16565b6001600160a01b038089166000818152600e6020526040808220949094556007548451635fe43d2360e11b81526004810193909352602483018990529351939092169263bfc87a469260448084019391929182900301818387803b15801561228957600080fd5b505af115801561229d573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b03821660009081526008602090815260408083208054825181850281018501909352808352849384936060939092909183018282801561231157602002820191906000526020600020905b8154815260200190600101908083116122fd575b5050506001600160a01b0389166000908152600960209081526040918290208054835181840281018401909452808452959650606095929450925083018282801561237b57602002820191906000526020600020905b815481526020019060010190808311612367575b5050506001600160a01b038a166000908152600a6020908152604091829020805483518184028101840190945280845295965060609592945092508301828280156123e557602002820191906000526020600020905b8154815260200190600101908083116123d1575b505050505090506123f88383838a612cab565b9550955095505050509250925092565b85546201518042819006600061241e8383611fd3565b9050836124c357851561247c57895460018181018c5560008c815260208082209093018890558b549182018c558b81529190912001879055876124618883612c52565b815460018101835560009283526020909220909101556124be565b6040805162461bcd60e51b8152602060048201526012602482015271313a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b61272d565b60006124d0856001611fd3565b905060008b82815481106124e057fe5b9060005260206000200154905060008b83815481106124fb57fe5b9060005260206000200154905060008b848154811061251657fe5b906000526020600020015490506000808a851415612601578b1561255b5761253e848e61201c565b915061255461254d8e89612c52565b849061201c565b90506125c8565b8c8410156125a5576040805162461bcd60e51b8152602060048201526012602482015271323a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b6125af848e611fd3565b91506125c56125be8e89612c52565b8490611fd3565b90505b818f87815481106125d557fe5b9060005260206000200181905550808e87815481106125f057fe5b600091825260209091200155612726565b8b1561263457612611848e61201c565b915061262d6126208e89612c52565b611fc88662015180612c52565b90506126ad565b8c84101561267e576040805162461bcd60e51b8152602060048201526012602482015271333a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b612688848e611fd3565b91506126aa6126978e89612c52565b6126a48662015180612c52565b90611fd3565b90505b8f8b90806001815401808255809150506001900390600052602060002001600090919091909150558e8290806001815401808255809150506001900390600052602060002001600090919091909150558d8190806001815401808255809150506001900390600052602060002001600090919091909150555b5050505050505b50505050505050505050565b6000808061274885600161201c565b90505b6127558785611fd3565b811161291d5760075460408051635ea925a360e01b81523060048201526024810184905290516000926001600160a01b031691635ea925a3916044808301926020929190829003018186803b1580156127ad57600080fd5b505afa1580156127c1573d6000803e3d6000fd5b505050506040513d60208110156127d757600080fd5b505160055460408051632e7fba1d60e01b81526001600160a01b038b811660048301526024820187905291519394506000939190921691632e7fba1d916044808301926060929190829003018186803b15801561283357600080fd5b505afa158015612847573d6000803e3d6000fd5b505050506040513d606081101561285d57600080fd5b50604090810151600554825163eb87e89b60e01b81526004810187905292519193506000926001600160a01b039091169163eb87e89b91602480820192606092909190829003018186803b1580156128b457600080fd5b505afa1580156128c8573d6000803e3d6000fd5b505050506040513d60608110156128de57600080fd5b50604001519050806128f257505050612915565b60006129028261215c8686612c52565b905061290e868261201c565b9550505050505b60010161274b565b5095945050505050565b600f54600090612938906001611fd3565b90506000600f828154811061294957fe5b6000918252602090912001546001600160a01b03169050828214156129b3576001600160a01b038116600090815260106020526040812055600f80548061298c57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612a66565b6000600f84815481106129c257fe5b60009182526020808320909101546001600160a01b03908116808452601090925260408084208490559085168352909120859055600f8054919250839186908110612a0957fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f805480612a4257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055505b505050565b6000806000612b6c600b805480602002602001604051908101604052809291908181526020018280548015612abf57602002820191906000526020600020905b815481526020019060010190808311612aab575b5050505050600c805480602002602001604051908101604052809291908181526020018280548015612b1057602002820191906000526020600020905b815481526020019060010190808311612afc575b5050505050600d805480602002602001604051908101604052809291908181526020018280548015612b6157602002820191906000526020600020905b815481526020019060010190808311612b4d575b505050505087612cab565b9250925092509193909250565b600061201583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612dcf565b60008184841115612c4a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c0f578181015183820152602001612bf7565b50505050905090810190601f168015612c3c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082612c61575060006113fc565b82820282848281612c6e57fe5b04146120155760405162461bcd60e51b81526004018080602001828103825260218152602001806130d96021913960400191505060405180910390fd5b83516000908190819080612cc9578460008093509350935050612dc5565b87600081518110612cd657fe5b6020026020010151851015612cf5578460008093509350935050612dc5565b6000612d02826001611fd3565b90506000898281518110612d1257fe5b6020026020010151905080871415612d5b5786898381518110612d3157fe5b6020026020010151898481518110612d4557fe5b6020026020010151955095509550505050612dc5565b80871115612daf5786898381518110612d7057fe5b6020026020010151612da1620151808c8681518110612d8b57fe5b6020026020010151612c5290919063ffffffff16565b955095509550505050612dc5565b612dbb8a8a8a8a612e34565b9550955095505050505b9450945094915050565b60008183612e1e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612c0f578181015183820152602001612bf7565b506000838581612e2a57fe5b0495945050505050565b600080600080600090506000612e5560018a51611fd390919063ffffffff16565b90506000612e68600261215c848661201c565b90505b8183101561300c57868a8281518110612e8057fe5b60200260200101511415612eaf5786898281518110612e9b57fe5b6020026020010151898381518110612d4557fe5b868a8281518110612ebc57fe5b60200260200101511115612f6957600081118015612ef65750868a612ee2836001611fd3565b81518110612eec57fe5b6020026020010151105b15612f40578689612f08836001611fd3565b81518110612f1257fe5b6020026020010151612da1620151808c612f36600187611fd390919063ffffffff16565b81518110612d8b57fe5b80612f575786600080955095509550505050612dc5565b612f62816001611fd3565b9150612ff6565b868a8281518110612f7657fe5b60200260200101511015612ff6578951612f91906001611fd3565b81108015612fbb5750868a612fa783600161201c565b81518110612fb157fe5b6020026020010151115b15612fe85786898281518110612fcd57fe5b6020026020010151612da1620151808c8581518110612d8b57fe5b612ff381600161201c565b92505b613005600261215c848661201c565b9050612e6b565b868a828151811061301957fe5b6020026020010151146130385786600080955095509550505050612dc5565b86898281518110612e9b57fe5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061308657805160ff19168380011785556130b3565b828001600101855582156130b3579182015b828111156130b3578251825591602001919060010190613098565b506130bf9291506130c3565b5090565b5b808211156130bf57600081556001016130c456fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220524ab875eba067ef2ef66ba5eaf8b5c80e31e94cf9317308a52a790b8167d61964736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102305760003560e01c8063754178511161012e578063db02fc60116100ab578063eb87e89b1161006f578063eb87e89b14610984578063f1e5ff3e146109ae578063f851a440146109e1578063fed0a20e146109f6578063ffbb698914610a0b57610230565b8063db02fc60146108d1578063db374cbb14610904578063e4d01a641461093d578063e7f9cefd14610967578063eb2f48171461097c57610230565b8063c84ad2c7116100f2578063c84ad2c714610815578063d1058e5914610848578063d39ca7de14610850578063d5c16c2f14610883578063da998dca146108bc57610230565b8063754178511461070357806385e68531146107685780639900285b1461078e578063ad553eef146107b8578063c22c4f43146107eb57610230565b80632fa41caf116101bc57806348028d631161018057806348028d63146105b75780634dd18bf5146105cc578063667e3f61146105ff5780637284e4161461064657806373b29a8b146106d057610230565b80632fa41caf146104355780633481050e1461044a578063358ff3d814610536578063426338b21461056f57806346d071fc146105a257610230565b8063267822471161020357806326782247146102e557806329575f6a146102fa5780632d27a8711461030f5780632e7fba1d146103395780632ede39201461039057610230565b80630d65d00a146102355780630e18b681146102665780631320671d1461027d5780631ba2295a146102c8575b600080fd5b34801561024157600080fd5b5061024a610a3e565b604080516001600160a01b039092168252519081900360200190f35b34801561027257600080fd5b5061027b610a4d565b005b34801561028957600080fd5b506102b6600480360360408110156102a057600080fd5b506001600160a01b038135169060200135610adc565b60408051918252519081900360200190f35b61027b600480360360208110156102de57600080fd5b5035610b0a565b3480156102f157600080fd5b5061024a610def565b34801561030657600080fd5b5061024a610dfe565b34801561031b57600080fd5b506102b66004803603602081101561033257600080fd5b5035610e0d565b34801561034557600080fd5b506103726004803603604081101561035c57600080fd5b506001600160a01b038135169060200135610e2b565b60408051938452602084019290925282820152519081900360600190f35b61027b600480360360408110156103a657600080fd5b8101906020810181356401000000008111156103c157600080fd5b8201836020820111156103d357600080fd5b803590602001918460208302840111640100000000831117156103f557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050503515159050610e5e565b34801561044157600080fd5b5061024a61118d565b34801561045657600080fd5b5061027b600480360360e081101561046d57600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135811692608081013582169260a08201359092169181019060e0810160c08201356401000000008111156104c157600080fd5b8201836020820111156104d357600080fd5b803590602001918460018302840111640100000000831117156104f557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061119c945050505050565b34801561054257600080fd5b506102b66004803603604081101561055957600080fd5b50803590602001356001600160a01b0316611279565b34801561057b57600080fd5b506102b66004803603602081101561059257600080fd5b50356001600160a01b0316611402565b3480156105ae57600080fd5b5061024a611498565b3480156105c357600080fd5b5061024a6114a7565b3480156105d857600080fd5b5061027b600480360360208110156105ef57600080fd5b50356001600160a01b03166114b6565b34801561060b57600080fd5b506106326004803603602081101561062257600080fd5b50356001600160a01b0316611528565b604080519115158252519081900360200190f35b34801561065257600080fd5b5061065b61153d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561069557818101518382015260200161067d565b50505050905090810190601f1680156106c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106dc57600080fd5b506102b6600480360360208110156106f357600080fd5b50356001600160a01b03166115cb565b34801561070f57600080fd5b506107186115dd565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561075457818101518382015260200161073c565b505050509050019250505060405180910390f35b61027b6004803603602081101561077e57600080fd5b50356001600160a01b031661163f565b34801561079a57600080fd5b506102b6600480360360208110156107b157600080fd5b50356117b3565b3480156107c457600080fd5b5061027b600480360360208110156107db57600080fd5b50356001600160a01b03166117c0565b3480156107f757600080fd5b5061024a6004803603602081101561080e57600080fd5b50356117f9565b34801561082157600080fd5b506106326004803603602081101561083857600080fd5b50356001600160a01b0316611820565b61027b61183e565b34801561085c57600080fd5b5061027b6004803603602081101561087357600080fd5b50356001600160a01b0316611ac8565b34801561088f57600080fd5b506102b6600480360360408110156108a657600080fd5b506001600160a01b038135169060200135611b3a565b3480156108c857600080fd5b5061024a611b53565b3480156108dd57600080fd5b506102b6600480360360208110156108f457600080fd5b50356001600160a01b0316611b62565b34801561091057600080fd5b506102b66004803603604081101561092757600080fd5b506001600160a01b038135169060200135611b74565b34801561094957600080fd5b506102b66004803603602081101561096057600080fd5b5035611b8d565b34801561097357600080fd5b5061027b611b9a565b61027b611c23565b34801561099057600080fd5b50610372600480360360208110156109a757600080fd5b5035611e04565b3480156109ba57600080fd5b506102b6600480360360208110156109d157600080fd5b50356001600160a01b0316611e36565b3480156109ed57600080fd5b5061024a611f82565b348015610a0257600080fd5b50610632611f96565b348015610a1757600080fd5b5061063260048036036020811015610a2e57600080fd5b50356001600160a01b0316611f9f565b6007546001600160a01b031681565b6001546001600160a01b031633148015610a6657503315155b610aaa576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60086020528160005260406000208181548110610af557fe5b90600052602060002001600091509150505481565b3360009081526008602052604090205480610b57576040805162461bcd60e51b81526020600482015260086024820152676e6f206d696e657360c01b604482015290519081900360640190fd5b3360009081526011602052604090205460ff16610bab576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b600554604080516376d53d6160e01b815233600482015290516001600160a01b03909216916376d53d6191602480820192602092909190829003018186803b158015610bf657600080fd5b505afa158015610c0a573d6000803e3d6000fd5b505050506040513d6020811015610c2057600080fd5b5051610c63576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b610c6b611fb4565b821115610cad576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642064617960a81b604482015290519081900360640190fd5b336000908152600e602052604081205415610cd757336000908152600e6020526040902054610d0f565b3360009081526008602052604081208054610d0f9260019291610cf657fe5b9060005260206000200154611fd390919063ffffffff16565b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015610d6057600080fd5b505afa158015610d74573d6000803e3d6000fd5b505050506040513d6020811015610d8a57600080fd5b50519050610d98828261201c565b8411610ddd576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610de984338484612076565b50505050565b6001546001600160a01b031681565b6002546001600160a01b031681565b600c8181548110610e1a57fe5b600091825260209091200154905081565b60008080808415610e3c5784610e44565b610e44611fb4565b9050610e5086826122ab565b935093509350509250925092565b60005461010090046001600160a01b0316331480610e8657506004546001600160a01b031633145b80610e9b57506002546001600160a01b031633145b610ed8576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b8151610f14576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6000610f1e611fb4565b905060005b8351811015610de9576000848281518110610f3a57fe5b60200260200101519050831561105f576001600160a01b03811660009081526012602052604090205460ff16610fa5576040805162461bcd60e51b815260206004820152600b60248201526a6e6f742070656e64696e6760a81b604482015290519081900360640190fd5b600554604080516376d53d6160e01b81526001600160a01b038481166004830152915191909216916376d53d61916024808301926020929190829003018186803b158015610ff257600080fd5b505afa158015611006573d6000803e3d6000fd5b505050506040513d602081101561101c57600080fd5b505161105f576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526011602052604090205460ff16156110b6576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b6001600160a01b038116600090815260086020908152604080832060098352818420600a90935292206110ee92919060018088612408565b611100600b600c600d60018088612408565b600f80546001600160a01b03909216600081815260106020908152604080832086905560018087019095557f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290950180546001600160a01b0319168417905591815260118252838120805460ff199081168517909155601290925292909220805490921690915501610f23565b6005546001600160a01b031681565b60005460ff16156111e0576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b600580546001600160a01b03199081166001600160a01b038a81169190911790925560068054821689841617905560078054821688841617905560008054610100600160a81b03191661010088851602179055600280548216868416179055600480549091169184169190911790558051611262906013906020840190613045565b50506000805460ff19166001179055505050505050565b6001600160a01b038116600090815260086020526040812054806112a15760009150506113fc565b6112a9611fb4565b8411156112eb576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642064617960a81b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e602052604081205415611327576001600160a01b0384166000908152600e602052604090205461134f565b6001600160a01b0384166000908152600860205260408120805461134f9260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b1580156113a057600080fd5b505afa1580156113b4573d6000803e3d6000fd5b505050506040513d60208110156113ca57600080fd5b505190506113d8828261201c565b86116113ea57600093505050506113fc565b6113f686868484612739565b93505050505b92915050565b6001600160a01b038116600090815260086020526040812054801561148d576001600160a01b0383166000908152600e60205260409020541561145d576001600160a01b0383166000908152600e6020526040902054611485565b6001600160a01b038316600090815260086020526040812080546114859260019291610cf657fe5b915050611493565b60009150505b919050565b6006546001600160a01b031681565b6003546001600160a01b031681565b60005461010090046001600160a01b03163314611506576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60116020526000908152604090205460ff1681565b6013805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b505050505081565b60106020526000908152604090205481565b6060600f80548060200260200160405190810160405280929190818152602001828054801561163557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611617575b5050505050905090565b60005461010090046001600160a01b031633148061166757506004546001600160a01b031633145b8061167c57506002546001600160a01b031633145b6116b9576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b03811660009081526011602052604090205460ff16611716576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b6000611720611fb4565b6001600160a01b038316600090815260086020908152604080832060098352818420600a90935290832093945061175c93909260019086612408565b61176f600b600c600d6001600086612408565b6001600160a01b03821660009081526010602052604090205461179190612927565b506001600160a01b03166000908152601160205260409020805460ff19169055565b600b8181548110610e1a57fe5b6002546001600160a01b031633146117d757600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600f818154811061180657fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b031660009081526011602052604090205460ff1690565b336000908152600860205260409020548061188b576040805162461bcd60e51b81526020600482015260086024820152676e6f206d696e657360c01b604482015290519081900360640190fd5b3360009081526011602052604090205460ff166118df576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b600554604080516376d53d6160e01b815233600482015290516001600160a01b03909216916376d53d6191602480820192602092909190829003018186803b15801561192a57600080fd5b505afa15801561193e573d6000803e3d6000fd5b505050506040513d602081101561195457600080fd5b5051611997576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b60006119a1611fb4565b336000908152600e602052604081205491925090156119cf57336000908152600e60205260409020546119ee565b33600090815260086020526040812080546119ee9260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015611a3f57600080fd5b505afa158015611a53573d6000803e3d6000fd5b505050506040513d6020811015611a6957600080fd5b50519050611a77828261201c565b8311611abc576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610de983338484612076565b6002546001600160a01b03163314611b18576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60096020528160005260406000208181548110610af557fe5b6004546001600160a01b031681565b600e6020526000908152604090205481565b600a6020528160005260406000208181548110610af557fe5b600d8181548110610e1a57fe5b6003546001600160a01b031633148015611bb357503315155b611bfc576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526012602052604090205460ff1615611c72576040805162461bcd60e51b815260206004820152600760248201526670656e64696e6760c81b604482015290519081900360640190fd5b3360009081526011602052604090205460ff1615611cc2576040805162461bcd60e51b81526020600482015260086024820152671858d8d95c1d195960c21b604482015290519081900360640190fd5b60075460408051633af850df60e21b815230600482015290516000926001600160a01b03169163ebe1437c91602480830192602092919082900301818787803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b505050506040513d6020811015611d3857600080fd5b50519050348114611d7e576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dce57600080fd5b505af1158015611de2573d6000803e3d6000fd5b5050336000908152601260205260409020805460ff1916600117905550505050565b60008080808415611e155784611e1d565b611e1d611fb4565b9050611e2881612a6b565b935093509350509193909250565b6001600160a01b03811660009081526008602052604081205480611e5e576000915050611493565b6000611e68611fb4565b6001600160a01b0385166000908152600e60205260408120549192509015611ea8576001600160a01b0385166000908152600e6020526040902054611ed0565b6001600160a01b03851660009081526008602052604081208054611ed09260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d6020811015611f4b57600080fd5b50519050611f59828261201c565b8311611f6c576000945050505050611493565b611f7883878484612739565b9695505050505050565b60005461010090046001600160a01b031681565b60005460ff1681565b60126020526000908152604090205460ff1681565b6000611fce6001611fc84262015180612b79565b9061201c565b905090565b600061201583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612bbb565b9392505050565b600082820183811015612015576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061208485858585612739565b9050600081116120c8576040805162461bcd60e51b815260206004820152600a6024820152696e6f207265776172647360b01b604482015290519081900360640190fd5b60075460408051632c8abfc160e11b8152306004820152815160009384936001600160a01b03909116926359157f82926024808301939282900301818787803b15801561211457600080fd5b505af1158015612128573d6000803e3d6000fd5b505050506040513d604081101561213e57600080fd5b508051602090910151909250905060006121628261215c8686612c52565b90612b79565b90508034146121a6576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121f657600080fd5b505af115801561220a573d6000803e3d6000fd5b50505050506122228589611fd390919063ffffffff16565b6001600160a01b038089166000818152600e6020526040808220949094556007548451635fe43d2360e11b81526004810193909352602483018990529351939092169263bfc87a469260448084019391929182900301818387803b15801561228957600080fd5b505af115801561229d573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b03821660009081526008602090815260408083208054825181850281018501909352808352849384936060939092909183018282801561231157602002820191906000526020600020905b8154815260200190600101908083116122fd575b5050506001600160a01b0389166000908152600960209081526040918290208054835181840281018401909452808452959650606095929450925083018282801561237b57602002820191906000526020600020905b815481526020019060010190808311612367575b5050506001600160a01b038a166000908152600a6020908152604091829020805483518184028101840190945280845295965060609592945092508301828280156123e557602002820191906000526020600020905b8154815260200190600101908083116123d1575b505050505090506123f88383838a612cab565b9550955095505050509250925092565b85546201518042819006600061241e8383611fd3565b9050836124c357851561247c57895460018181018c5560008c815260208082209093018890558b549182018c558b81529190912001879055876124618883612c52565b815460018101835560009283526020909220909101556124be565b6040805162461bcd60e51b8152602060048201526012602482015271313a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b61272d565b60006124d0856001611fd3565b905060008b82815481106124e057fe5b9060005260206000200154905060008b83815481106124fb57fe5b9060005260206000200154905060008b848154811061251657fe5b906000526020600020015490506000808a851415612601578b1561255b5761253e848e61201c565b915061255461254d8e89612c52565b849061201c565b90506125c8565b8c8410156125a5576040805162461bcd60e51b8152602060048201526012602482015271323a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b6125af848e611fd3565b91506125c56125be8e89612c52565b8490611fd3565b90505b818f87815481106125d557fe5b9060005260206000200181905550808e87815481106125f057fe5b600091825260209091200155612726565b8b1561263457612611848e61201c565b915061262d6126208e89612c52565b611fc88662015180612c52565b90506126ad565b8c84101561267e576040805162461bcd60e51b8152602060048201526012602482015271333a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b612688848e611fd3565b91506126aa6126978e89612c52565b6126a48662015180612c52565b90611fd3565b90505b8f8b90806001815401808255809150506001900390600052602060002001600090919091909150558e8290806001815401808255809150506001900390600052602060002001600090919091909150558d8190806001815401808255809150506001900390600052602060002001600090919091909150555b5050505050505b50505050505050505050565b6000808061274885600161201c565b90505b6127558785611fd3565b811161291d5760075460408051635ea925a360e01b81523060048201526024810184905290516000926001600160a01b031691635ea925a3916044808301926020929190829003018186803b1580156127ad57600080fd5b505afa1580156127c1573d6000803e3d6000fd5b505050506040513d60208110156127d757600080fd5b505160055460408051632e7fba1d60e01b81526001600160a01b038b811660048301526024820187905291519394506000939190921691632e7fba1d916044808301926060929190829003018186803b15801561283357600080fd5b505afa158015612847573d6000803e3d6000fd5b505050506040513d606081101561285d57600080fd5b50604090810151600554825163eb87e89b60e01b81526004810187905292519193506000926001600160a01b039091169163eb87e89b91602480820192606092909190829003018186803b1580156128b457600080fd5b505afa1580156128c8573d6000803e3d6000fd5b505050506040513d60608110156128de57600080fd5b50604001519050806128f257505050612915565b60006129028261215c8686612c52565b905061290e868261201c565b9550505050505b60010161274b565b5095945050505050565b600f54600090612938906001611fd3565b90506000600f828154811061294957fe5b6000918252602090912001546001600160a01b03169050828214156129b3576001600160a01b038116600090815260106020526040812055600f80548061298c57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612a66565b6000600f84815481106129c257fe5b60009182526020808320909101546001600160a01b03908116808452601090925260408084208490559085168352909120859055600f8054919250839186908110612a0957fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f805480612a4257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055505b505050565b6000806000612b6c600b805480602002602001604051908101604052809291908181526020018280548015612abf57602002820191906000526020600020905b815481526020019060010190808311612aab575b5050505050600c805480602002602001604051908101604052809291908181526020018280548015612b1057602002820191906000526020600020905b815481526020019060010190808311612afc575b5050505050600d805480602002602001604051908101604052809291908181526020018280548015612b6157602002820191906000526020600020905b815481526020019060010190808311612b4d575b505050505087612cab565b9250925092509193909250565b600061201583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612dcf565b60008184841115612c4a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c0f578181015183820152602001612bf7565b50505050905090810190601f168015612c3c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082612c61575060006113fc565b82820282848281612c6e57fe5b04146120155760405162461bcd60e51b81526004018080602001828103825260218152602001806130d96021913960400191505060405180910390fd5b83516000908190819080612cc9578460008093509350935050612dc5565b87600081518110612cd657fe5b6020026020010151851015612cf5578460008093509350935050612dc5565b6000612d02826001611fd3565b90506000898281518110612d1257fe5b6020026020010151905080871415612d5b5786898381518110612d3157fe5b6020026020010151898481518110612d4557fe5b6020026020010151955095509550505050612dc5565b80871115612daf5786898381518110612d7057fe5b6020026020010151612da1620151808c8681518110612d8b57fe5b6020026020010151612c5290919063ffffffff16565b955095509550505050612dc5565b612dbb8a8a8a8a612e34565b9550955095505050505b9450945094915050565b60008183612e1e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612c0f578181015183820152602001612bf7565b506000838581612e2a57fe5b0495945050505050565b600080600080600090506000612e5560018a51611fd390919063ffffffff16565b90506000612e68600261215c848661201c565b90505b8183101561300c57868a8281518110612e8057fe5b60200260200101511415612eaf5786898281518110612e9b57fe5b6020026020010151898381518110612d4557fe5b868a8281518110612ebc57fe5b60200260200101511115612f6957600081118015612ef65750868a612ee2836001611fd3565b81518110612eec57fe5b6020026020010151105b15612f40578689612f08836001611fd3565b81518110612f1257fe5b6020026020010151612da1620151808c612f36600187611fd390919063ffffffff16565b81518110612d8b57fe5b80612f575786600080955095509550505050612dc5565b612f62816001611fd3565b9150612ff6565b868a8281518110612f7657fe5b60200260200101511015612ff6578951612f91906001611fd3565b81108015612fbb5750868a612fa783600161201c565b81518110612fb157fe5b6020026020010151115b15612fe85786898281518110612fcd57fe5b6020026020010151612da1620151808c8581518110612d8b57fe5b612ff381600161201c565b92505b613005600261215c848661201c565b9050612e6b565b868a828151811061301957fe5b6020026020010151146130385786600080955095509550505050612dc5565b86898281518110612e9b57fe5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061308657805160ff19168380011785556130b3565b828001600101855582156130b3579182015b828111156130b3578251825591602001919060010190613098565b506130bf9291506130c3565b5090565b5b808211156130bf57600081556001016130c456fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220524ab875eba067ef2ef66ba5eaf8b5c80e31e94cf9317308a52a790b8167d61964736f6c634300060c0033
Deployed Bytecode Sourcemap
226:18184:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;587:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;587:41:4;;;;;;;;;;;;;;2359:229;;;;;;;;;;;;;:::i;:::-;;635:50;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;635:50:4;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7967:812;;;;;;;;;;;;;;;;-1:-1:-1;7967:812:4;;:::i;347:27::-;;;;;;;;;;;;;:::i;380:25::-;;;;;;;;;;;;;:::i;845:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;845:28:4;;:::i;6426:304::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6426:304:4;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3916:1400;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3916:1400:4;;-1:-1:-1;;;;3916:1400:4;;;;-1:-1:-1;3916:1400:4;:::i;483:51::-;;;;;;;;;;;;;:::i;1204:726::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1204:726:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1204:726:4;;-1:-1:-1;1204:726:4;;-1:-1:-1;;;;;1204:726:4:i;9483:718::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9483:718:4;;;;;;-1:-1:-1;;;;;9483:718:4;;:::i;6026:394::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6026:394:4;-1:-1:-1;;;;;6026:394:4;;:::i;540:41::-;;;;;;;;;;;;;:::i;411:32::-;;;;;;;;;;;;;:::i;2198:155::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2198:155:4;-1:-1:-1;;;;;2198:155:4;;:::i;1066:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1066:47:4;-1:-1:-1;;;;;1066:47:4;;:::i;:::-;;;;;;;;;;;;;;;;;;1172:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1013:47;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1013:47:4;-1:-1:-1;;;;;1013:47:4;;:::i;3159:94::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5322:698;;;;;;;;;;;;;;;;-1:-1:-1;5322:698:4;-1:-1:-1;;;;;5322:698:4;;:::i;814:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;814:25:4;;:::i;2042:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2042:150:4;-1:-1:-1;;;;;2042:150:4;;:::i;982:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;982:25:4;;:::i;3259:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3259:119:4;-1:-1:-1;;;;;3259:119:4;;:::i;7123:838::-;;;:::i;2594:185::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2594:185:4;-1:-1:-1;;;;;2594:185:4;;:::i;691:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;691:53:4;;;;;;;;:::i;449:27::-;;;;;;;;;;;;;:::i;918:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;918:57:4;-1:-1:-1;;;;;918:57:4;;:::i;750:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;750:57:4;;;;;;;;:::i;879:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;879:32:4;;:::i;2785:259::-;;;;;;;;;;;;;:::i;3491:419::-;;;:::i;6736:272::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6736:272:4;;:::i;8785:692::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8785:692:4;-1:-1:-1;;;;;8785:692:4;;:::i;321:20::-;;;;;;;;;;;;;:::i;295:::-;;;;;;;;;;;;;:::i;1119:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1119:46:4;-1:-1:-1;;;;;1119:46:4;;:::i;587:41::-;;;-1:-1:-1;;;;;587:41:4;;:::o;2359:229::-;2434:12;;-1:-1:-1;;;;;2434:12:4;2420:10;:26;:54;;;;-1:-1:-1;2450:10:4;:24;;2420:54;2399:117;;;;;-1:-1:-1;;;2399:117:4;;;;;;;;;;;;-1:-1:-1;;;2399:117:4;;;;;;;;;;;;;;;2534:12;;;;2526:20;;-1:-1:-1;;;;;;2526:20:4;2534:12;-1:-1:-1;;;;;2534:12:4;;2526:20;;;;-1:-1:-1;;;;;;2556:25:4;;;2359:229::o;635:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7967:812::-;8052:10;8024:11;8038:25;;;:13;:25;;;;;:32;8088:8;8080:29;;;;;-1:-1:-1;;;8080:29:4;;;;;;;;;;;;-1:-1:-1;;;8080:29:4;;;;;;;;;;;;;;;8143:10;8127:27;;;;:15;:27;;;;;;;;8119:53;;;;;-1:-1:-1;;;8119:53:4;;;;;;;;;;;;-1:-1:-1;;;8119:53:4;;;;;;;;;;;;;;;8190:17;;:45;;;-1:-1:-1;;;8190:45:4;;8224:10;8190:45;;;;;;-1:-1:-1;;;;;8190:17:4;;;;:33;;:45;;;;;;;;;;;;;;;:17;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8190:45:4;8182:71;;;;;-1:-1:-1;;;8182:71:4;;;;;;;;;;;;-1:-1:-1;;;8182:71:4;;;;;;;;;;;;;;;8278:16;:14;:16::i;:::-;8271:3;:23;;8263:47;;;;;-1:-1:-1;;;8263:47:4;;;;;;;;;;;;-1:-1:-1;;;8263:47:4;;;;;;;;;;;;;;;8371:10;8320:25;8348:34;;;:22;:34;;;;;;:39;:138;;8475:10;8452:34;;;;:22;:34;;;;;;8348:138;;;8416:10;8402:25;;;;:13;:25;;;;;:28;;:35;;8435:1;;8402:25;:28;;;;;;;;;;;;:32;;:35;;;;:::i;:::-;8518:12;;:75;;;-1:-1:-1;;;8518:75:4;;8578:4;8518:75;;;;;;8320:166;;-1:-1:-1;8496:19:4;;-1:-1:-1;;;;;8518:12:4;;;;:38;;:75;;;;;;;;;;;;;;;:12;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8518:75:4;;-1:-1:-1;8617:34:4;:17;8518:75;8617:21;:34::i;:::-;8611:3;:40;8603:68;;;;;-1:-1:-1;;;8603:68:4;;;;;;;;;;;;-1:-1:-1;;;8603:68:4;;;;;;;;;;;;;;;8717:55;8724:3;8729:10;8741:17;8760:11;8717:6;:55::i;:::-;7967:812;;;;:::o;347:27::-;;;-1:-1:-1;;;;;347:27:4;;:::o;380:25::-;;;-1:-1:-1;;;;;380:25:4;;:::o;845:28::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;845:28:4;:::o;6426:304::-;6544:7;;;;6632:14;;:45;;6668:9;6632:45;;;6649:16;:14;:16::i;:::-;6618:59;;6694:29;6712:5;6719:3;6694:17;:29::i;:::-;6687:36;;;;;;;6426:304;;;;;:::o;3916:1400::-;4058:5;;;;;-1:-1:-1;;;;;4058:5:4;4044:10;:19;;:65;;-1:-1:-1;4097:12:4;;-1:-1:-1;;;;;4097:12:4;4083:10;:26;4044:65;:109;;;-1:-1:-1;4143:10:4;;-1:-1:-1;;;;;4143:10:4;4129;:24;4044:109;4023:165;;;;;-1:-1:-1;;;4023:165:4;;;;;;;;;;;;-1:-1:-1;;;4023:165:4;;;;;;;;;;;;;;;4206:13;;4198:35;;;;;-1:-1:-1;;;4198:35:4;;;;;;;;;;;;;;;-1:-1:-1;;;4198:35:4;;;;;;;;;;;;;;;4243:18;4264:16;:14;:16::i;:::-;4243:37;;4295:9;4290:1020;4314:6;:13;4310:1;:17;4290:1020;;;4348:13;4364:6;4371:1;4364:9;;;;;;;;;;;;;;4348:25;;4391:9;4387:235;;;-1:-1:-1;;;;;4428:21:4;;;;;;:14;:21;;;;;;;;4420:45;;;;;-1:-1:-1;;;4420:45:4;;;;;;;;;;;;-1:-1:-1;;;4420:45:4;;;;;;;;;;;;;;;4512:17;;:40;;;-1:-1:-1;;;4512:40:4;;-1:-1:-1;;;;;4512:40:4;;;;;;;;;:17;;;;;:33;;:40;;;;;;;;;;;;;;:17;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4512:40:4;4483:124;;;;;-1:-1:-1;;;4483:124:4;;;;;;;;;;;;-1:-1:-1;;;4483:124:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;4644:22:4;;;;;;:15;:22;;;;;;;;4643:23;4635:42;;;;;-1:-1:-1;;;4635:42:4;;;;;;;;;;;;-1:-1:-1;;;4635:42:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;4716:20:4;;;;;;:13;:20;;;;;;;;4754:16;:23;;;;;4795:20;:27;;;;;4691:214;;4716:20;4754:23;4840:1;;4881:10;4691:7;:214::i;:::-;4919:178;4944:8;4970:11;4999:15;5032:1;5051:4;5073:10;4919:7;:178::i;:::-;5125:8;:15;;-1:-1:-1;;;;;5154:19:4;;;5111:11;5154:19;;;:12;:19;;;;;;;;:25;;;5193:20;;;;;;;;;;;;;-1:-1:-1;;;;;;5193:20:4;;;;;5227:22;;;:15;:22;;;;;:29;;-1:-1:-1;;5227:29:4;;;;;;;;5270:14;:21;;;;;;;:29;;;;;;;;4329:3;4290:1020;;483:51;;;-1:-1:-1;;;;;483:51:4;;:::o;1204:726::-;1496:8;;;;1495:9;1487:31;;;;;-1:-1:-1;;;1487:31:4;;;;;;;;;;;;-1:-1:-1;;;1487:31:4;;;;;;;;;;;;;;;1528:17;:94;;-1:-1:-1;;;;;;1528:94:4;;;-1:-1:-1;;;;;1528:94:4;;;;;;;;;;1632:12;:57;;;;;;;;;;1699:12;:57;;;;;;;;;;-1:-1:-1;1766:20:4;;-1:-1:-1;;;;;;1766:20:4;1528:94;1766:20;;;;;;;1796:10;:30;;;;;;;;;;-1:-1:-1;1836:34:4;;;;;;;;;;;;;;1880:18;;;;:11;;:18;;;;;:::i;:::-;-1:-1:-1;;1908:8:4;:15;;-1:-1:-1;;1908:15:4;1919:4;1908:15;;;-1:-1:-1;;;;;;1204:726:4:o;9483:718::-;-1:-1:-1;;;;;9620:20:4;;9583:7;9620:20;;;:13;:20;;;;;:27;9661:8;9657:47;;9692:1;9685:8;;;;;9657:47;9728:16;:14;:16::i;:::-;9721:3;:23;;9713:47;;;;;-1:-1:-1;;;9713:47:4;;;;;;;;;;;;-1:-1:-1;;;9713:47:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;9798:29:4;;9770:25;9798:29;;;:22;:29;;;;;;:34;:123;;-1:-1:-1;;;;;9892:29:4;;;;;;:22;:29;;;;;;9798:123;;;-1:-1:-1;;;;;9847:20:4;;;;;;:13;:20;;;;;:23;;:30;;9875:1;;9847:20;:23;;;:30;9953:12;;:75;;;-1:-1:-1;;;9953:75:4;;10013:4;9953:75;;;;;;9770:151;;-1:-1:-1;9931:19:4;;-1:-1:-1;;;;;9953:12:4;;;;:38;;:75;;;;;;;;;;;;;;;:12;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9953:75:4;;-1:-1:-1;10050:34:4;:17;9953:75;10050:21;:34::i;:::-;10044:3;:40;10038:82;;10108:1;10101:8;;;;;;;10038:82;10136:58;10151:3;10156:5;10163:17;10182:11;10136:14;:58::i;:::-;10129:65;;;;;9483:718;;;;;:::o;6026:394::-;-1:-1:-1;;;;;6158:20:4;;6121:7;6158:20;;;:13;:20;;;;;:27;6199:8;;6195:201;;-1:-1:-1;;;;;6246:29:4;;;;;;:22;:29;;;;;;:34;:139;;-1:-1:-1;;;;;6356:29:4;;;;;;:22;:29;;;;;;6246:139;;;-1:-1:-1;;;;;6303:20:4;;;;;;:13;:20;;;;;:23;;:30;;6331:1;;6303:20;:23;;;:30;6223:162;;;;;6195:201;6412:1;6405:8;;;6026:394;;;;:::o;540:41::-;;;-1:-1:-1;;;;;540:41:4;;:::o;411:32::-;;;-1:-1:-1;;;;;411:32:4;;:::o;2198:155::-;2287:5;;;;;-1:-1:-1;;;;;2287:5:4;2273:10;:19;2265:41;;;;;-1:-1:-1;;;2265:41:4;;;;;;;;;;;;-1:-1:-1;;;2265:41:4;;;;;;;;;;;;;;;2316:12;:30;;-1:-1:-1;;;;;;2316:30:4;-1:-1:-1;;;;;2316:30:4;;;;;;;;;;2198:155::o;1066:47::-;;;;;;;;;;;;;;;:::o;1172:25::-;;;;;;;;;;;;;;;-1:-1:-1;;1172:25:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1013:47::-;;;;;;;;;;;;;:::o;3159:94::-;3203:16;3238:8;3231:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3231:15:4;;;;;;;;;;;;;;;;;;;;;;;3159:94;:::o;5322:698::-;5419:5;;;;;-1:-1:-1;;;;;5419:5:4;5405:10;:19;;:65;;-1:-1:-1;5458:12:4;;-1:-1:-1;;;;;5458:12:4;5444:10;:26;5405:65;:109;;;-1:-1:-1;5504:10:4;;-1:-1:-1;;;;;5504:10:4;5490;:24;5405:109;5384:165;;;;;-1:-1:-1;;;5384:165:4;;;;;;;;;;;;-1:-1:-1;;;5384:165:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;5567:22:4;;;;;;:15;:22;;;;;;;;5559:48;;;;;-1:-1:-1;;;5559:48:4;;;;;;;;;;;;-1:-1:-1;;;5559:48:4;;;;;;;;;;;;;;;5617:18;5638:16;:14;:16::i;:::-;-1:-1:-1;;;;;5685:20:4;;;;;;:13;:20;;;;;;;;5719:16;:23;;;;;5756:20;:27;;;;;;5617:37;;-1:-1:-1;5664:187:4;;5685:20;;5797:1;;5617:37;5664:7;:187::i;:::-;5861:69;5869:8;5879:11;5892:15;5909:1;5912:5;5919:10;5861:7;:69::i;:::-;-1:-1:-1;;;;;5953:19:4;;;;;;:12;:19;;;;;;5940:33;;:12;:33::i;:::-;-1:-1:-1;;;;;;5983:22:4;6008:5;5983:22;;;:15;:22;;;;;:30;;-1:-1:-1;;5983:30:4;;;5322:698::o;814:25::-;;;;;;;;;;2042:150;2134:10;;-1:-1:-1;;;;;2134:10:4;2120;:24;2112:33;;;;;;2155:12;:30;;-1:-1:-1;;;;;;2155:30:4;-1:-1:-1;;;;;2155:30:4;;;;;;;;;;2042:150::o;982:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;982:25:4;;-1:-1:-1;982:25:4;:::o;3259:119::-;-1:-1:-1;;;;;3347:24:4;3324:4;3347:24;;;:15;:24;;;;;;;;;3259:119::o;7123:838::-;7196:10;7168:11;7182:25;;;:13;:25;;;;;:32;7232:8;7224:29;;;;;-1:-1:-1;;;7224:29:4;;;;;;;;;;;;-1:-1:-1;;;7224:29:4;;;;;;;;;;;;;;;7287:10;7271:27;;;;:15;:27;;;;;;;;7263:53;;;;;-1:-1:-1;;;7263:53:4;;;;;;;;;;;;-1:-1:-1;;;7263:53:4;;;;;;;;;;;;;;;7334:17;;:45;;;-1:-1:-1;;;7334:45:4;;7368:10;7334:45;;;;;;-1:-1:-1;;;;;7334:17:4;;;;:33;;:45;;;;;;;;;;;;;;;:17;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7334:45:4;7326:71;;;;;-1:-1:-1;;;7326:71:4;;;;;;;;;;;;-1:-1:-1;;;7326:71:4;;;;;;;;;;;;;;;7407:18;7428:16;:14;:16::i;:::-;7505:10;7454:25;7482:34;;;:22;:34;;;;;;7407:37;;-1:-1:-1;7454:25:4;7482:39;:138;;7609:10;7586:34;;;;:22;:34;;;;;;7482:138;;;7550:10;7536:25;;;;:13;:25;;;;;:28;;:35;;7569:1;;7536:25;:28;;;:35;7652:12;;:75;;;-1:-1:-1;;;7652:75:4;;7712:4;7652:75;;;;;;7454:166;;-1:-1:-1;7630:19:4;;-1:-1:-1;;;;;7652:12:4;;;;:38;;:75;;;;;;;;;;;;;;;:12;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7652:75:4;;-1:-1:-1;7771:34:4;:17;7652:75;7771:21;:34::i;:::-;7758:10;:47;7737:109;;;;;-1:-1:-1;;;7737:109:4;;;;;;;;;;;;-1:-1:-1;;;7737:109:4;;;;;;;;;;;;;;;7892:62;7899:10;7911;7923:17;7942:11;7892:6;:62::i;2594:185::-;2693:10;;-1:-1:-1;;;;;2693:10:4;2679;:24;2671:51;;;;;-1:-1:-1;;;2671:51:4;;;;;;;;;;;;-1:-1:-1;;;2671:51:4;;;;;;;;;;;;;;;2732:17;:40;;-1:-1:-1;;;;;;2732:40:4;-1:-1:-1;;;;;2732:40:4;;;;;;;;;;2594:185::o;691:53::-;;;;;;;;;;;;;;;;;;449:27;;;-1:-1:-1;;;;;449:27:4;;:::o;918:57::-;;;;;;;;;;;;;:::o;750:::-;;;;;;;;;;;;;;;;;;879:32;;;;;;;;;;2785:259;2865:17;;-1:-1:-1;;;;;2865:17:4;2851:10;:31;:59;;;;-1:-1:-1;2886:10:4;:24;;2851:59;2830:127;;;;;-1:-1:-1;;;2830:127:4;;;;;;;;;;;;-1:-1:-1;;;2830:127:4;;;;;;;;;;;;;;;2980:17;;;2967:10;:30;;-1:-1:-1;;;;;;2967:30:4;;;-1:-1:-1;;;;;2980:17:4;;2967:30;;;;3007;;;2785:259::o;3491:419::-;3565:10;3550:26;;;;:14;:26;;;;;;;;3549:27;3541:47;;;;;-1:-1:-1;;;3541:47:4;;;;;;;;;;;;-1:-1:-1;;;3541:47:4;;;;;;;;;;;;;;;3623:10;3607:27;;;;:15;:27;;;;;;;;3606:28;3598:49;;;;;-1:-1:-1;;;3598:49:4;;;;;;;;;;;;-1:-1:-1;;;3598:49:4;;;;;;;;;;;;;;;3676:12;;:79;;;-1:-1:-1;;;3676:79:4;;3740:4;3676:79;;;;;;3657:16;;-1:-1:-1;;;;;3676:12:4;;:42;;:79;;;;;;;;;;;;;;3657:16;3676:12;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3676:79:4;;-1:-1:-1;3773:9:4;:21;;3765:45;;;;;-1:-1:-1;;;3765:45:4;;;;;;;;;;;;-1:-1:-1;;;3765:45:4;;;;;;;;;;;;;;;3820:12;;;;;;;;;-1:-1:-1;;;;;3820:12:4;-1:-1:-1;;;;;3820:20:4;;3848:9;3820:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3885:10:4;3870:26;;;;:14;:26;;;;;:33;;-1:-1:-1;;3870:33:4;3899:4;3870:33;;;-1:-1:-1;;;;3491:419:4:o;6736:272::-;6834:7;;;;6922:14;;:45;;6958:9;6922:45;;;6939:16;:14;:16::i;:::-;6908:59;;6984:17;6997:3;6984:12;:17::i;:::-;6977:24;;;;;;;6736:272;;;;;:::o;8785:692::-;-1:-1:-1;;;;;8880:20:4;;8847:7;8880:20;;;:13;:20;;;;;:27;8921:8;8917:47;;8952:1;8945:8;;;;;8917:47;8973:18;8994:16;:14;:16::i;:::-;-1:-1:-1;;;;;9048:29:4;;9020:25;9048:29;;;:22;:29;;;;;;8973:37;;-1:-1:-1;9020:25:4;9048:34;:123;;-1:-1:-1;;;;;9142:29:4;;;;;;:22;:29;;;;;;9048:123;;;-1:-1:-1;;;;;9097:20:4;;;;;;:13;:20;;;;;:23;;:30;;9125:1;;9097:20;:23;;;:30;9203:12;;:75;;;-1:-1:-1;;;9203:75:4;;9263:4;9203:75;;;;;;9020:151;;-1:-1:-1;9181:19:4;;-1:-1:-1;;;;;9203:12:4;;;;:38;;:75;;;;;;;;;;;;;;;:12;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9203:75:4;;-1:-1:-1;9307:34:4;:17;9203:75;9307:21;:34::i;:::-;9294:10;:47;9288:89;;9365:1;9358:8;;;;;;;;9288:89;9405:65;9420:10;9432:5;9439:17;9458:11;9405:14;:65::i;:::-;9386:84;8785:692;-1:-1:-1;;;;;;8785:692:4:o;321:20::-;;;;;;-1:-1:-1;;;;;321:20:4;;:::o;295:::-;;;;;;:::o;1119:46::-;;;;;;;;;;;;;;;:::o;17780:116::-;17829:7;17855:34;17887:1;17855:27;:15;17875:6;17855:19;:27::i;:::-;:31;;:34::i;:::-;17848:41;;17780:116;:::o;1321:134:1:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;1321:134;-1:-1:-1;;;1321:134:1:o;874:176::-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;15981:743:4;16134:15;16152:120;16180:7;16201:5;16220:17;16251:11;16152:14;:120::i;:::-;16134:138;;16300:1;16290:7;:11;16282:34;;;;;-1:-1:-1;;;16282:34:4;;;;;;;;;;;;-1:-1:-1;;;16282:34:4;;;;;;;;;;;;;;;16369:12;;:66;;;-1:-1:-1;;;16369:66:4;;16429:4;16369:66;;;;;;16327:17;;;;-1:-1:-1;;;;;16369:12:4;;;;:51;;:66;;;;;;;;;;;16327:17;16369:12;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16369:66:4;;;;;;;;;-1:-1:-1;16369:66:4;-1:-1:-1;16445:11:4;16459:39;16369:66;16459:22;:7;16369:66;16459:11;:22::i;:::-;:26;;:39::i;:::-;16445:53;;16529:3;16516:9;:16;16508:40;;;;;-1:-1:-1;;;16508:40:4;;;;;;;;;;;;-1:-1:-1;;;16508:40:4;;;;;;;;;;;;;;;16558:12;;;;;;;;;-1:-1:-1;;;;;16558:12:4;-1:-1:-1;;;;;16558:20:4;;16586:9;16558:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16640:24;16652:11;16640:7;:11;;:24;;;;:::i;:::-;-1:-1:-1;;;;;16608:29:4;;;;;;;:22;:29;;;;;;:56;;;;16674:12;;:43;;-1:-1:-1;;;16674:43:4;;;;;;;;;;;;;;;;;:12;;;;;:27;;:43;;;;;16608:29;;16674:43;;;;;;16608:29;16674:12;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15981:743;;;;;;;;:::o;10315:428::-;-1:-1:-1;;;;;10529:20:4;;10430:7;10529:20;;;:13;:20;;;;;;;;10504:45;;;;;;;;;;;;;;;;;10430:7;;;;10504:22;;:45;;10529:20;;10504:45;;10529:20;10504:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;10587:23:4;;;;;;:16;:23;;;;;;;;;10559:51;;;;;;;;;;;;;;;;;10504:45;;-1:-1:-1;10559:25:4;;:51;;-1:-1:-1;10587:23:4;-1:-1:-1;10559:51:4;;10587:23;10559:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;10652:27:4;;;;;;:20;:27;;;;;;;;;10620:59;;;;;;;;;;;;;;;;;10559:51;;-1:-1:-1;10620:29:4;;:59;;-1:-1:-1;10652:27:4;-1:-1:-1;10620:59:4;;10652:27;10620:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10696:40;10701:5;10708:8;10718:12;10732:3;10696:4;:40::i;:::-;10689:47;;;;;;;;;10315:428;;;;;:::o;13454:2521::-;13692:12;;13738:6;13787:15;:31;;;13678:11;13859:63;13738:6;13787:31;13859:17;:63::i;:::-;13828:94;-1:-1:-1;13937:8:4;13933:2036;;13965:6;13961:250;;;13991:22;;;;;;;;-1:-1:-1;13991:22:4;;;;;;;;;;;;;14031:21;;;;;;;;;;;;;;;;;;14070:12;14088:32;14045:6;14099:20;14088:10;:32::i;:::-;14070:51;;;;;;;-1:-1:-1;14070:51:4;;;;;;;;;;;13961:250;;;14160:36;;;-1:-1:-1;;;14160:36:4;;;;;;;;;;;;-1:-1:-1;;;14160:36:4;;;;;;;;;;;;;;;13933:2036;;;14241:17;14261:10;:3;14269:1;14261:7;:10::i;:::-;14241:30;;14285:20;14308:5;14314:9;14308:16;;;;;;;;;;;;;;;;14285:39;;14338:23;14364:8;14373:9;14364:19;;;;;;;;;;;;;;;;14338:45;;14397:23;14423:12;14436:9;14423:23;;;;;;;;;;;;;;;;14397:49;;14461:17;14492:22;14549:10;14533:12;:26;14529:1430;;;14583:6;14579:532;;;14625:27;:15;14645:6;14625:19;:27::i;:::-;14613:39;-1:-1:-1;14691:99:4;14736:32;:6;14747:20;14736:10;:32::i;:::-;14691:15;;:19;:99::i;:::-;14674:116;;14579:532;;;14864:6;14845:15;:25;;14837:56;;;;;-1:-1:-1;;;14837:56:4;;;;;;;;;;;;-1:-1:-1;;;14837:56:4;;;;;;;;;;;;;;;14927:27;:15;14947:6;14927:19;:27::i;:::-;14915:39;-1:-1:-1;14993:99:4;15038:32;:6;15049:20;15038:10;:32::i;:::-;14993:15;;:19;:99::i;:::-;14976:116;;14579:532;15150:9;15128:8;15137:9;15128:19;;;;;;;;;;;;;;;:31;;;;15203:14;15177:12;15190:9;15177:23;;;;;;;;;;;;;;;;;:40;14529:1430;;;15260:6;15256:556;;;15302:27;:15;15322:6;15302:19;:27::i;:::-;15290:39;-1:-1:-1;15368:111:4;15425:32;:6;15436:20;15425:10;:32::i;:::-;15368:27;:15;15388:6;15368:19;:27::i;:111::-;15351:128;;15256:556;;;15553:6;15534:15;:25;;15526:56;;;;;-1:-1:-1;;;15526:56:4;;;;;;;;;;;;-1:-1:-1;;;15526:56:4;;;;;;;;;;;;;;;15616:27;:15;15636:6;15616:19;:27::i;:::-;15604:39;-1:-1:-1;15682:111:4;15739:32;:6;15750:20;15739:10;:32::i;:::-;15682:27;:15;15702:6;15682:19;:27::i;:::-;:31;;:111::i;:::-;15665:128;;15256:556;15829:5;15840:10;15829:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15869:8;15883:9;15869:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15911:12;15929:14;15911:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14529:1430;13933:2036;;;;;;;13454:2521;;;;;;;;;;:::o;16730:1044::-;16895:7;;;16971:24;:17;16993:1;16971:21;:24::i;:::-;16957:38;;16939:805;17016:24;:7;17028:11;17016;:24::i;:::-;17009:3;:31;16939:805;;17111:12;;:100;;;-1:-1:-1;;;17111:100:4;;17171:4;17111:100;;;;;;;;;;;;17084:24;;-1:-1:-1;;;;;17111:12:4;;:34;;:100;;;;;;;;;;;;;;:12;:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17111:100:4;17274:17;;:63;;;-1:-1:-1;;;17274:63:4;;-1:-1:-1;;;;;17274:63:4;;;;;;;;;;;;;;;17111:100;;-1:-1:-1;17230:40:4;;17274:17;;;;;:51;;:63;;;;;;;;;;;;;;:17;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17274:63:4;;;;;17395:17;;:51;;-1:-1:-1;;;17395:51:4;;;;;;;;;;17274:63;;-1:-1:-1;17356:35:4;;-1:-1:-1;;;;;17395:17:4;;;;:46;;:51;;;;;17274:63;;17395:51;;;;;;;;:17;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17395:51:4;;;;-1:-1:-1;17464:32:4;17460:79;;17516:8;;;;;17460:79;17552:14;17569:121;17662:27;17569:71;:16;17607:32;17569:37;:71::i;:121::-;17552:138;-1:-1:-1;17714:19:4;:7;17552:138;17714:11;:19::i;:::-;17704:29;;16939:805;;;;;17054:5;;16939:805;;;-1:-1:-1;17760:7:4;16730:1044;-1:-1:-1;;;;;16730:1044:4:o;17902:506::-;17978:8;:15;17958:17;;17978:22;;17998:1;17978:19;:22::i;:::-;17958:42;;18010:19;18032:8;18041:9;18032:19;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18032:19:4;;-1:-1:-1;18065:18:4;;;18061:341;;;-1:-1:-1;;;;;18099:25:4;;18127:1;18099:25;;;:12;:25;;;;;:29;18142:8;:14;;;;;;;;;;;;;;;;-1:-1:-1;;18142:14:4;;;;;-1:-1:-1;;;;;;18142:14:4;;;;;;18061:341;;;18187:22;18212:8;18221:5;18212:15;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18212:15:4;;;18241:28;;;:12;:28;;;;;;;:32;;;18287:25;;;;;;;;:33;;;18334:8;:15;;18212;;-1:-1:-1;18300:11:4;;18315:5;;18334:15;;;;;;;;;;;;;;:29;;;;;-1:-1:-1;;;;;18334:29:4;;;;;-1:-1:-1;;;;;18334:29:4;;;;;;18377:8;:14;;;;;;;;;;;;;;;;-1:-1:-1;;18377:14:4;;;;;-1:-1:-1;;;;;;18377:14:4;;;;;;-1:-1:-1;18061:341:4;17902:506;;;:::o;10749:232::-;10844:7;10865;10886;10925:49;10930:8;10925:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10940:11;10925:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10953:15;10925:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10970:3;10925:4;:49::i;:::-;10918:56;;;;;;10749:232;;;;;:::o;3101:130:1:-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:1;;;1746:187::o;2180:459::-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:1;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10987:837:4;11282:12;;11194:7;;;;;;11308:8;11304:57;;11340:3;11345:1;11348;11332:18;;;;;;;;;11304:57;11380:5;11386:1;11380:8;;;;;;;;;;;;;;11374:3;:14;11370:63;;;11412:3;11417:1;11420;11404:18;;;;;;;;;11370:63;11442:17;11462:10;:3;11470:1;11462:7;:10::i;:::-;11442:30;;11482:20;11505:5;11511:9;11505:16;;;;;;;;;;;;;;11482:39;;11542:12;11535:3;:19;11531:229;;;11578:3;11583:8;11592:9;11583:19;;;;;;;;;;;;;;11604:12;11617:9;11604:23;;;;;;;;;;;;;;11570:58;;;;;;;;;;;11531:229;11655:12;11649:3;:18;11645:115;;;11691:3;11696:8;11705:9;11696:19;;;;;;;;;;;;;;11717:31;11741:6;11717:8;11726:9;11717:19;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;11683:66;;;;;;;;;;;11645:115;11776:41;11782:5;11789:8;11799:12;11813:3;11776:5;:41::i;:::-;11769:48;;;;;;;;;10987:837;;;;;;;;;:::o;3713:272:1:-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:1:o;11830:1618:4:-;12038:7;12059;12080;12112:12;12127:1;12112:16;;12138:13;12154:19;12171:1;12154:5;:12;:16;;:19;;;;:::i;:::-;12138:35;-1:-1:-1;12183:14:4;12200:22;12220:1;12200:15;12138:35;12210:4;12200:9;:15::i;:22::-;12183:39;;12232:1049;12246:5;12239:4;:12;12232:1049;;;12288:3;12271:5;12277:6;12271:13;;;;;;;;;;;;;;:20;12267:959;;;12319:3;12324:8;12333:6;12324:16;;;;;;;;;;;;;;12342:12;12355:6;12342:20;;;;;;;12267:959;12404:3;12388:5;12394:6;12388:13;;;;;;;;;;;;;;:19;12384:842;;;12440:1;12431:6;:10;:40;;;;-1:-1:-1;12468:3:4;12445:5;12451:13;:6;12462:1;12451:10;:13::i;:::-;12445:20;;;;;;;;;;;;;;:26;12431:40;12427:255;;;12528:3;12557:8;12566:13;:6;12577:1;12566:10;:13::i;:::-;12557:23;;;;;;;;;;;;;;12606:35;12634:6;12606:8;12615:13;12626:1;12615:6;:10;;:13;;;;:::i;:::-;12606:23;;;;;;;12427:255;12703:11;12699:76;;12746:3;12751:1;12754;12738:18;;;;;;;;;;;12699:76;12800:13;:6;12811:1;12800:10;:13::i;:::-;12792:21;;12384:842;;;12854:3;12838:5;12844:6;12838:13;;;;;;;;;;;;;;:19;12834:392;;;12911:12;;:19;;12928:1;12911:16;:19::i;:::-;12902:6;:28;:58;;;;-1:-1:-1;12957:3:4;12934:5;12940:13;:6;12951:1;12940:10;:13::i;:::-;12934:20;;;;;;;;;;;;;;:26;12902:58;12877:297;;;13034:3;13063:8;13072:6;13063:16;;;;;;;;;;;;;;13105:28;13126:6;13105:8;13114:6;13105:16;;;;;;;12877:297;13198:13;:6;13209:1;13198:10;:13::i;:::-;13191:20;;12834:392;13248:22;13268:1;13248:15;:5;13258:4;13248:9;:15::i;:22::-;13239:31;;12232:1049;;;13311:3;13294:5;13300:6;13294:13;;;;;;;;;;;;;;:20;13290:152;;13338:3;13343:1;13346;13330:18;;;;;;;;;;;13290:152;13387:3;13392:8;13401:6;13392:16;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://524ab875eba067ef2ef66ba5eaf8b5c80e31e94cf9317308a52a790b8167d619
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.