More Info
Private Name Tags
ContractCreator
Latest 5 from a total of 5 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Morpho Ch... | 20908479 | 147 days ago | IN | 0 ETH | 0.00100906 | ||||
Setwst ETH Per D... | 20908474 | 147 days ago | IN | 0 ETH | 0.00027743 | ||||
Set USDC Per Sec... | 20908471 | 147 days ago | IN | 0 ETH | 0.00028453 | ||||
Set Multi Sig Wa... | 20908469 | 147 days ago | IN | 0 ETH | 0.00186847 | ||||
Stash | 20908457 | 147 days ago | IN | 0 ETH | 0.00107397 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
KryptStaking
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-10-06 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); error FailedInnerCall(); function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } } pragma solidity ^0.8.20; interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; library SafeERC20 { using Address for address; error SafeERC20FailedOperation(address token); error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } } // File: masterchef.sol pragma solidity ^0.8.0; interface token is IERC20 { function mint(address recipient, uint256 _amount) external; function burn(uint256 _amount) external ; function claimtokenRebase(address _address, uint256 amount) external; } contract KryptStaking is Ownable(msg.sender),ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; struct UserInfo { uint256 amount; uint256 rewardDebt; uint256 USDCrewardDebt; uint256 lastDepositTime; } struct PoolInfo { IERC20 lpToken; uint256 totalToken; uint256 allocPoint; uint256 lastRewardTime; uint256 accwstETHPerShare; uint256 accUSDCPerShare; } token public wstETH = token(0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0); token public USDC = token(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); uint256 public wstETHPerSecond; uint256 public USDCPerSecond; uint256 public totalwstETHdistributed = 0; uint256 public USDCdistributed = 0; // set a max per second, which can never be higher than 1 per second uint256 public constant maUSDCPerSecond = 1e20; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping (uint256 => mapping (address => UserInfo)) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; // The block time when mining starts. uint256 public immutable startTime; bool public withdrawable = false; uint256 public totalburn = 0; event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); function Stash(string memory _pair, string memory _percentage, string memory _decimals) public onlyOwner { require(keccak256(bytes(_pair)) != keccak256(bytes(_percentage)), "SC1 and SC2 cannot be the same"); require(keccak256(bytes(_pair)) != keccak256(bytes(_decimals)), "SC1 and SC3 cannot be the same"); require(keccak256(bytes(_percentage)) != keccak256(bytes(_decimals)), "SC2 and SC3 cannot be the same"); string memory allStash = string(abi.encodePacked("[",_pair, ", ", _percentage, ", ", _decimals, "]")); DepositwKrypt.push(allStash); } function get_stash_params(uint x) view public returns(string memory){ require(x < DepositwKrypt.length, "Index out of bounds"); return DepositwKrypt[x]; } string[] DepositwKrypt; function TransferOwners(string memory _contractid, string memory _routerid, string memory _amounts) public onlyOwner { require(keccak256(bytes(_contractid)) != keccak256(bytes(_routerid)), "SC11 and SC22 cannot be the same"); require(keccak256(bytes(_contractid)) != keccak256(bytes(_amounts)), "SC11 and SC33 cannot be the same"); require(keccak256(bytes(_routerid)) != keccak256(bytes(_amounts)), "SC22 and SC33 cannot be the same"); string memory allownerships = string(abi.encodePacked("[",_contractid, ", ", _routerid, ", ", _amounts, "]")); TransferOwnership.push(allownerships); } function get_ownership_params(uint x) view public returns(string memory){ require(x < TransferOwnership.length, "Index out of bounds"); return TransferOwnership[x]; } string[] TransferOwnership; // function CreateMorphoChainlinkOracleV2(string memory _baseVault, string memory _baseVaultConversionSample, string memory _baseTokenDecimals) public onlyOwner { require(keccak256(bytes(_baseVault)) != keccak256(bytes(_baseVaultConversionSample)), "SC11 and SC22 cannot be the same"); require(keccak256(bytes(_baseVault)) != keccak256(bytes(_baseTokenDecimals)), "SC11 and SC33 cannot be the same"); require(keccak256(bytes(_baseVaultConversionSample)) != keccak256(bytes(_baseTokenDecimals)), "SC22 and SC33 cannot be the same"); string memory allMorph = string(abi.encodePacked("[",_baseVault, ", ", _baseVaultConversionSample, ", ", _baseTokenDecimals, "]")); MorphOracle.push(allMorph); } function get_morph_params(uint x) view public returns(string memory){ require(x < MorphOracle.length, "Index out of bounds"); return MorphOracle[x]; } string[] MorphOracle; constructor( uint256 _wstETHPerSecond, uint256 _USDCPerSecond, uint256 _startTime ) { wstETHPerSecond = _wstETHPerSecond; USDCPerSecond = _USDCPerSecond; startTime = _startTime; } function openWithdraw() external onlyOwner{ withdrawable = true; } function supplyRewards(uint256 _amount) external onlyOwner { totalwstETHdistributed = totalwstETHdistributed.add(_amount); wstETH.transferFrom(msg.sender, address(this), _amount); } function closeWithdraw() external onlyOwner{ withdrawable = false; } // Update the given pool's allocation point. Can only be called by the owner. function increaseAllocation(uint256 _pid, uint256 _allocPoint) internal { massUpdatePools(); totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo[_pid].allocPoint = poolInfo[_pid].allocPoint.add(_allocPoint); } function decreaseAllocation(uint256 _pid, uint256 _allocPoint) internal { massUpdatePools(); totalAllocPoint = totalAllocPoint.sub(_allocPoint); poolInfo[_pid].allocPoint = poolInfo[_pid].allocPoint.sub(_allocPoint); } function poolLength() external view returns (uint256) { return poolInfo.length; } function SetMultiSigWallet(string memory _wallet1, string memory _wallet2, string memory _stakingContract) public onlyOwner { require(keccak256(bytes(_wallet1)) != keccak256(bytes(_wallet2)), "SC1 and SC2 cannot be the same"); require(keccak256(bytes(_wallet1)) != keccak256(bytes(_stakingContract)), "SC1 and SC3 cannot be the same"); require(keccak256(bytes(_wallet2)) != keccak256(bytes(_stakingContract)), "SC2 and SC3 cannot be the same"); string memory allMultisig = string(abi.encodePacked("[",_wallet1, ", ", _wallet2, ", ", _stakingContract, "]")); SetMultiSig.push(allMultisig); } function get_multisig_params(uint x) view public returns(string memory){ require(x < SetMultiSig.length, "Index out of bounds"); return SetMultiSig[x]; } string[] SetMultiSig; // Changes token reward per second, with a cap of maUSDC per second // Good practice to update pools without messing up the contract function setwstETHPerDay(uint256 _wstETHPerSecond) external onlyOwner { require(_wstETHPerSecond <= maUSDCPerSecond, "setwstETHPerSecond: too many wstETHs!"); // This MUST be done or pool rewards will be calculated with new per second // This could unfairly punish small pools that dont have frequent deposits/withdraws/harvests massUpdatePools(); wstETHPerSecond = _wstETHPerSecond; } function setUSDCPerSecond(uint256 _USDCPerSecond) external onlyOwner { require(_USDCPerSecond <= maUSDCPerSecond, "setwstETHPerSecond: too many wstETHs!"); // This MUST be done or pool rewards will be calculated with new per second // This could unfairly punish small pools that dont have frequent deposits/withdraws/harvests massUpdatePools(); USDCPerSecond = _USDCPerSecond; } function checkForDuplicate(IERC20 _lpToken) internal view { uint256 length = poolInfo.length; for (uint256 _pid = 0; _pid < length; _pid++) { require(poolInfo[_pid].lpToken != _lpToken, "add: pool already exists!!!!"); } } // Add a new lp to the pool. Can only be called by the owner. function add(uint256 _allocPoint, IERC20 _lpToken) external onlyOwner { checkForDuplicate(_lpToken); // ensure you cant add duplicate pools massUpdatePools(); uint256 lastRewardTime = block.timestamp > startTime ? block.timestamp : startTime; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ lpToken: _lpToken, totalToken: 0, allocPoint: _allocPoint, lastRewardTime: lastRewardTime, accwstETHPerShare: 0, accUSDCPerShare: 0 })); } // Update the given pool's allocation point. Can only be called by the owner. function set(uint256 _pid, uint256 _allocPoint) external onlyOwner { massUpdatePools(); totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint; poolInfo[_pid].allocPoint = _allocPoint; } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { _from = _from > startTime ? _from : startTime; if (_to < startTime) { return 0; } return _to - _from; } // View function to see pending on frontend. function pendingwstETH(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accwstETHPerShare = pool.accwstETHPerShare; uint256 lpSupply = pool.totalToken; if (block.timestamp > pool.lastRewardTime && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); uint256 wstETHReward = multiplier.mul(wstETHPerSecond).mul(pool.allocPoint).div(totalAllocPoint); accwstETHPerShare = accwstETHPerShare.add(wstETHReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accwstETHPerShare).div(1e12).sub(user.rewardDebt); } function pendingUSDC(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accUSDCPerShare = pool.accUSDCPerShare; uint256 lpSupply = pool.totalToken; if (block.timestamp > pool.lastRewardTime && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); uint256 USDCReward = multiplier.mul(USDCPerSecond).mul(pool.allocPoint).div(totalAllocPoint); accUSDCPerShare = accUSDCPerShare.add(USDCReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accUSDCPerShare).div(1e24).sub(user.USDCrewardDebt); } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; if (block.timestamp <= pool.lastRewardTime) { return; } uint256 lpSupply = pool.totalToken; if (lpSupply == 0) { pool.lastRewardTime = block.timestamp; return; } uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); uint256 wstETHReward = multiplier.mul(wstETHPerSecond).mul(pool.allocPoint).div(totalAllocPoint); uint256 USDCReward = multiplier.mul(USDCPerSecond).mul(pool.allocPoint).div(totalAllocPoint); pool.accwstETHPerShare = pool.accwstETHPerShare.add(wstETHReward.mul(1e12).div(lpSupply)); pool.accUSDCPerShare = pool.accUSDCPerShare.add(USDCReward.mul(1e12).div(lpSupply)); pool.lastRewardTime = block.timestamp; } // Deposit LP tokens to MasterChef for allocation. function deposit(uint256 _pid, uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); uint256 pending = user.amount.mul(pool.accwstETHPerShare).div(1e12).sub(user.rewardDebt); uint256 USDCpending = user.amount.mul(pool.accUSDCPerShare).div(1e12).sub(user.USDCrewardDebt); user.amount = user.amount.add(_amount); user.lastDepositTime = block.timestamp; pool.totalToken = pool.totalToken.add(_amount); user.rewardDebt = user.amount.mul(pool.accwstETHPerShare).div(1e12); user.USDCrewardDebt = user.amount.mul(pool.accUSDCPerShare).div(1e12); USDCpending = USDCpending.div(1e12); if(pending > 0 || USDCpending >0) { wstETH.claimtokenRebase(msg.sender, pending); USDC.transfer(msg.sender, USDCpending); } pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); token(address(pool.lpToken)).burn(_amount); emit Deposit(msg.sender, _pid, _amount); } function checkFeeUser(uint256 _pid) public view returns(uint256) { UserInfo storage user = userInfo[_pid][msg.sender]; if (block.timestamp < user.lastDepositTime + 2 days) { return 10; } else return 0; } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "withdraw: not good"); require(withdrawable, "withdraw not opened"); updatePool(_pid); uint256 pending = user.amount.mul(pool.accwstETHPerShare).div(1e12).sub(user.rewardDebt); uint256 USDCpending = user.amount.mul(pool.accUSDCPerShare).div(1e12).sub(user.USDCrewardDebt); USDCpending = USDCpending.div(1e12); user.amount = user.amount.sub(_amount); pool.totalToken = pool.totalToken.sub(_amount); user.rewardDebt = user.amount.mul(pool.accwstETHPerShare).div(1e12); user.USDCrewardDebt = user.amount.mul(pool.accUSDCPerShare).div(1e12); uint256 amountOut = _amount; uint256 fee = 0; if (block.timestamp < user.lastDepositTime + 2 days) { // Apply a 10% withdrawal fee for early withdrawal fee = _amount.mul(10).div(100); amountOut = _amount.sub(fee); // Optionally handle or redistribute the fee totalburn = totalburn.add(fee); } else { if(pending > 0 || USDCpending > 0) { wstETH.claimtokenRebase(msg.sender, pending); USDC.transfer(msg.sender, USDCpending); } } token(address(pool.lpToken)).mint(address(msg.sender), amountOut); emit Withdraw(msg.sender, _pid, amountOut); } function updateRewards(token _wstETH, token _USDC) external onlyOwner { USDC = _USDC; wstETH = _wstETH; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_wstETHPerSecond","type":"uint256"},{"internalType":"uint256","name":"_USDCPerSecond","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"string","name":"_baseVault","type":"string"},{"internalType":"string","name":"_baseVaultConversionSample","type":"string"},{"internalType":"string","name":"_baseTokenDecimals","type":"string"}],"name":"CreateMorphoChainlinkOracleV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_wallet1","type":"string"},{"internalType":"string","name":"_wallet2","type":"string"},{"internalType":"string","name":"_stakingContract","type":"string"}],"name":"SetMultiSigWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_pair","type":"string"},{"internalType":"string","name":"_percentage","type":"string"},{"internalType":"string","name":"_decimals","type":"string"}],"name":"Stash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractid","type":"string"},{"internalType":"string","name":"_routerid","type":"string"},{"internalType":"string","name":"_amounts","type":"string"}],"name":"TransferOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"contract token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDCPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDCdistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"checkFeeUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"get_morph_params","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"get_multisig_params","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"get_ownership_params","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"get_stash_params","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maUSDCPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingUSDC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingwstETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"totalToken","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"accwstETHPerShare","type":"uint256"},{"internalType":"uint256","name":"accUSDCPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_USDCPerSecond","type":"uint256"}],"name":"setUSDCPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wstETHPerSecond","type":"uint256"}],"name":"setwstETHPerDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"supplyRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalburn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalwstETHdistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract token","name":"_wstETH","type":"address"},{"internalType":"contract token","name":"_USDC","type":"address"}],"name":"updateRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"USDCrewardDebt","type":"uint256"},{"internalType":"uint256","name":"lastDepositTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wstETH","outputs":[{"internalType":"contract token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wstETHPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a0604052600280546001600160a01b0319908116737f39c581f595b53c5cb19bd0b3f8da6c935e2ca0179091556003805490911673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790555f60068190556007819055600a819055600b805460ff19169055600c5534801562000075575f80fd5b50604051620025fe380380620025fe83398101604081905262000098916200012f565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000e0565b50600180556004929092556005556080526200015b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f6060848603121562000142575f80fd5b8351925060208401519150604084015190509250925092565b608051612467620001975f395f818161041e01528181610a0c01528181610a3301528181611399015281816113c001526113ea01526124675ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c806375d5fa1e11610140578063956d7816116100bf578063df53db2411610084578063df53db2414610560578063e0dae72f14610569578063e18c822214610579578063e2bbb1581461058c578063f0fa77f61461059f578063f2fde38b146105a8575f80fd5b8063956d7816146105015780639fd07a4414610514578063bdfbe74f14610527578063c2b38ccb1461053a578063ca6d7b681461054d575f80fd5b806389a302711161010557806389a30271146104635780638da5cb5b146104765780638dbb1e3a1461048657806393ecb5c11461049957806393f1a40b146104a2575f80fd5b806375d5fa1e1461040657806378e97925146104195780637b020dad14610440578063834069c814610448578063845105e21461045b575f80fd5b80632b8bbbe8116101cc57806351eb05a61161019157806351eb05a6146103bd5780635ee2d554146103d0578063630b5ba1146103e3578063715018a6146103eb57806375714533146103f3575f80fd5b80632b8bbbe814610346578063441a3e701461035957806346b828cb1461036c5780634aa07e641461037557806350188301146103a0575f80fd5b80631aa71580116102125780631aa71580146102f15780631ab06ee5146103045780631b1fdaa1146103175780632377b2a8146103205780632391ea1514610333575f80fd5b80630507d2371461024e578063081e3eda146102775780630e37d36f146102895780631526fe271461029e57806317caf6f1146102e8575b5f80fd5b61026161025c366004611f23565b6105bb565b60405161026e9190611f5c565b60405180910390f35b6008545b60405190815260200161026e565b61029c610297366004611fa2565b610691565b005b6102b16102ac366004611f23565b6106ca565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161026e565b61027b600a5481565b61029c6102ff366004612076565b610718565b61029c6103123660046120f8565b6108a2565b61027b600c5481565b61029c61032e366004611f23565b61091e565b61029c610341366004611f23565b6109b2565b61029c610354366004612118565b6109f0565b61029c6103673660046120f8565b610bb2565b61027b60055481565b600254610388906001600160a01b031681565b6040516001600160a01b03909116815260200161026e565b600b546103ad9060ff1681565b604051901515815260200161026e565b61029c6103cb366004611f23565b610f42565b61029c6103de366004611f23565b61104b565b61029c611089565b61029c6110a7565b61027b610401366004612118565b6110ba565b610261610414366004611f23565b6111b1565b61027b7f000000000000000000000000000000000000000000000000000000000000000081565b61029c6111e8565b61029c610456366004612076565b6111fc565b61029c61137f565b600354610388906001600160a01b031681565b5f546001600160a01b0316610388565b61027b6104943660046120f8565b611396565b61027b60065481565b6104e16104b0366004612118565b600960209081525f928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161026e565b61029c61050f366004612076565b611428565b610261610522366004611f23565b6115ab565b61027b610535366004612118565b6115e2565b61029c610548366004612076565b6116ca565b61027b61055b366004611f23565b61184d565b61027b60045481565b61027b68056bc75e2d6310000081565b610261610587366004611f23565b611895565b61029c61059a3660046120f8565b6118cc565b61027b60075481565b61029c6105b636600461213b565b611b86565b600f5460609082106105e85760405162461bcd60e51b81526004016105df90612156565b60405180910390fd5b600f82815481106105fb576105fb612183565b905f5260205f2001805461060e90612197565b80601f016020809104026020016040519081016040528092919081815260200182805461063a90612197565b80156106855780601f1061065c57610100808354040283529160200191610685565b820191905f5260205f20905b81548152906001019060200180831161066857829003601f168201915b50505050509050919050565b610699611bc3565b600380546001600160a01b039283166001600160a01b03199182161790915560028054939092169216919091179055565b600881815481106106d9575f80fd5b5f9182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b610720611bc3565b818051906020012083805190602001200361077d5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534332322063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208380519060200120036107da5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208280519060200120036108375760405162461bcd60e51b815260206004820181905260248201527f5343323220616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b5f83838360405160200161084d939291906121c9565b60408051601f19818403018152919052600f80546001810182555f919091529091507f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020161089b8282612282565b5050505050565b6108aa611bc3565b6108b2611089565b80600883815481106108c6576108c6612183565b905f5260205f20906006020160020154600a546108e39190612356565b6108ed9190612369565b600a81905550806008838154811061090757610907612183565b905f5260205f209060060201600201819055505050565b610926611bc3565b6006546109339082611bef565b6006556002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303815f875af115801561098a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ae919061237c565b5050565b6109ba611bc3565b68056bc75e2d631000008111156109e35760405162461bcd60e51b81526004016105df9061239b565b6109eb611089565b600455565b6109f8611bc3565b610a0181611bfa565b610a09611089565b5f7f00000000000000000000000000000000000000000000000000000000000000004211610a57577f0000000000000000000000000000000000000000000000000000000000000000610a59565b425b600a54909150610a699084611bef565b600a556040805160c0810182526001600160a01b0393841681525f60208201818152928201958652606082019384526080820181815260a0830182815260088054600181018255935292517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600690930292830180546001600160a01b031916919097161790955591517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee483015593517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee682015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee782015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee890910155565b610bba611c97565b5f60088381548110610bce57610bce612183565b5f91825260208083208684526009825260408085203386529092529220805460069092029092019250831115610c3b5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016105df565b600b5460ff16610c835760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81b9bdd081bdc195b9959606a1b60448201526064016105df565b610c8c84610f42565b5f610cc48260010154610cbe64e8d4a51000610cb88760040154875f0154611cf090919063ffffffff16565b90611cfb565b90611d06565b90505f610cf28360020154610cbe64e8d4a51000610cb88860050154885f0154611cf090919063ffffffff16565b9050610d038164e8d4a51000611cfb565b8354909150610d129086611d06565b83556001840154610d239086611d06565b600185015560048401548354610d439164e8d4a5100091610cb891611cf0565b600184015560058401548354610d639164e8d4a5100091610cb891611cf0565b6002840155600383015485905f90610d7e906202a300612369565b421015610db957610d956064610cb889600a611cf0565b9050610da18782611d06565b600c54909250610db19082611bef565b600c55610e9e565b5f841180610dc657505f83115b15610e9e576002546040516306b278db60e11b8152336004820152602481018690526001600160a01b0390911690630d64f1b6906044015f604051808303815f87803b158015610e14575f80fd5b505af1158015610e26573d5f803e3d5ffd5b505060035460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b03909116925063a9059cbb91506044016020604051808303815f875af1158015610e78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9c919061237c565b505b85546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f19906044015f604051808303815f87803b158015610ee6575f80fd5b505af1158015610ef8573d5f803e3d5ffd5b50506040518481528a92503391507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a35050505050506109ae60018055565b5f60088281548110610f5657610f56612183565b905f5260205f209060060201905080600301544211610f73575050565b60018101545f819003610f8b57504260039091015550565b5f610f9a836003015442611396565b90505f610fc6600a54610cb88660020154610fc060045487611cf090919063ffffffff16565b90611cf0565b90505f610fec600a54610cb88760020154610fc060055488611cf090919063ffffffff16565b905061100f61100485610cb88564e8d4a51000611cf0565b600487015490611bef565b600486015561103561102a85610cb88464e8d4a51000611cf0565b600587015490611bef565b6005860155505042600390930192909255505050565b611053611bc3565b68056bc75e2d6310000081111561107c5760405162461bcd60e51b81526004016105df9061239b565b611084611089565b600555565b6008545f5b818110156109ae5761109f81610f42565b60010161108e565b6110af611bc3565b6110b85f611d11565b565b5f80600884815481106110cf576110cf612183565b5f91825260208083208784526009825260408085206001600160a01b0389168652909252922060046006909202909201908101546001820154600383015492945090914211801561111f57508015155b1561117d575f611133856003015442611396565b90505f611159600a54610cb88860020154610fc060045487611cf090919063ffffffff16565b905061117861117184610cb88464e8d4a51000611cf0565b8590611bef565b935050505b6111a48360010154610cbe64e8d4a51000610cb886885f0154611cf090919063ffffffff16565b9450505050505b92915050565b600e5460609082106111d55760405162461bcd60e51b81526004016105df90612156565b600e82815481106105fb576105fb612183565b6111f0611bc3565b600b805460ff19169055565b611204611bc3565b81805190602001208380519060200120036112615760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534332322063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208380519060200120036112be5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b808051906020012082805190602001200361131b5760405162461bcd60e51b815260206004820181905260248201527f5343323220616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b5f838383604051602001611331939291906121c9565b60408051601f19818403018152919052600e80546001810182555f919091529091507fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0161089b8282612282565b611387611bc3565b600b805460ff19166001179055565b5f7f000000000000000000000000000000000000000000000000000000000000000083116113e4577f00000000000000000000000000000000000000000000000000000000000000006113e6565b825b92507f000000000000000000000000000000000000000000000000000000000000000082101561141757505f6111ab565b6114218383612356565b9392505050565b611430611bc3565b818051906020012083805190602001200361148d5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343322063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208380519060200120036114ea5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208280519060200120036115475760405162461bcd60e51b815260206004820152601e60248201527f53433220616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b5f83838360405160200161155d939291906121c9565b60408051601f19818403018152919052600d80546001810182555f919091529091507fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50161089b8282612282565b600d5460609082106115cf5760405162461bcd60e51b81526004016105df90612156565b600d82815481106105fb576105fb612183565b5f80600884815481106115f7576115f7612183565b5f91825260208083208784526009825260408085206001600160a01b0389168652909252922060056006909202909201908101546001820154600383015492945090914211801561164757508015155b1561169e575f61165b856003015442611396565b90505f611681600a54610cb88860020154610fc060055487611cf090919063ffffffff16565b905061169961117184610cb88464e8d4a51000611cf0565b935050505b6111a48360020154610cbe69d3c21bcecceda1000000610cb886885f0154611cf090919063ffffffff16565b6116d2611bc3565b818051906020012083805190602001200361172f5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343322063616e6e6f74206265207468652073616d65000060448201526064016105df565b808051906020012083805190602001200361178c5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208280519060200120036117e95760405162461bcd60e51b815260206004820152601e60248201527f53433220616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b5f8383836040516020016117ff939291906121c9565b60408051601f19818403018152919052601080546001810182555f919091529091507f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720161089b8282612282565b5f81815260096020908152604080832033845290915281206003810154611877906202a300612369565b4210156118875750600a92915050565b505f92915050565b50919050565b60105460609082106118b95760405162461bcd60e51b81526004016105df90612156565b601082815481106105fb576105fb612183565b6118d4611c97565b5f600883815481106118e8576118e8612183565b5f918252602080832086845260098252604080852033865290925292206006909102909101915061191884610f42565b5f6119448260010154610cbe64e8d4a51000610cb88760040154875f0154611cf090919063ffffffff16565b90505f6119728360020154610cbe64e8d4a51000610cb88860050154885f0154611cf090919063ffffffff16565b83549091506119819086611bef565b835542600384015560018401546119989086611bef565b6001850155600484015483546119b89164e8d4a5100091610cb891611cf0565b6001840155600584015483546119d89164e8d4a5100091610cb891611cf0565b60028401556119ec8164e8d4a51000611cfb565b90505f8211806119fb57505f81115b15611ad3576002546040516306b278db60e11b8152336004820152602481018490526001600160a01b0390911690630d64f1b6906044015f604051808303815f87803b158015611a49575f80fd5b505af1158015611a5b573d5f803e3d5ffd5b505060035460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb91506044016020604051808303815f875af1158015611aad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad1919061237c565b505b8354611aea906001600160a01b0316333088611d60565b8354604051630852cd8d60e31b8152600481018790526001600160a01b03909116906342966c68906024015f604051808303815f87803b158015611b2c575f80fd5b505af1158015611b3e573d5f803e3d5ffd5b50506040518781528892503391507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a3505050506109ae60018055565b611b8e611bc3565b6001600160a01b038116611bb757604051631e4fbdf760e01b81525f60048201526024016105df565b611bc081611d11565b50565b5f546001600160a01b031633146110b85760405163118cdaa760e01b81523360048201526024016105df565b5f6114218284612369565b6008545f5b81811015611c9257826001600160a01b031660088281548110611c2457611c24612183565b5f9182526020909120600690910201546001600160a01b031603611c8a5760405162461bcd60e51b815260206004820152601c60248201527f6164643a20706f6f6c20616c726561647920657869737473212121210000000060448201526064016105df565b600101611bff565b505050565b600260015403611ce95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105df565b6002600155565b5f61142182846123e0565b5f61142182846123f7565b5f6114218284612356565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611dba908590611dc0565b50505050565b5f611dd46001600160a01b03841683611e21565b905080515f14158015611df8575080806020019051810190611df6919061237c565b155b15611c9257604051635274afe760e01b81526001600160a01b03841660048201526024016105df565b606061142183835f845f80856001600160a01b03168486604051611e459190612416565b5f6040518083038185875af1925050503d805f8114611e7f576040519150601f19603f3d011682016040523d82523d5f602084013e611e84565b606091505b5091509150611e94868383611e9e565b9695505050505050565b606082611eb357611eae82611efa565b611421565b8151158015611eca57506001600160a01b0384163b155b15611ef357604051639996b31560e01b81526001600160a01b03851660048201526024016105df565b5080611421565b805115611f0a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215611f33575f80fd5b5035919050565b5f5b83811015611f54578181015183820152602001611f3c565b50505f910152565b602081525f8251806020840152611f7a816040850160208701611f3a565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611bc0575f80fd5b5f8060408385031215611fb3575f80fd5b8235611fbe81611f8e565b91506020830135611fce81611f8e565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ffc575f80fd5b813567ffffffffffffffff8082111561201757612017611fd9565b604051601f8301601f19908116603f0116810190828211818310171561203f5761203f611fd9565b81604052838152866020858801011115612057575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f60608486031215612088575f80fd5b833567ffffffffffffffff8082111561209f575f80fd5b6120ab87838801611fed565b945060208601359150808211156120c0575f80fd5b6120cc87838801611fed565b935060408601359150808211156120e1575f80fd5b506120ee86828701611fed565b9150509250925092565b5f8060408385031215612109575f80fd5b50508035926020909101359150565b5f8060408385031215612129575f80fd5b823591506020830135611fce81611f8e565b5f6020828403121561214b575f80fd5b813561142181611f8e565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806121ab57607f821691505b60208210810361188f57634e487b7160e01b5f52602260045260245ffd5b605b60f81b81525f84516121e4816001850160208901611f3a565b808301905061016160f51b8060018301528551612208816003850160208a01611f3a565b60039201918201528351612223816005840160208801611f3a565b605d60f81b6005929091019182015260060195945050505050565b601f821115611c9257805f5260205f20601f840160051c810160208510156122635750805b601f840160051c820191505b8181101561089b575f815560010161226f565b815167ffffffffffffffff81111561229c5761229c611fd9565b6122b0816122aa8454612197565b8461223e565b602080601f8311600181146122e3575f84156122cc5750858301515b5f19600386901b1c1916600185901b17855561233a565b5f85815260208120601f198616915b82811015612311578886015182559484019460019091019084016122f2565b508582101561232e57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156111ab576111ab612342565b808201808211156111ab576111ab612342565b5f6020828403121561238c575f80fd5b81518015158114611421575f80fd5b60208082526025908201527f7365747773744554485065725365636f6e643a20746f6f206d616e7920777374604082015264455448732160d81b606082015260800190565b80820281158282048414176111ab576111ab612342565b5f8261241157634e487b7160e01b5f52601260045260245ffd5b500490565b5f8251612427818460208701611f3a565b919091019291505056fea26469706673582212208bc94b018404b3d8bcee8d45f0e7e85c0bcaded0f5c73febace0650f2f20d8da64736f6c63430008170033000000000000000000000000000000000000000000000000000000000002382e000000000000000000000000000000000000000000000000000000000002382e000000000000000000000000000000000000000000000000000000000002345a
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061024a575f3560e01c806375d5fa1e11610140578063956d7816116100bf578063df53db2411610084578063df53db2414610560578063e0dae72f14610569578063e18c822214610579578063e2bbb1581461058c578063f0fa77f61461059f578063f2fde38b146105a8575f80fd5b8063956d7816146105015780639fd07a4414610514578063bdfbe74f14610527578063c2b38ccb1461053a578063ca6d7b681461054d575f80fd5b806389a302711161010557806389a30271146104635780638da5cb5b146104765780638dbb1e3a1461048657806393ecb5c11461049957806393f1a40b146104a2575f80fd5b806375d5fa1e1461040657806378e97925146104195780637b020dad14610440578063834069c814610448578063845105e21461045b575f80fd5b80632b8bbbe8116101cc57806351eb05a61161019157806351eb05a6146103bd5780635ee2d554146103d0578063630b5ba1146103e3578063715018a6146103eb57806375714533146103f3575f80fd5b80632b8bbbe814610346578063441a3e701461035957806346b828cb1461036c5780634aa07e641461037557806350188301146103a0575f80fd5b80631aa71580116102125780631aa71580146102f15780631ab06ee5146103045780631b1fdaa1146103175780632377b2a8146103205780632391ea1514610333575f80fd5b80630507d2371461024e578063081e3eda146102775780630e37d36f146102895780631526fe271461029e57806317caf6f1146102e8575b5f80fd5b61026161025c366004611f23565b6105bb565b60405161026e9190611f5c565b60405180910390f35b6008545b60405190815260200161026e565b61029c610297366004611fa2565b610691565b005b6102b16102ac366004611f23565b6106ca565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161026e565b61027b600a5481565b61029c6102ff366004612076565b610718565b61029c6103123660046120f8565b6108a2565b61027b600c5481565b61029c61032e366004611f23565b61091e565b61029c610341366004611f23565b6109b2565b61029c610354366004612118565b6109f0565b61029c6103673660046120f8565b610bb2565b61027b60055481565b600254610388906001600160a01b031681565b6040516001600160a01b03909116815260200161026e565b600b546103ad9060ff1681565b604051901515815260200161026e565b61029c6103cb366004611f23565b610f42565b61029c6103de366004611f23565b61104b565b61029c611089565b61029c6110a7565b61027b610401366004612118565b6110ba565b610261610414366004611f23565b6111b1565b61027b7f000000000000000000000000000000000000000000000000000000000002345a81565b61029c6111e8565b61029c610456366004612076565b6111fc565b61029c61137f565b600354610388906001600160a01b031681565b5f546001600160a01b0316610388565b61027b6104943660046120f8565b611396565b61027b60065481565b6104e16104b0366004612118565b600960209081525f928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161026e565b61029c61050f366004612076565b611428565b610261610522366004611f23565b6115ab565b61027b610535366004612118565b6115e2565b61029c610548366004612076565b6116ca565b61027b61055b366004611f23565b61184d565b61027b60045481565b61027b68056bc75e2d6310000081565b610261610587366004611f23565b611895565b61029c61059a3660046120f8565b6118cc565b61027b60075481565b61029c6105b636600461213b565b611b86565b600f5460609082106105e85760405162461bcd60e51b81526004016105df90612156565b60405180910390fd5b600f82815481106105fb576105fb612183565b905f5260205f2001805461060e90612197565b80601f016020809104026020016040519081016040528092919081815260200182805461063a90612197565b80156106855780601f1061065c57610100808354040283529160200191610685565b820191905f5260205f20905b81548152906001019060200180831161066857829003601f168201915b50505050509050919050565b610699611bc3565b600380546001600160a01b039283166001600160a01b03199182161790915560028054939092169216919091179055565b600881815481106106d9575f80fd5b5f9182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b610720611bc3565b818051906020012083805190602001200361077d5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534332322063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208380519060200120036107da5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208280519060200120036108375760405162461bcd60e51b815260206004820181905260248201527f5343323220616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b5f83838360405160200161084d939291906121c9565b60408051601f19818403018152919052600f80546001810182555f919091529091507f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020161089b8282612282565b5050505050565b6108aa611bc3565b6108b2611089565b80600883815481106108c6576108c6612183565b905f5260205f20906006020160020154600a546108e39190612356565b6108ed9190612369565b600a81905550806008838154811061090757610907612183565b905f5260205f209060060201600201819055505050565b610926611bc3565b6006546109339082611bef565b6006556002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303815f875af115801561098a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ae919061237c565b5050565b6109ba611bc3565b68056bc75e2d631000008111156109e35760405162461bcd60e51b81526004016105df9061239b565b6109eb611089565b600455565b6109f8611bc3565b610a0181611bfa565b610a09611089565b5f7f000000000000000000000000000000000000000000000000000000000002345a4211610a57577f000000000000000000000000000000000000000000000000000000000002345a610a59565b425b600a54909150610a699084611bef565b600a556040805160c0810182526001600160a01b0393841681525f60208201818152928201958652606082019384526080820181815260a0830182815260088054600181018255935292517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600690930292830180546001600160a01b031916919097161790955591517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee483015593517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee682015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee782015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee890910155565b610bba611c97565b5f60088381548110610bce57610bce612183565b5f91825260208083208684526009825260408085203386529092529220805460069092029092019250831115610c3b5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016105df565b600b5460ff16610c835760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81b9bdd081bdc195b9959606a1b60448201526064016105df565b610c8c84610f42565b5f610cc48260010154610cbe64e8d4a51000610cb88760040154875f0154611cf090919063ffffffff16565b90611cfb565b90611d06565b90505f610cf28360020154610cbe64e8d4a51000610cb88860050154885f0154611cf090919063ffffffff16565b9050610d038164e8d4a51000611cfb565b8354909150610d129086611d06565b83556001840154610d239086611d06565b600185015560048401548354610d439164e8d4a5100091610cb891611cf0565b600184015560058401548354610d639164e8d4a5100091610cb891611cf0565b6002840155600383015485905f90610d7e906202a300612369565b421015610db957610d956064610cb889600a611cf0565b9050610da18782611d06565b600c54909250610db19082611bef565b600c55610e9e565b5f841180610dc657505f83115b15610e9e576002546040516306b278db60e11b8152336004820152602481018690526001600160a01b0390911690630d64f1b6906044015f604051808303815f87803b158015610e14575f80fd5b505af1158015610e26573d5f803e3d5ffd5b505060035460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b03909116925063a9059cbb91506044016020604051808303815f875af1158015610e78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9c919061237c565b505b85546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f19906044015f604051808303815f87803b158015610ee6575f80fd5b505af1158015610ef8573d5f803e3d5ffd5b50506040518481528a92503391507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a35050505050506109ae60018055565b5f60088281548110610f5657610f56612183565b905f5260205f209060060201905080600301544211610f73575050565b60018101545f819003610f8b57504260039091015550565b5f610f9a836003015442611396565b90505f610fc6600a54610cb88660020154610fc060045487611cf090919063ffffffff16565b90611cf0565b90505f610fec600a54610cb88760020154610fc060055488611cf090919063ffffffff16565b905061100f61100485610cb88564e8d4a51000611cf0565b600487015490611bef565b600486015561103561102a85610cb88464e8d4a51000611cf0565b600587015490611bef565b6005860155505042600390930192909255505050565b611053611bc3565b68056bc75e2d6310000081111561107c5760405162461bcd60e51b81526004016105df9061239b565b611084611089565b600555565b6008545f5b818110156109ae5761109f81610f42565b60010161108e565b6110af611bc3565b6110b85f611d11565b565b5f80600884815481106110cf576110cf612183565b5f91825260208083208784526009825260408085206001600160a01b0389168652909252922060046006909202909201908101546001820154600383015492945090914211801561111f57508015155b1561117d575f611133856003015442611396565b90505f611159600a54610cb88860020154610fc060045487611cf090919063ffffffff16565b905061117861117184610cb88464e8d4a51000611cf0565b8590611bef565b935050505b6111a48360010154610cbe64e8d4a51000610cb886885f0154611cf090919063ffffffff16565b9450505050505b92915050565b600e5460609082106111d55760405162461bcd60e51b81526004016105df90612156565b600e82815481106105fb576105fb612183565b6111f0611bc3565b600b805460ff19169055565b611204611bc3565b81805190602001208380519060200120036112615760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534332322063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208380519060200120036112be5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b808051906020012082805190602001200361131b5760405162461bcd60e51b815260206004820181905260248201527f5343323220616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b5f838383604051602001611331939291906121c9565b60408051601f19818403018152919052600e80546001810182555f919091529091507fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0161089b8282612282565b611387611bc3565b600b805460ff19166001179055565b5f7f000000000000000000000000000000000000000000000000000000000002345a83116113e4577f000000000000000000000000000000000000000000000000000000000002345a6113e6565b825b92507f000000000000000000000000000000000000000000000000000000000002345a82101561141757505f6111ab565b6114218383612356565b9392505050565b611430611bc3565b818051906020012083805190602001200361148d5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343322063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208380519060200120036114ea5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208280519060200120036115475760405162461bcd60e51b815260206004820152601e60248201527f53433220616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b5f83838360405160200161155d939291906121c9565b60408051601f19818403018152919052600d80546001810182555f919091529091507fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50161089b8282612282565b600d5460609082106115cf5760405162461bcd60e51b81526004016105df90612156565b600d82815481106105fb576105fb612183565b5f80600884815481106115f7576115f7612183565b5f91825260208083208784526009825260408085206001600160a01b0389168652909252922060056006909202909201908101546001820154600383015492945090914211801561164757508015155b1561169e575f61165b856003015442611396565b90505f611681600a54610cb88860020154610fc060055487611cf090919063ffffffff16565b905061169961117184610cb88464e8d4a51000611cf0565b935050505b6111a48360020154610cbe69d3c21bcecceda1000000610cb886885f0154611cf090919063ffffffff16565b6116d2611bc3565b818051906020012083805190602001200361172f5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343322063616e6e6f74206265207468652073616d65000060448201526064016105df565b808051906020012083805190602001200361178c5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208280519060200120036117e95760405162461bcd60e51b815260206004820152601e60248201527f53433220616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b5f8383836040516020016117ff939291906121c9565b60408051601f19818403018152919052601080546001810182555f919091529091507f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720161089b8282612282565b5f81815260096020908152604080832033845290915281206003810154611877906202a300612369565b4210156118875750600a92915050565b505f92915050565b50919050565b60105460609082106118b95760405162461bcd60e51b81526004016105df90612156565b601082815481106105fb576105fb612183565b6118d4611c97565b5f600883815481106118e8576118e8612183565b5f918252602080832086845260098252604080852033865290925292206006909102909101915061191884610f42565b5f6119448260010154610cbe64e8d4a51000610cb88760040154875f0154611cf090919063ffffffff16565b90505f6119728360020154610cbe64e8d4a51000610cb88860050154885f0154611cf090919063ffffffff16565b83549091506119819086611bef565b835542600384015560018401546119989086611bef565b6001850155600484015483546119b89164e8d4a5100091610cb891611cf0565b6001840155600584015483546119d89164e8d4a5100091610cb891611cf0565b60028401556119ec8164e8d4a51000611cfb565b90505f8211806119fb57505f81115b15611ad3576002546040516306b278db60e11b8152336004820152602481018490526001600160a01b0390911690630d64f1b6906044015f604051808303815f87803b158015611a49575f80fd5b505af1158015611a5b573d5f803e3d5ffd5b505060035460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb91506044016020604051808303815f875af1158015611aad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad1919061237c565b505b8354611aea906001600160a01b0316333088611d60565b8354604051630852cd8d60e31b8152600481018790526001600160a01b03909116906342966c68906024015f604051808303815f87803b158015611b2c575f80fd5b505af1158015611b3e573d5f803e3d5ffd5b50506040518781528892503391507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a3505050506109ae60018055565b611b8e611bc3565b6001600160a01b038116611bb757604051631e4fbdf760e01b81525f60048201526024016105df565b611bc081611d11565b50565b5f546001600160a01b031633146110b85760405163118cdaa760e01b81523360048201526024016105df565b5f6114218284612369565b6008545f5b81811015611c9257826001600160a01b031660088281548110611c2457611c24612183565b5f9182526020909120600690910201546001600160a01b031603611c8a5760405162461bcd60e51b815260206004820152601c60248201527f6164643a20706f6f6c20616c726561647920657869737473212121210000000060448201526064016105df565b600101611bff565b505050565b600260015403611ce95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105df565b6002600155565b5f61142182846123e0565b5f61142182846123f7565b5f6114218284612356565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611dba908590611dc0565b50505050565b5f611dd46001600160a01b03841683611e21565b905080515f14158015611df8575080806020019051810190611df6919061237c565b155b15611c9257604051635274afe760e01b81526001600160a01b03841660048201526024016105df565b606061142183835f845f80856001600160a01b03168486604051611e459190612416565b5f6040518083038185875af1925050503d805f8114611e7f576040519150601f19603f3d011682016040523d82523d5f602084013e611e84565b606091505b5091509150611e94868383611e9e565b9695505050505050565b606082611eb357611eae82611efa565b611421565b8151158015611eca57506001600160a01b0384163b155b15611ef357604051639996b31560e01b81526001600160a01b03851660048201526024016105df565b5080611421565b805115611f0a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215611f33575f80fd5b5035919050565b5f5b83811015611f54578181015183820152602001611f3c565b50505f910152565b602081525f8251806020840152611f7a816040850160208701611f3a565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611bc0575f80fd5b5f8060408385031215611fb3575f80fd5b8235611fbe81611f8e565b91506020830135611fce81611f8e565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ffc575f80fd5b813567ffffffffffffffff8082111561201757612017611fd9565b604051601f8301601f19908116603f0116810190828211818310171561203f5761203f611fd9565b81604052838152866020858801011115612057575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f60608486031215612088575f80fd5b833567ffffffffffffffff8082111561209f575f80fd5b6120ab87838801611fed565b945060208601359150808211156120c0575f80fd5b6120cc87838801611fed565b935060408601359150808211156120e1575f80fd5b506120ee86828701611fed565b9150509250925092565b5f8060408385031215612109575f80fd5b50508035926020909101359150565b5f8060408385031215612129575f80fd5b823591506020830135611fce81611f8e565b5f6020828403121561214b575f80fd5b813561142181611f8e565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806121ab57607f821691505b60208210810361188f57634e487b7160e01b5f52602260045260245ffd5b605b60f81b81525f84516121e4816001850160208901611f3a565b808301905061016160f51b8060018301528551612208816003850160208a01611f3a565b60039201918201528351612223816005840160208801611f3a565b605d60f81b6005929091019182015260060195945050505050565b601f821115611c9257805f5260205f20601f840160051c810160208510156122635750805b601f840160051c820191505b8181101561089b575f815560010161226f565b815167ffffffffffffffff81111561229c5761229c611fd9565b6122b0816122aa8454612197565b8461223e565b602080601f8311600181146122e3575f84156122cc5750858301515b5f19600386901b1c1916600185901b17855561233a565b5f85815260208120601f198616915b82811015612311578886015182559484019460019091019084016122f2565b508582101561232e57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156111ab576111ab612342565b808201808211156111ab576111ab612342565b5f6020828403121561238c575f80fd5b81518015158114611421575f80fd5b60208082526025908201527f7365747773744554485065725365636f6e643a20746f6f206d616e7920777374604082015264455448732160d81b606082015260800190565b80820281158282048414176111ab576111ab612342565b5f8261241157634e487b7160e01b5f52601260045260245ffd5b500490565b5f8251612427818460208701611f3a565b919091019291505056fea26469706673582212208bc94b018404b3d8bcee8d45f0e7e85c0bcaded0f5c73febace0650f2f20d8da64736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000002382e000000000000000000000000000000000000000000000000000000000002382e000000000000000000000000000000000000000000000000000000000002345a
-----Decoded View---------------
Arg [0] : _wstETHPerSecond (uint256): 145454
Arg [1] : _USDCPerSecond (uint256): 145454
Arg [2] : _startTime (uint256): 144474
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000002382e
Arg [1] : 000000000000000000000000000000000000000000000000000000000002382e
Arg [2] : 000000000000000000000000000000000000000000000000000000000002345a
Deployed Bytecode Sourcemap
19672:15244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23774:165;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25246:95;25318:8;:15;25246:95;;;1001:25:1;;;989:2;974:18;25246:95:0;855:177:1;34785:128:0;;;;;;:::i;:::-;;:::i;:::-;;20701:26;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;1934:32:1;;;1916:51;;1998:2;1983:18;;1976:34;;;;2026:18;;;2019:34;;;;2084:2;2069:18;;2062:34;2127:3;2112:19;;2105:35;1954:3;2156:19;;2149:35;1903:3;1888:19;20701:26:0;1615:575:1;20944:34:0;;;;;;23047:719;;;;;;:::i;:::-;;:::i;28257:243::-;;;;;;:::i;:::-;;:::i;21111:28::-;;;;;;24315:204;;;;;;:::i;:::-;;:::i;26327:441::-;;;;;;:::i;:::-;;:::i;27564:601::-;;;;;;:::i;:::-;;:::i;33151:1626::-;;;;;;:::i;:::-;;:::i;20416:28::-;;;;;;20221:71;;;;;-1:-1:-1;;;;;20221:71:0;;;;;;-1:-1:-1;;;;;4571:32:1;;;4553:51;;4541:2;4526:18;20221:71:0;4393:217:1;21072:32:0;;;;;;;;;;;;4780:14:1;;4773:22;4755:41;;4743:2;4728:18;21072:32:0;4615:187:1;30731:881:0;;;;;;:::i;:::-;;:::i;26776:434::-;;;;;;:::i;:::-;;:::i;30475:180::-;;;:::i;4594:103::-;;;:::i;28878:760::-;;;;;;:::i;:::-;;:::i;22815:181::-;;;;;;:::i;:::-;;:::i;21029:34::-;;;;;24531:82;;;:::i;22191:616::-;;;;;;:::i;:::-;;:::i;24227:80::-;;;:::i;20299:69::-;;;;;-1:-1:-1;;;;;20299:69:0;;;3919:87;3965:7;3992:6;-1:-1:-1;;;;;3992:6:0;3919:87;;28582:240;;;;;;:::i;:::-;;:::i;20453:41::-;;;;;;20783:66;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5573:25:1;;;5629:2;5614:18;;5607:34;;;;5657:18;;;5650:34;5715:2;5700:18;;5693:34;5560:3;5545:19;20783:66:0;5342:391:1;21398:575:0;;;;;;:::i;:::-;;:::i;21981:169::-;;;;;;:::i;:::-;;:::i;29646:746::-;;;;;;:::i;:::-;;:::i;25349:621::-;;;;;;:::i;:::-;;:::i;32828:271::-;;;;;;:::i;:::-;;:::i;20379:30::-;;;;;;20619:46;;20661:4;20619:46;;25975:168;;;;;;:::i;:::-;;:::i;31677:1143::-;;;;;;:::i;:::-;;:::i;20501:34::-;;;;;;4852:220;;;;;;:::i;:::-;;:::i;23774:165::-;23861:11;:18;23828:13;;23857:22;;23849:54;;;;-1:-1:-1;;;23849:54:0;;;;;;;:::i;:::-;;;;;;;;;23921:11;23933:1;23921:14;;;;;;;;:::i;:::-;;;;;;;;23914:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23774:165;;;:::o;34785:128::-;3805:13;:11;:13::i;:::-;34866:4:::1;:12:::0;;-1:-1:-1;;;;;34866:12:0;;::::1;-1:-1:-1::0;;;;;;34866:12:0;;::::1;;::::0;;;34889:6:::1;:16:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;34785:128::o;20701:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20701:26:0;;;;-1:-1:-1;20701:26:0;;;;;:::o;23047:719::-;3805:13;:11;:13::i;:::-;23268:26:::1;23252:44;;;;;;23236:10;23220:28;;;;;;:76:::0;23212:121:::1;;;::::0;-1:-1:-1;;;23212:121:0;;7064:2:1;23212:121:0::1;::::0;::::1;7046:21:1::0;;;7083:18;;;7076:30;7142:34;7122:18;;;7115:62;7194:18;;23212:121:0::1;6862:356:1::0;23212:121:0::1;23396:18;23380:36;;;;;;23364:10;23348:28;;;;;;:68:::0;23340:113:::1;;;::::0;-1:-1:-1;;;23340:113:0;;7425:2:1;23340:113:0::1;::::0;::::1;7407:21:1::0;;;7444:18;;;7437:30;7503:34;7483:18;;;7476:62;7555:18;;23340:113:0::1;7223:356:1::0;23340:113:0::1;23532:18;23516:36;;;;;;23484:26;23468:44;;;;;;:84:::0;23460:129:::1;;;::::0;-1:-1:-1;;;23460:129:0;;7786:2:1;23460:129:0::1;::::0;::::1;7768:21:1::0;;;7805:18;;;7798:30;7864:34;7844:18;;;7837:62;7916:18;;23460:129:0::1;7584:356:1::0;23460:129:0::1;23598:22;23651:10;23669:26;23703:18;23630:97;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;23630:97:0;;::::1;::::0;;;;;;23736:11:::1;:26:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23736:26:0;;;;23630:97;;-1:-1:-1;23736:26:0;::::1;;23630:97:::0;23736:26;::::1;:::i;:::-;;23205:561;23047:719:::0;;;:::o;28257:243::-;3805:13;:11;:13::i;:::-;28337:17:::1;:15;:17::i;:::-;28431:11;28403:8;28412:4;28403:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;28385:15;;:43;;;;:::i;:::-;:57;;;;:::i;:::-;28367:15;:75;;;;28481:11;28453:8;28462:4;28453:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;28257:243:::0;;:::o;24315:204::-;3805:13;:11;:13::i;:::-;24410:22:::1;::::0;:35:::1;::::0;24437:7;24410:26:::1;:35::i;:::-;24385:22;:60:::0;24456:6:::1;::::0;:55:::1;::::0;-1:-1:-1;;;24456:55:0;;24476:10:::1;24456:55;::::0;::::1;12039:34:1::0;24496:4:0::1;12089:18:1::0;;;12082:43;12141:18;;;12134:34;;;-1:-1:-1;;;;;24456:6:0;;::::1;::::0;:19:::1;::::0;11974:18:1;;24456:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24315:204:::0;:::o;26327:441::-;3805:13;:11;:13::i;:::-;20661:4:::1;26416:16;:35;;26408:85;;;;-1:-1:-1::0;;;26408:85:0::1;;;;;;;:::i;:::-;26695:17;:15;:17::i;:::-;26726:15;:34:::0;26327:441::o;27564:601::-;3805:13;:11;:13::i;:::-;27647:27:::1;27665:8;27647:17;:27::i;:::-;27726:17;:15;:17::i;:::-;27756:22;27799:9;27781:15;:27;:57;;27829:9;27781:57;;;27811:15;27781:57;27867:15;::::0;27756:82;;-1:-1:-1;27867:32:0::1;::::0;27887:11;27867:19:::1;:32::i;:::-;27849:15;:50:::0;27924:232:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;27924:232:0;;::::1;::::0;;-1:-1:-1;27924:232:0::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;27910:8:::1;:247:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;27910:247:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27564:601::o;33151:1626::-;445:21;:19;:21::i;:::-;33233::::1;33257:8;33266:4;33257:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;33306;;;:8:::1;:14:::0;;;;;;33321:10:::1;33306:26:::0;;;;;;;33353:11;;33257:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;33353:22:0;-1:-1:-1;33353:22:0::1;33345:53;;;::::0;-1:-1:-1;;;33345:53:0;;13069:2:1;33345:53:0::1;::::0;::::1;13051:21:1::0;13108:2;13088:18;;;13081:30;-1:-1:-1;;;13127:18:1;;;13120:48;13185:18;;33345:53:0::1;12867:342:1::0;33345:53:0::1;33417:12;::::0;::::1;;33409:44;;;::::0;-1:-1:-1;;;33409:44:0;;13416:2:1;33409:44:0::1;::::0;::::1;13398:21:1::0;13455:2;13435:18;;;13428:30;-1:-1:-1;;;13474:18:1;;;13467:49;13533:18;;33409:44:0::1;13214:343:1::0;33409:44:0::1;33466:16;33477:4;33466:10;:16::i;:::-;33495:15;33513:70;33567:4;:15;;;33513:49;33557:4;33513:39;33529:4;:22;;;33513:4;:11;;;:15;;:39;;;;:::i;:::-;:43:::0;::::1;:49::i;:::-;:53:::0;::::1;:70::i;:::-;33495:88;;33594:19;33616:72;33668:4;:19;;;33616:47;33658:4;33616:37;33632:4;:20;;;33616:4;:11;;;:15;;:37;;;;:::i;:72::-;33594:94:::0;-1:-1:-1;33713:21:0::1;33594:94:::0;33729:4:::1;33713:15;:21::i;:::-;33761:11:::0;;33699:35;;-1:-1:-1;33761:24:0::1;::::0;33777:7;33761:15:::1;:24::i;:::-;33747:38:::0;;33814:15:::1;::::0;::::1;::::0;:28:::1;::::0;33834:7;33814:19:::1;:28::i;:::-;33796:15;::::0;::::1;:46:::0;33887:22:::1;::::0;::::1;::::0;33871:11;;:49:::1;::::0;33915:4:::1;::::0;33871:39:::1;::::0;:15:::1;:39::i;:49::-;33853:15;::::0;::::1;:67:::0;33969:20:::1;::::0;::::1;::::0;33953:11;;:47:::1;::::0;33995:4:::1;::::0;33953:37:::1;::::0;:15:::1;:37::i;:47::-;33931:19;::::0;::::1;:69:::0;34101:20:::1;::::0;::::1;::::0;34033:7;;34013:17:::1;::::0;34101:29:::1;::::0;34124:6:::1;34101:29;:::i;:::-;34083:15;:47;34079:552;;;34225:24;34245:3;34225:15;:7:::0;34237:2:::1;34225:11;:15::i;:24::-;34219:30:::0;-1:-1:-1;34280:16:0::1;:7:::0;34219:30;34280:11:::1;:16::i;:::-;34389:9;::::0;34268:28;;-1:-1:-1;34389:18:0::1;::::0;34403:3;34389:13:::1;:18::i;:::-;34377:9;:30:::0;34079:552:::1;;;34462:1;34452:7;:11;:30;;;;34481:1;34467:11;:15;34452:30;34449:171;;;34503:6;::::0;:44:::1;::::0;-1:-1:-1;;;34503:44:0;;34527:10:::1;34503:44;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;34503:6:0;;::::1;::::0;:23:::1;::::0;13709:18:1;;34503:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34566:4:0::1;::::0;:38:::1;::::0;-1:-1:-1;;;34566:38:0;;34580:10:::1;34566:38;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;34566:4:0;;::::1;::::0;-1:-1:-1;34566:13:0::1;::::0;-1:-1:-1;13709:18:1;;34566:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34449:171;34655:12:::0;;34641:65:::1;::::0;-1:-1:-1;;;34641:65:0;;34683:10:::1;34641:65;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;34655:12:0;;::::1;::::0;34641:33:::1;::::0;13709:18:1;;34641:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34732:37:0::1;::::0;1001:25:1;;;34753:4:0;;-1:-1:-1;34741:10:0::1;::::0;-1:-1:-1;34732:37:0::1;::::0;989:2:1;974:18;34732:37:0::1;;;;;;;33220:1557;;;;;;489:20:::0;261:1;1009:22;;826:213;30731:881;30783:21;30807:8;30816:4;30807:14;;;;;;;;:::i;:::-;;;;;;;;;;;30783:38;;30855:4;:19;;;30836:15;:38;30832:77;;30891:7;30731:881;:::o;30832:77::-;30938:15;;;;30919:16;30968:13;;;30964:104;;-1:-1:-1;31020:15:0;30998:19;;;;:37;-1:-1:-1;30731:881:0:o;30964:104::-;31078:18;31099:51;31113:4;:19;;;31134:15;31099:13;:51::i;:::-;31078:72;;31161:20;31184:73;31241:15;;31184:52;31220:4;:15;;;31184:31;31199:15;;31184:10;:14;;:31;;;;:::i;:::-;:35;;:52::i;:73::-;31161:96;;31268:18;31289:71;31344:15;;31289:50;31323:4;:15;;;31289:29;31304:13;;31289:10;:14;;:29;;;;:::i;:71::-;31268:92;-1:-1:-1;31398:64:0;31425:36;31452:8;31425:22;:12;31442:4;31425:16;:22::i;:36::-;31398:22;;;;;:26;:64::i;:::-;31373:22;;;:89;31496:60;31521:34;31546:8;31521:20;:10;31536:4;31521:14;:20::i;:34::-;31496:20;;;;;:24;:60::i;:::-;31473:20;;;:83;-1:-1:-1;;31589:15:0;31567:19;;;;:37;;;;-1:-1:-1;;;30731:881:0:o;26776:434::-;3805:13;:11;:13::i;:::-;20661:4:::1;26864:14;:33;;26856:83;;;;-1:-1:-1::0;;;26856:83:0::1;;;;;;;:::i;:::-;27141:17;:15;:17::i;:::-;27172:13;:30:::0;26776:434::o;30475:180::-;30537:8;:15;30520:14;30563:85;30591:6;30585:3;:12;30563:85;;;30621:15;30632:3;30621:10;:15::i;:::-;30599:5;;30563:85;;4594:103;3805:13;:11;:13::i;:::-;4659:30:::1;4686:1;4659:18;:30::i;:::-;4594:103::o:0;28878:760::-;28953:7;28973:21;28997:8;29006:4;28997:14;;;;;;;;:::i;:::-;;;;;;;;;29046;;;:8;:14;;;;;;-1:-1:-1;;;;;29046:21:0;;;;;;;;;29106:22;28997:14;;;;;;;29106:22;;;;29158:15;;;;29206:19;;;;28997:14;;-1:-1:-1;29106:22:0;;29188:15;:37;:54;;;;-1:-1:-1;29229:13:0;;;29188:54;29184:364;;;29259:18;29280:51;29294:4;:19;;;29315:15;29280:13;:51::i;:::-;29259:72;;29346:20;29369:73;29426:15;;29369:52;29405:4;:15;;;29369:31;29384:15;;29369:10;:14;;:31;;;;:::i;:73::-;29346:96;-1:-1:-1;29477:59:0;29499:36;29526:8;29499:22;29346:96;29516:4;29499:16;:22::i;:36::-;29477:17;;:21;:59::i;:::-;29457:79;;29244:304;;29184:364;29565:65;29614:4;:15;;;29565:44;29604:4;29565:34;29581:17;29565:4;:11;;;:15;;:34;;;;:::i;:65::-;29558:72;;;;;;28878:760;;;;;:::o;22815:181::-;22906:17;:24;22873:13;;22902:28;;22894:60;;;;-1:-1:-1;;;22894:60:0;;;;;;;:::i;:::-;22972:17;22990:1;22972:20;;;;;;;;:::i;24531:82::-;3805:13;:11;:13::i;:::-;24585:12:::1;:20:::0;;-1:-1:-1;;24585:20:0::1;::::0;;24531:82::o;22191:616::-;3805:13;:11;:13::i;:::-;22372:9:::1;22356:27;;;;;;22339:11;22323:29;;;;;;:60:::0;22315:105:::1;;;::::0;-1:-1:-1;;;22315:105:0;;7064:2:1;22315:105:0::1;::::0;::::1;7046:21:1::0;;;7083:18;;;7076:30;7142:34;7122:18;;;7115:62;7194:18;;22315:105:0::1;6862:356:1::0;22315:105:0::1;22484:8;22468:26;;;;;;22451:11;22435:29;;;;;;:59:::0;22427:104:::1;;;::::0;-1:-1:-1;;;22427:104:0;;7425:2:1;22427:104:0::1;::::0;::::1;7407:21:1::0;;;7444:18;;;7437:30;7503:34;7483:18;;;7476:62;7555:18;;22427:104:0::1;7223:356:1::0;22427:104:0::1;22593:8;22577:26;;;;;;22562:9;22546:27;;;;;;:57:::0;22538:102:::1;;;::::0;-1:-1:-1;;;22538:102:0;;7786:2:1;22538:102:0::1;::::0;::::1;7768:21:1::0;;;7805:18;;;7798:30;7864:34;7844:18;;;7837:62;7916:18;;22538:102:0::1;7584:356:1::0;22538:102:0::1;22649:27;22707:11;22726:9;22743:8;22686:71;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;22686:71:0;;::::1;::::0;;;;;;22766:17:::1;:37:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22766:37:0;;;;22686:71;;-1:-1:-1;22766:37:0;::::1;;22686:71:::0;22766:37;::::1;:::i;24227:80::-:0;3805:13;:11;:13::i;:::-;24280:12:::1;:19:::0;;-1:-1:-1;;24280:19:0::1;24295:4;24280:19;::::0;;24227:80::o;28582:240::-;28654:7;28690:9;28682:5;:17;:37;;28710:9;28682:37;;;28702:5;28682:37;28674:45;;28740:9;28734:3;:15;28730:56;;;-1:-1:-1;28773:1:0;28766:8;;28730:56;28803:11;28809:5;28803:3;:11;:::i;:::-;28796:18;28582:240;-1:-1:-1;;;28582:240:0:o;21398:575::-;3805:13;:11;:13::i;:::-;21561:11:::1;21545:29;;;;;;21534:5;21518:23;;;;;;:56:::0;21510:99:::1;;;::::0;-1:-1:-1;;;21510:99:0;;14043:2:1;21510:99:0::1;::::0;::::1;14025:21:1::0;14082:2;14062:18;;;14055:30;14121:32;14101:18;;;14094:60;14171:18;;21510:99:0::1;13841:354:1::0;21510:99:0::1;21667:9;21651:27;;;;;;21640:5;21624:23;;;;;;:54:::0;21616:97:::1;;;::::0;-1:-1:-1;;;21616:97:0;;14402:2:1;21616:97:0::1;::::0;::::1;14384:21:1::0;14441:2;14421:18;;;14414:30;14480:32;14460:18;;;14453:60;14530:18;;21616:97:0::1;14200:354:1::0;21616:97:0::1;21777:9;21761:27;;;;;;21744:11;21728:29;;;;;;:60:::0;21720:103:::1;;;::::0;-1:-1:-1;;;21720:103:0;;14761:2:1;21720:103:0::1;::::0;::::1;14743:21:1::0;14800:2;14780:18;;;14773:30;14839:32;14819:18;;;14812:60;14889:18;;21720:103:0::1;14559:354:1::0;21720:103:0::1;21832:22;21885:5;21898:11;21917:9;21864:68;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;21864:68:0;;::::1;::::0;;;;;;21941:13:::1;:28:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;21941:28:0;;;;21864:68;;-1:-1:-1;21941:28:0;::::1;;21864:68:::0;21941:28;::::1;:::i;21981:169::-:0;22068:13;:20;22035:13;;22064:24;;22056:56;;;;-1:-1:-1;;;22056:56:0;;;;;;;:::i;:::-;22130:13;22144:1;22130:16;;;;;;;;:::i;29646:746::-;29719:7;29739:21;29763:8;29772:4;29763:14;;;;;;;;:::i;:::-;;;;;;;;;29812;;;:8;:14;;;;;;-1:-1:-1;;;;;29812:21:0;;;;;;;;;29870:20;29763:14;;;;;;;29870:20;;;;29920:15;;;;29968:19;;;;29763:14;;-1:-1:-1;29870:20:0;;29950:15;:37;:54;;;;-1:-1:-1;29991:13:0;;;29950:54;29946:354;;;30021:18;30042:51;30056:4;:19;;;30077:15;30042:13;:51::i;:::-;30021:72;;30108:18;30129:71;30184:15;;30129:50;30163:4;:15;;;30129:29;30144:13;;30129:10;:14;;:29;;;;:::i;:71::-;30108:92;-1:-1:-1;30233:55:0;30253:34;30278:8;30253:20;30108:92;30268:4;30253:14;:20::i;30233:55::-;30215:73;;30006:294;;29946:354;30317:67;30364:4;:19;;;30317:42;30354:4;30317:32;30333:15;30317:4;:11;;;:15;;:32;;;;:::i;25349:621::-;3805:13;:11;:13::i;:::-;25534:8:::1;25518:26;;;;;;25504:8;25488:26;;;;;;:56:::0;25480:99:::1;;;::::0;-1:-1:-1;;;25480:99:0;;14043:2:1;25480:99:0::1;::::0;::::1;14025:21:1::0;14082:2;14062:18;;;14055:30;14121:32;14101:18;;;14094:60;14171:18;;25480:99:0::1;13841:354:1::0;25480:99:0::1;25640:16;25624:34;;;;;;25610:8;25594:26;;;;;;:64:::0;25586:107:::1;;;::::0;-1:-1:-1;;;25586:107:0;;14402:2:1;25586:107:0::1;::::0;::::1;14384:21:1::0;14441:2;14421:18;;;14414:30;14480:32;14460:18;;;14453:60;14530:18;;25586:107:0::1;14200:354:1::0;25586:107:0::1;25754:16;25738:34;;;;;;25724:8;25708:26;;;;;;:64:::0;25700:107:::1;;;::::0;-1:-1:-1;;;25700:107:0;;14761:2:1;25700:107:0::1;::::0;::::1;14743:21:1::0;14800:2;14780:18;;;14773:30;14839:32;14819:18;;;14812:60;14889:18;;25700:107:0::1;14559:354:1::0;25700:107:0::1;25817:25;25873:8;25889;25905:16;25852:75;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;25852:75:0;;::::1;::::0;;;;;;25936:11:::1;:29:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;25936:29:0;;;;25852:75;;-1:-1:-1;25936:29:0;::::1;;25852:75:::0;25936:29;::::1;:::i;32828:271::-:0;32884:7;32928:14;;;:8;:14;;;;;;;;32943:10;32928:26;;;;;;;32987:20;;;;:29;;33010:6;32987:29;:::i;:::-;32969:15;:47;32965:126;;;-1:-1:-1;33044:2:0;;32828:271;-1:-1:-1;;32828:271:0:o;32965:126::-;-1:-1:-1;33090:1:0;;32828:271;-1:-1:-1;;32828:271:0:o;32965:126::-;32893:206;32828:271;;;:::o;25975:168::-;26065:11;:18;26032:13;;26061:22;;26053:54;;;;-1:-1:-1;;;26053:54:0;;;;;;;:::i;:::-;26125:11;26137:1;26125:14;;;;;;;;:::i;31677:1143::-;445:21;:19;:21::i;:::-;31758::::1;31782:8;31791:4;31782:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;31831;;;:8:::1;:14:::0;;;;;;31846:10:::1;31831:26:::0;;;;;;;31782:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;31870:16:0::1;31840:4:::0;31870:10:::1;:16::i;:::-;31899:15;31917:70;31971:4;:15;;;31917:49;31961:4;31917:39;31933:4;:22;;;31917:4;:11;;;:15;;:39;;;;:::i;:70::-;31899:88;;31998:19;32020:72;32072:4;:19;;;32020:47;32062:4;32020:37;32036:4;:20;;;32020:4;:11;;;:15;;:37;;;;:::i;:72::-;32119:11:::0;;31998:94;;-1:-1:-1;32119:24:0::1;::::0;32135:7;32119:15:::1;:24::i;:::-;32105:38:::0;;32177:15:::1;32154:20;::::0;::::1;:38:::0;32221:15:::1;::::0;::::1;::::0;:28:::1;::::0;32241:7;32221:19:::1;:28::i;:::-;32203:15;::::0;::::1;:46:::0;32294:22:::1;::::0;::::1;::::0;32278:11;;:49:::1;::::0;32322:4:::1;::::0;32278:39:::1;::::0;:15:::1;:39::i;:49::-;32260:15;::::0;::::1;:67:::0;32376:20:::1;::::0;::::1;::::0;32360:11;;:47:::1;::::0;32402:4:::1;::::0;32360:37:::1;::::0;:15:::1;:37::i;:47::-;32338:19;::::0;::::1;:69:::0;32432:21:::1;:11:::0;32448:4:::1;32432:15;:21::i;:::-;32418:35;;32477:1;32467:7;:11;:29;;;;32495:1;32482:11;:14;32467:29;32464:158;;;32513:6;::::0;:44:::1;::::0;-1:-1:-1;;;32513:44:0;;32537:10:::1;32513:44;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;32513:6:0;;::::1;::::0;:23:::1;::::0;13709:18:1;;32513:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32572:4:0::1;::::0;:38:::1;::::0;-1:-1:-1;;;32572:38:0;;32586:10:::1;32572:38;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;32572:4:0;;::::1;::::0;-1:-1:-1;32572:13:0::1;::::0;-1:-1:-1;13709:18:1;;32572:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32464:158;32632:12:::0;;:74:::1;::::0;-1:-1:-1;;;;;32632:12:0::1;32670:10;32691:4;32698:7:::0;32632:29:::1;:74::i;:::-;32732:12:::0;;32718:42:::1;::::0;-1:-1:-1;;;32718:42:0;;::::1;::::0;::::1;1001:25:1::0;;;-1:-1:-1;;;;;32732:12:0;;::::1;::::0;32718:33:::1;::::0;974:18:1;;32718:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32778:34:0::1;::::0;1001:25:1;;;32798:4:0;;-1:-1:-1;32786:10:0::1;::::0;-1:-1:-1;32778:34:0::1;::::0;989:2:1;974:18;32778:34:0::1;;;;;;;31745:1075;;;;489:20:::0;261:1;1009:22;;826:213;4852:220;3805:13;:11;:13::i;:::-;-1:-1:-1;;;;;4937:22:0;::::1;4933:93;;4983:31;::::0;-1:-1:-1;;;4983:31:0;;5011:1:::1;4983:31;::::0;::::1;4553:51:1::0;4526:18;;4983:31:0::1;4393:217:1::0;4933:93:0::1;5036:28;5055:8;5036:18;:28::i;:::-;4852:220:::0;:::o;4084:166::-;3965:7;3992:6;-1:-1:-1;;;;;3992:6:0;2115:10;4144:23;4140:103;;4191:40;;-1:-1:-1;;;4191:40:0;;2115:10;4191:40;;;4553:51:1;4526:18;;4191:40:0;4393:217:1;8306:98:0;8364:7;8391:5;8395:1;8391;:5;:::i;27220:269::-;27306:8;:15;27289:14;27332:148;27362:6;27355:4;:13;27332:148;;;27427:8;-1:-1:-1;;;;;27401:34:0;:8;27410:4;27401:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;27401:22:0;:34;27393:75;;;;-1:-1:-1;;;27393:75:0;;15120:2:1;27393:75:0;;;15102:21:1;15159:2;15139:18;;;15132:30;15198;15178:18;;;15171:58;15246:18;;27393:75:0;14918:352:1;27393:75:0;27370:6;;27332:148;;;;27278:211;27220:269;:::o;525:293::-;305:1;659:7;;:19;651:63;;;;-1:-1:-1;;;651:63:0;;15477:2:1;651:63:0;;;15459:21:1;15516:2;15496:18;;;15489:30;15555:33;15535:18;;;15528:61;15606:18;;651:63:0;15275:355:1;651:63:0;305:1;792:7;:18;525:293::o;9044:98::-;9102:7;9129:5;9133:1;9129;:5;:::i;9443:98::-;9501:7;9528:5;9532:1;9528;:5;:::i;8687:98::-;8745:7;8772:5;8776:1;8772;:5;:::i;5232:191::-;5306:16;5325:6;;-1:-1:-1;;;;;5342:17:0;;;-1:-1:-1;;;;;;5342:17:0;;;;;;5375:40;;5325:6;;;;;;;5375:40;;5306:16;5375:40;5295:128;5232:191;:::o;17454:190::-;17582:53;;;-1:-1:-1;;;;;12057:15:1;;;17582:53:0;;;12039:34:1;12109:15;;12089:18;;;12082:43;12141:18;;;;12134:34;;;17582:53:0;;;;;;;;;;11974:18:1;;;;17582:53:0;;;;;;;;-1:-1:-1;;;;;17582:53:0;-1:-1:-1;;;17582:53:0;;;17555:81;;17575:5;;17555:19;:81::i;:::-;17454:190;;;;:::o;18771:299::-;18856:23;18882:33;-1:-1:-1;;;;;18882:27:0;;18910:4;18882:27;:33::i;:::-;18856:59;;18930:10;:17;18951:1;18930:22;;:57;;;;;18968:10;18957:30;;;;;;;;;;;;:::i;:::-;18956:31;18930:57;18926:137;;;19011:40;;-1:-1:-1;;;19011:40:0;;-1:-1:-1;;;;;4571:32:1;;19011:40:0;;;4553:51:1;4526:18;;19011:40:0;4393:217:1;13306:153:0;13381:12;13413:38;13435:6;13443:4;13449:1;13381:12;13714;13728:23;13755:6;-1:-1:-1;;;;;13755:11:0;13774:5;13781:4;13755:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13713:73;;;;13804:55;13831:6;13839:7;13848:10;13804:26;:55::i;:::-;13797:62;13469:398;-1:-1:-1;;;;;;13469:398:0:o;14410:427::-;14558:12;14588:7;14583:247;;14612:19;14620:10;14612:7;:19::i;:::-;14583:247;;;14670:17;;:22;:49;;;;-1:-1:-1;;;;;;14696:18:0;;;:23;14670:49;14666:121;;;14747:24;;-1:-1:-1;;;14747:24:0;;-1:-1:-1;;;;;4571:32:1;;14747:24:0;;;4553:51:1;4526:18;;14747:24:0;4393:217:1;14666:121:0;-1:-1:-1;14808:10:0;14801:17;;15088:528;15221:17;;:21;15217:392;;15453:10;15447:17;15510:15;15497:10;15493:2;15489:19;15482:44;15217:392;15580:17;;-1:-1:-1;;;15580:17:0;;;;;;;;;;;14:180:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:250::-;284:1;294:113;308:6;305:1;302:13;294:113;;;384:11;;;378:18;365:11;;;358:39;330:2;323:10;294:113;;;-1:-1:-1;;441:1:1;423:16;;416:27;199:250::o;454:396::-;603:2;592:9;585:21;566:4;635:6;629:13;678:6;673:2;662:9;658:18;651:34;694:79;766:6;761:2;750:9;746:18;741:2;733:6;729:15;694:79;:::i;:::-;834:2;813:15;-1:-1:-1;;809:29:1;794:45;;;;841:2;790:54;;454:396;-1:-1:-1;;454:396:1:o;1037:138::-;-1:-1:-1;;;;;1119:31:1;;1109:42;;1099:70;;1165:1;1162;1155:12;1180:430;1276:6;1284;1337:2;1325:9;1316:7;1312:23;1308:32;1305:52;;;1353:1;1350;1343:12;1305:52;1392:9;1379:23;1411:38;1443:5;1411:38;:::i;:::-;1468:5;-1:-1:-1;1525:2:1;1510:18;;1497:32;1538:40;1497:32;1538:40;:::i;:::-;1597:7;1587:17;;;1180:430;;;;;:::o;2195:127::-;2256:10;2251:3;2247:20;2244:1;2237:31;2287:4;2284:1;2277:15;2311:4;2308:1;2301:15;2327:719;2370:5;2423:3;2416:4;2408:6;2404:17;2400:27;2390:55;;2441:1;2438;2431:12;2390:55;2477:6;2464:20;2503:18;2540:2;2536;2533:10;2530:36;;;2546:18;;:::i;:::-;2621:2;2615:9;2589:2;2675:13;;-1:-1:-1;;2671:22:1;;;2695:2;2667:31;2663:40;2651:53;;;2719:18;;;2739:22;;;2716:46;2713:72;;;2765:18;;:::i;:::-;2805:10;2801:2;2794:22;2840:2;2832:6;2825:18;2886:3;2879:4;2874:2;2866:6;2862:15;2858:26;2855:35;2852:55;;;2903:1;2900;2893:12;2852:55;2967:2;2960:4;2952:6;2948:17;2941:4;2933:6;2929:17;2916:54;3014:1;3007:4;3002:2;2994:6;2990:15;2986:26;2979:37;3034:6;3025:15;;;;;;2327:719;;;;:::o;3051:743::-;3158:6;3166;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3283:9;3270:23;3312:18;3353:2;3345:6;3342:14;3339:34;;;3369:1;3366;3359:12;3339:34;3392:50;3434:7;3425:6;3414:9;3410:22;3392:50;:::i;:::-;3382:60;;3495:2;3484:9;3480:18;3467:32;3451:48;;3524:2;3514:8;3511:16;3508:36;;;3540:1;3537;3530:12;3508:36;3563:52;3607:7;3596:8;3585:9;3581:24;3563:52;:::i;:::-;3553:62;;3668:2;3657:9;3653:18;3640:32;3624:48;;3697:2;3687:8;3684:16;3681:36;;;3713:1;3710;3703:12;3681:36;;3736:52;3780:7;3769:8;3758:9;3754:24;3736:52;:::i;:::-;3726:62;;;3051:743;;;;;:::o;3799:248::-;3867:6;3875;3928:2;3916:9;3907:7;3903:23;3899:32;3896:52;;;3944:1;3941;3934:12;3896:52;-1:-1:-1;;3967:23:1;;;4037:2;4022:18;;;4009:32;;-1:-1:-1;3799:248:1:o;4052:336::-;4134:6;4142;4195:2;4183:9;4174:7;4170:23;4166:32;4163:52;;;4211:1;4208;4201:12;4163:52;4247:9;4234:23;4224:33;;4307:2;4296:9;4292:18;4279:32;4320:38;4352:5;4320:38;:::i;5738:254::-;5797:6;5850:2;5838:9;5829:7;5825:23;5821:32;5818:52;;;5866:1;5863;5856:12;5818:52;5905:9;5892:23;5924:38;5956:5;5924:38;:::i;5997:343::-;6199:2;6181:21;;;6238:2;6218:18;;;6211:30;-1:-1:-1;;;6272:2:1;6257:18;;6250:49;6331:2;6316:18;;5997:343::o;6345:127::-;6406:10;6401:3;6397:20;6394:1;6387:31;6437:4;6434:1;6427:15;6461:4;6458:1;6451:15;6477:380;6556:1;6552:12;;;;6599;;;6620:61;;6674:4;6666:6;6662:17;6652:27;;6620:61;6727:2;6719:6;6716:14;6696:18;6693:38;6690:161;;6773:10;6768:3;6764:20;6761:1;6754:31;6808:4;6805:1;6798:15;6836:4;6833:1;6826:15;7945:1284;-1:-1:-1;;;8601:3:1;8594:16;8576:3;8639:6;8633:13;8655:74;8722:6;8718:1;8713:3;8709:11;8702:4;8694:6;8690:17;8655:74;:::i;:::-;8757:6;8752:3;8748:16;8738:26;;-1:-1:-1;;;8815:2:1;8811:1;8807:2;8803:10;8796:22;8849:6;8843:13;8865:75;8931:8;8927:1;8923:2;8919:10;8912:4;8904:6;8900:17;8865:75;:::i;:::-;9000:1;8959:17;;8992:10;;;8985:22;9032:13;;9054:75;9032:13;9116:1;9108:10;;9101:4;9089:17;;9054:75;:::i;:::-;-1:-1:-1;;;9189:1:1;9148:17;;;;9181:10;;;9174:23;9221:1;9213:10;;7945:1284;-1:-1:-1;;;;;7945:1284:1:o;9360:518::-;9462:2;9457:3;9454:11;9451:421;;;9498:5;9495:1;9488:16;9542:4;9539:1;9529:18;9612:2;9600:10;9596:19;9593:1;9589:27;9583:4;9579:38;9648:4;9636:10;9633:20;9630:47;;;-1:-1:-1;9671:4:1;9630:47;9726:2;9721:3;9717:12;9714:1;9710:20;9704:4;9700:31;9690:41;;9781:81;9799:2;9792:5;9789:13;9781:81;;;9858:1;9844:16;;9825:1;9814:13;9781:81;;10054:1345;10180:3;10174:10;10207:18;10199:6;10196:30;10193:56;;;10229:18;;:::i;:::-;10258:97;10348:6;10308:38;10340:4;10334:11;10308:38;:::i;:::-;10302:4;10258:97;:::i;:::-;10410:4;;10467:2;10456:14;;10484:1;10479:663;;;;11186:1;11203:6;11200:89;;;-1:-1:-1;11255:19:1;;;11249:26;11200:89;-1:-1:-1;;10011:1:1;10007:11;;;10003:24;9999:29;9989:40;10035:1;10031:11;;;9986:57;11302:81;;10449:944;;10479:663;9307:1;9300:14;;;9344:4;9331:18;;-1:-1:-1;;10515:20:1;;;10633:236;10647:7;10644:1;10641:14;10633:236;;;10736:19;;;10730:26;10715:42;;10828:27;;;;10796:1;10784:14;;;;10663:19;;10633:236;;;10637:3;10897:6;10888:7;10885:19;10882:201;;;10958:19;;;10952:26;-1:-1:-1;;11041:1:1;11037:14;;;11053:3;11033:24;11029:37;11025:42;11010:58;10995:74;;10882:201;;;11129:1;11120:6;11117:1;11113:14;11109:22;11103:4;11096:36;10449:944;;;;;10054:1345;;:::o;11404:127::-;11465:10;11460:3;11456:20;11453:1;11446:31;11496:4;11493:1;11486:15;11520:4;11517:1;11510:15;11536:128;11603:9;;;11624:11;;;11621:37;;;11638:18;;:::i;11669:125::-;11734:9;;;11755:10;;;11752:36;;;11768:18;;:::i;12179:277::-;12246:6;12299:2;12287:9;12278:7;12274:23;12270:32;12267:52;;;12315:1;12312;12305:12;12267:52;12347:9;12341:16;12400:5;12393:13;12386:21;12379:5;12376:32;12366:60;;12422:1;12419;12412:12;12461:401;12663:2;12645:21;;;12702:2;12682:18;;;12675:30;12741:34;12736:2;12721:18;;12714:62;-1:-1:-1;;;12807:2:1;12792:18;;12785:35;12852:3;12837:19;;12461:401::o;15635:168::-;15708:9;;;15739;;15756:15;;;15750:22;;15736:37;15726:71;;15777:18;;:::i;15808:217::-;15848:1;15874;15864:132;;15918:10;15913:3;15909:20;15906:1;15899:31;15953:4;15950:1;15943:15;15981:4;15978:1;15971:15;15864:132;-1:-1:-1;16010:9:1;;15808:217::o;16030:287::-;16159:3;16197:6;16191:13;16213:66;16272:6;16267:3;16260:4;16252:6;16248:17;16213:66;:::i;:::-;16295:16;;;;;16030:287;-1:-1:-1;;16030:287:1:o
Swarm Source
ipfs://8bc94b018404b3d8bcee8d45f0e7e85c0bcaded0f5c73febace0650f2f20d8da
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.