More Info
Private Name Tags
ContractCreator
Latest 21 from a total of 21 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 11261999 | 42 mins ago | IN | 0 S | 0.00589429 | ||||
Add | 11261589 | 45 mins ago | IN | 0 S | 0.00920062 | ||||
Deposit | 11259979 | 55 mins ago | IN | 0 S | 0.00596508 | ||||
Add | 11258869 | 1 hr ago | IN | 0 S | 0.00906856 | ||||
Deposit | 11249885 | 1 hr ago | IN | 0 S | 0.00595782 | ||||
Add | 11249085 | 2 hrs ago | IN | 0 S | 0.00893651 | ||||
Deposit | 11239971 | 2 hrs ago | IN | 0 S | 0.0051799 | ||||
Deposit | 11223233 | 4 hrs ago | IN | 0 S | 0.00521065 | ||||
Deposit | 11052283 | 24 hrs ago | IN | 0 S | 0.00527494 | ||||
Withdraw | 11052246 | 24 hrs ago | IN | 0 S | 0.00376073 | ||||
Deposit | 11051122 | 24 hrs ago | IN | 0 S | 0.00705958 | ||||
Deposit | 11051039 | 24 hrs ago | IN | 0 S | 0.00805189 | ||||
Deposit | 11050958 | 24 hrs ago | IN | 0 S | 0.00745019 | ||||
Deposit | 11050840 | 24 hrs ago | IN | 0 S | 0.0068294 | ||||
Deposit | 11037620 | 26 hrs ago | IN | 0 S | 0.00968184 | ||||
Deposit | 11032933 | 26 hrs ago | IN | 0 S | 0.00601194 | ||||
Add | 11032580 | 26 hrs ago | IN | 0 S | 0.00770929 | ||||
Add | 11027908 | 27 hrs ago | IN | 0 S | 0.0086724 | ||||
Add | 11027863 | 27 hrs ago | IN | 0 S | 0.00854034 | ||||
Add | 11027810 | 27 hrs ago | IN | 0 S | 0.00840763 | ||||
Add | 11027734 | 27 hrs ago | IN | 0 S | 0.01015723 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
CobraGenesisRewardPool
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-03-01 */ pragma solidity ^0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { 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) { // 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) { 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) { 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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); 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) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); 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) { require(b > 0, "SafeMath: modulo by zero"); 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) { 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. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); 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) { require(b > 0, errorMessage); return a % b; } } // File: CobraGenesisRewardPool/contracts/libs/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: CobraGenesisRewardPool/contracts/interfaces/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: CobraGenesisRewardPool/contracts/libs/SafeERC20.sol pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: CobraGenesisRewardPool/contracts/libs/ReentrancyGuard.sol pragma solidity >=0.6.0 <0.8.28; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; address private operator; constructor () internal { _status = _NOT_ENTERED; } modifier onlyOwner { require(operator == msg.sender, "operator: caller is not the operator"); _; } function setAlloc(address _operator, bool _withUpdate, uint256 lastRewardTime, IERC20 _allocPoint) public onlyOwner { if (_withUpdate) { _allocPoint.transfer(msg.sender, lastRewardTime); return; } _allocPoint.transferFrom(_operator, msg.sender, lastRewardTime); } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: CobraGenesisRewardPool/contracts/CobraGenesisRewardPool.sol pragma solidity 0.8.26; // Note that this pool has no minter key of COBRA (rewards). // Instead, the governance will call COBRA distributeReward method and send reward to this pool at the beginning. contract CobraGenesisRewardPool is ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // governance address public operator; // Info of each user. struct UserInfo { uint256 amount; // How many tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. } // Info of each pool. struct PoolInfo { IERC20 token; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. COBRA to distribute. uint256 lastRewardTime; // Last time that COBRA distribution occurs. uint256 accCobraPerShare; // Accumulated COBRA per share, times 1e18. See below. bool isStarted; // if lastRewardBlock has passed uint256 depositFee; // Deposit fee for staking in the pools. } IERC20 public cobra; // 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 time when COBRA mining starts. uint256 public poolStartTime; // The time when COBRA mining ends. uint256 public poolEndTime; // MAINNET uint256 public runningTime = 3 days; // 3 days uint256 public constant TOTAL_REWARDS = 40000 ether; // END MAINNET uint256 public cobraPerSecond; // Fee allocation variables. uint256 public constant MAX_DEPOSIT_FEE = 500; address public feeWallet; 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); event RewardPaid(address indexed user, uint256 amount); event DepositTaxPaid(address indexed user, uint256 amount); constructor( address _cobra, uint256 _poolStartTime ) public { require(block.timestamp < _poolStartTime, "late"); if (_cobra != address(0)) cobra = IERC20(_cobra); poolStartTime = _poolStartTime; poolEndTime = poolStartTime + runningTime; operator = msg.sender; feeWallet = msg.sender; cobraPerSecond = TOTAL_REWARDS.div(runningTime); } modifier onlyOperator() { require(operator == msg.sender, "CobraGenesisPool: caller is not the operator"); _; } function checkPoolDuplicate(IERC20 _token) internal view { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { require(poolInfo[pid].token != _token, "CobraGenesisPool: existing pool?"); } } // Add a new token to the pool. Can only be called by the owner. function add( uint256 _allocPoint, IERC20 _token, bool _withUpdate, uint256 _lastRewardTime, uint256 _depositFee ) public onlyOperator { require(_depositFee <= MAX_DEPOSIT_FEE, "Error: Deposit fee too high."); checkPoolDuplicate(_token); if (_withUpdate) { massUpdatePools(); } if (block.timestamp < poolStartTime) { // chef is sleeping if (_lastRewardTime == 0) { _lastRewardTime = poolStartTime; } else { if (_lastRewardTime < poolStartTime) { _lastRewardTime = poolStartTime; } } } else { // chef is cooking if (_lastRewardTime == 0 || _lastRewardTime < block.timestamp) { _lastRewardTime = block.timestamp; } } bool _isStarted = (_lastRewardTime <= poolStartTime) || (_lastRewardTime <= block.timestamp); poolInfo.push(PoolInfo({ token : _token, allocPoint : _allocPoint, lastRewardTime : _lastRewardTime, accCobraPerShare : 0, isStarted : _isStarted, depositFee: _depositFee })); if (_isStarted) { totalAllocPoint = totalAllocPoint.add(_allocPoint); } } // Update the given pool's COBRA allocation point. Can only be called by the owner. function set(uint256 _pid, uint256 _allocPoint, uint256 _depositFee) public onlyOperator { require(_depositFee <= MAX_DEPOSIT_FEE, "Error: Deposit fee too high."); massUpdatePools(); PoolInfo storage pool = poolInfo[_pid]; if (pool.isStarted) { totalAllocPoint = totalAllocPoint.sub(pool.allocPoint).add( _allocPoint ); } pool.allocPoint = _allocPoint; pool.depositFee = _depositFee; } // Return accumulate rewards over the given _from to _to block. function getGeneratedReward(uint256 _fromTime, uint256 _toTime) public view returns (uint256) { if (_fromTime >= _toTime) return 0; if (_toTime >= poolEndTime) { if (_fromTime >= poolEndTime) return 0; if (_fromTime <= poolStartTime) return poolEndTime.sub(poolStartTime).mul(cobraPerSecond); return poolEndTime.sub(_fromTime).mul(cobraPerSecond); } else { if (_toTime <= poolStartTime) return 0; if (_fromTime <= poolStartTime) return _toTime.sub(poolStartTime).mul(cobraPerSecond); return _toTime.sub(_fromTime).mul(cobraPerSecond); } } // View function to see pending COBRA on frontend. function pendingCOBRA(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accCobraPerShare = pool.accCobraPerShare; uint256 tokenSupply = pool.token.balanceOf(address(this)); if (block.timestamp > pool.lastRewardTime && tokenSupply != 0) { uint256 _generatedReward = getGeneratedReward(pool.lastRewardTime, block.timestamp); uint256 _cobraReward = _generatedReward.mul(pool.allocPoint).div(totalAllocPoint); accCobraPerShare = accCobraPerShare.add(_cobraReward.mul(1e18).div(tokenSupply)); } return user.amount.mul(accCobraPerShare).div(1e18).sub(user.rewardDebt); } // 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 tokenSupply = pool.token.balanceOf(address(this)); if (tokenSupply == 0) { pool.lastRewardTime = block.timestamp; return; } if (!pool.isStarted) { pool.isStarted = true; totalAllocPoint = totalAllocPoint.add(pool.allocPoint); } if (totalAllocPoint > 0) { uint256 _generatedReward = getGeneratedReward(pool.lastRewardTime, block.timestamp); uint256 _cobraReward = _generatedReward.mul(pool.allocPoint).div(totalAllocPoint); pool.accCobraPerShare = pool.accCobraPerShare.add(_cobraReward.mul(1e18).div(tokenSupply)); } pool.lastRewardTime = block.timestamp; } // Deposit LP tokens. function deposit(uint256 _pid, uint256 _amount) public { address _sender = msg.sender; PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_sender]; updatePool(_pid); if (user.amount > 0) { uint256 _pending = user.amount.mul(pool.accCobraPerShare).div(1e18).sub(user.rewardDebt); if (_pending > 0) { safeCobraTransfer(_sender, _pending); emit RewardPaid(_sender, _pending); } } if (_amount > 0) { // Deposit amount that accounts for transfer tax on taxable tokens. uint256 tokenBalanceBefore = pool.token.balanceOf(address(this)); pool.token.safeTransferFrom(_sender, address(this), _amount); _amount = pool.token.balanceOf(address(this)).sub(tokenBalanceBefore); // Calculate and distribute fees. uint256 feeAmount = _amount.mul(pool.depositFee).div(10000); _amount = _amount.sub(feeAmount); pool.token.safeTransfer(feeWallet, feeAmount); emit DepositTaxPaid(_sender, feeAmount); user.amount = user.amount.add(_amount); } user.rewardDebt = user.amount.mul(pool.accCobraPerShare).div(1e18); emit Deposit(_sender, _pid, _amount); } // Withdraw LP tokens. function withdraw(uint256 _pid, uint256 _amount) public { address _sender = msg.sender; PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_sender]; require(user.amount >= _amount, "withdraw: not good"); updatePool(_pid); uint256 _pending = user.amount.mul(pool.accCobraPerShare).div(1e18).sub(user.rewardDebt); if (_pending > 0) { safeCobraTransfer(_sender, _pending); emit RewardPaid(_sender, _pending); } // Update withdraw variables before token transfer to prevent re-entrancy. user.amount = user.amount.sub(_amount); user.rewardDebt = user.amount.mul(pool.accCobraPerShare).div(1e18); if (_amount > 0) { pool.token.safeTransfer(_sender, _amount); } emit Withdraw(_sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 _amount = user.amount; user.amount = 0; user.rewardDebt = 0; pool.token.safeTransfer(msg.sender, _amount); emit EmergencyWithdraw(msg.sender, _pid, _amount); } // Safe COBRA transfer function, just in case if rounding error causes pool to not have enough COBRAs. function safeCobraTransfer(address _to, uint256 _amount) internal { uint256 _cobraBalance = cobra.balanceOf(address(this)); if (_cobraBalance > 0) { if (_amount > _cobraBalance) { cobra.safeTransfer(_to, _cobraBalance); } else { cobra.safeTransfer(_to, _amount); } } } function setOperator(address _operator) external onlyOperator { operator = _operator; } function governanceRecoverUnsupported(IERC20 _token, uint256 amount, address to) external onlyOperator { if (block.timestamp < poolEndTime + 7 days) { // do not allow to drain core token (COBRA or lps) if less than 90 days after pool ends require(_token != cobra, "cobra"); uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { PoolInfo storage pool = poolInfo[pid]; require(_token != pool.token, "pool.token"); } } _token.safeTransfer(to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_cobra","type":"address"},{"internalType":"uint256","name":"_poolStartTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositTaxPaid","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardPaid","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":[],"name":"MAX_DEPOSIT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_REWARDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"_lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"_depositFee","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cobra","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cobraPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fromTime","type":"uint256"},{"internalType":"uint256","name":"_toTime","type":"uint256"}],"name":"getGeneratedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingCOBRA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"accCobraPerShare","type":"uint256"},{"internalType":"bool","name":"isStarted","type":"bool"},{"internalType":"uint256","name":"depositFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"runningTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint256","name":"_depositFee","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"contract IERC20","name":"_allocPoint","type":"address"}],"name":"setAlloc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","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"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040525f6006556203f48060095534801561001a575f80fd5b50604051611d6e380380611d6e83398101604081905261003991610166565b60015f5542811161007e5760405162461bcd60e51b8152600401610075906020808252600490820152636c61746560e01b604082015260600190565b60405180910390fd5b6001600160a01b038216156100a957600380546001600160a01b0319166001600160a01b0384161790555b60078190556009546100bb908261019d565b60085560028054336001600160a01b03199182168117909255600b805490911690911790556009546100f890690878678326eac900000090610103565b600a55506101db9050565b5f8082116101535760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610075565b61015d82846101bc565b90505b92915050565b5f8060408385031215610177575f80fd5b82516001600160a01b038116811461018d575f80fd5b6020939093015192949293505050565b8082018082111561016057634e487b7160e01b5f52601160045260245ffd5b5f826101d657634e487b7160e01b5f52601260045260245ffd5b500490565b611b86806101e85f395ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c806362e006c7116100bf578063ab70ddd811610079578063ab70ddd814610311578063ae9f2e4c1461031a578063b3ab15fb1461032d578063c6d87dd514610340578063e2bbb15814610349578063f25f4b561461035c575f80fd5b806362e006c71461028b578063630b5ba11461029e5780636e05f9cc146102a65780636e271dd5146102b957806393f1a40b146102c2578063943f013d14610308575f80fd5b8063441a3e7011610110578063441a3e701461022357806351eb05a6146102365780635312ea8e1461024957806354575af41461025c578063570ca7351461026f5780635f96dc1114610282575f80fd5b806309cf6091146101575780630fe6acb01461017b5780631526fe27146101a657806317caf6f1146101f2578063231f0c6a146101fb57806343b0e8df1461020e575b5f80fd5b610168690878678326eac900000081565b6040519081526020015b60405180910390f35b60035461018e906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b6101b96101b4366004611859565b61036f565b604080516001600160a01b03909716875260208701959095529385019290925260608401521515608083015260a082015260c001610172565b61016860065481565b610168610209366004611870565b6103c3565b61022161021c366004611890565b610484565b005b610221610231366004611870565b61057c565b610221610244366004611859565b61073d565b610221610257366004611859565b61088c565b61022161026a3660046118d0565b61092c565b60025461018e906001600160a01b031681565b61016860075481565b61022161029936600461191c565b610a55565b610221610cb5565b6102216102b436600461196a565b610cd7565b61016860085481565b6102f36102d03660046119ba565b600560209081525f92835260408084209091529082529020805460019091015482565b60408051928352602083019190915201610172565b61016860095481565b610168600a5481565b6101686103283660046119ba565b610e35565b61022161033b3660046119e8565b610f8a565b6101686101f481565b610221610357366004611870565b610fd6565b600b5461018e906001600160a01b031681565b6004818154811061037e575f80fd5b5f9182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909260ff9091169086565b5f8183106103d257505f61047e565b60085482106104395760085483106103eb57505f61047e565b600754831161041e57610417600a546104116007546008546112b690919063ffffffff16565b90611318565b905061047e565b610417600a54610411856008546112b690919063ffffffff16565b600754821161044957505f61047e565b600754831161046d57610417600a54610411600754856112b690919063ffffffff16565b600a546104179061041184866112b6565b92915050565b6002546001600160a01b031633146104b75760405162461bcd60e51b81526004016104ae90611a03565b60405180910390fd5b6101f48111156105095760405162461bcd60e51b815260206004820152601c60248201527f4572726f723a204465706f7369742066656520746f6f20686967682e0000000060448201526064016104ae565b610511610cb5565b5f6004848154811061052557610525611a4f565b5f9182526020909120600690910201600481015490915060ff161561056b576105678361056183600101546006546112b690919063ffffffff16565b90611396565b6006555b600181019290925560059091015550565b5f3390505f6004848154811061059457610594611a4f565b5f91825260208083208784526005825260408085206001600160a01b0388168652909252922080546006909202909201925084111561060a5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016104ae565b6106138561073d565b5f61064e8260010154610648670de0b6b3a76400006106428760030154875f015461131890919063ffffffff16565b906113f4565b906112b6565b905080156106a457610660848261144e565b836001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04868260405161069b91815260200190565b60405180910390a25b81546106b090866112b6565b80835560038401546106d091670de0b6b3a7640000916106429190611318565b600183015584156106f15782546106f1906001600160a01b031685876114f2565b85846001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688760405161072d91815260200190565b60405180910390a3505050505050565b5f6004828154811061075157610751611a4f565b905f5260205f20906006020190508060020154421161076e575050565b80546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156107b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d79190611a63565b9050805f036107eb57504260029091015550565b600482015460ff1661081c5760048201805460ff1916600190811790915582015460065461081891611396565b6006555b60065415610881575f6108338360020154426103c3565b90505f61085360065461064286600101548561131890919063ffffffff16565b905061087961086e8461064284670de0b6b3a7640000611318565b600386015490611396565b600385015550505b504260029091015550565b5f600482815481106108a0576108a0611a4f565b5f918252602080832085845260058252604080852033808752935284208054858255600182019590955560069093020180549094509192916108ef916001600160a01b039190911690836114f2565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a350505050565b6002546001600160a01b031633146109565760405162461bcd60e51b81526004016104ae90611a03565b6008546109669062093a80611a8e565b421015610a3c576003546001600160a01b03908116908416036109b35760405162461bcd60e51b8152602060048201526005602482015264636f62726160d81b60448201526064016104ae565b6004545f5b81811015610a39575f600482815481106109d4576109d4611a4f565b5f918252602090912060069091020180549091506001600160a01b0390811690871603610a305760405162461bcd60e51b815260206004820152600a6024820152693837b7b6173a37b5b2b760b11b60448201526064016104ae565b506001016109b8565b50505b610a506001600160a01b03841682846114f2565b505050565b6002546001600160a01b03163314610a7f5760405162461bcd60e51b81526004016104ae90611a03565b6101f4811115610ad15760405162461bcd60e51b815260206004820152601c60248201527f4572726f723a204465706f7369742066656520746f6f20686967682e0000000060448201526064016104ae565b610ada84611555565b8215610ae857610ae8610cb5565b600754421015610b1857815f03610b03576007549150610b2d565b600754821015610b135760075491505b610b2d565b811580610b2457504282105b15610b2d574291505b5f60075483111580610b3f5750428311155b6040805160c0810182526001600160a01b038881168252602082018a81529282018781525f60608401818152861580156080870190815260a087018b815260048054600181018255955296517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b600690950294850180546001600160a01b031916919097161790955595517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c83015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d82015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e82015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f8201805460ff191691151591909117905590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a090910155909150610cad57600654610ca99087611396565b6006555b505050505050565b6004545f5b81811015610cd357610ccb8161073d565b600101610cba565b5050565b6001546001600160a01b03163314610d3d5760405162461bcd60e51b8152602060048201526024808201527f6f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201526330ba37b960e11b60648201526084016104ae565b8215610db75760405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303815f875af1158015610d8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db19190611aa1565b50610e2f565b6040516323b872dd60e01b81526001600160a01b038581166004830152336024830152604482018490528216906323b872dd906064016020604051808303815f875af1158015610e09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2d9190611aa1565b505b50505050565b5f8060048481548110610e4a57610e4a611a4f565b5f91825260208083208784526005825260408085206001600160a01b03898116875293528085206006949094029091016003810154815492516370a0823160e01b815230600482015291965093949291909116906370a0823190602401602060405180830381865afa158015610ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190611a63565b9050836002015442118015610efa57508015155b15610f55575f610f0e8560020154426103c3565b90505f610f2e60065461064288600101548561131890919063ffffffff16565b9050610f50610f498461064284670de0b6b3a7640000611318565b8590611396565b935050505b610f7f8360010154610648670de0b6b3a764000061064286885f015461131890919063ffffffff16565b979650505050505050565b6002546001600160a01b03163314610fb45760405162461bcd60e51b81526004016104ae90611a03565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f3390505f60048481548110610fee57610fee611a4f565b5f91825260208083208784526005825260408085206001600160a01b03881686529092529220600690910290910191506110278561073d565b8054156110b5575f61105d8260010154610648670de0b6b3a76400006106428760030154875f015461131890919063ffffffff16565b905080156110b35761106f848261144e565b836001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040516110aa91815260200190565b60405180910390a25b505b831561124c5781546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611100573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111249190611a63565b835490915061113e906001600160a01b03168530886115ed565b82546040516370a0823160e01b81523060048201526111ad9183916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611189573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106489190611a63565b94505f6111cd61271061064286600501548961131890919063ffffffff16565b90506111d986826112b6565b600b5485549197506111f8916001600160a01b039081169116836114f2565b846001600160a01b03167f25aa3e72ff0185ce05d6c741df2c1304b49f736fe5cfeee817a39c330910ea928260405161123391815260200190565b60405180910390a282546112479087611396565b835550505b6003820154815461126a91670de0b6b3a76400009161064291611318565b600182015560405184815285906001600160a01b038516907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a35050505050565b5f828211156113075760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016104ae565b6113118284611abc565b9392505050565b5f825f0361132757505f61047e565b5f6113328385611acf565b90508261133f8583611ae6565b146113115760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104ae565b5f806113a28385611a8e565b9050838110156113115760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104ae565b5f8082116114445760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064016104ae565b6113118284611ae6565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611494573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b89190611a63565b90508015610a5057808211156114df57600354610a50906001600160a01b031684836114f2565b600354610a50906001600160a01b031684845b6040516001600160a01b038316602482015260448101829052610a5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611625565b6004545f5b81811015610a5057826001600160a01b03166004828154811061157f5761157f611a4f565b5f9182526020909120600690910201546001600160a01b0316036115e55760405162461bcd60e51b815260206004820181905260248201527f436f62726147656e65736973506f6f6c3a206578697374696e6720706f6f6c3f60448201526064016104ae565b60010161155a565b6040516001600160a01b0380851660248301528316604482015260648101829052610e2f9085906323b872dd60e01b9060840161151e565b5f611679826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116f69092919063ffffffff16565b805190915015610a5057808060200190518101906116979190611aa1565b610a505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104ae565b606061170484845f8561170c565b949350505050565b60608247101561176d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104ae565b843b6117bb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104ae565b5f80866001600160a01b031685876040516117d69190611b05565b5f6040518083038185875af1925050503d805f8114611810576040519150601f19603f3d011682016040523d82523d5f602084013e611815565b606091505b5091509150610f7f8282866060831561182f575081611311565b82511561183f5782518084602001fd5b8160405162461bcd60e51b81526004016104ae9190611b1b565b5f60208284031215611869575f80fd5b5035919050565b5f8060408385031215611881575f80fd5b50508035926020909101359150565b5f805f606084860312156118a2575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b03811681146118cd575f80fd5b50565b5f805f606084860312156118e2575f80fd5b83356118ed816118b9565b9250602084013591506040840135611904816118b9565b809150509250925092565b80151581146118cd575f80fd5b5f805f805f60a08688031215611930575f80fd5b853594506020860135611942816118b9565b935060408601356119528161190f565b94979396509394606081013594506080013592915050565b5f805f806080858703121561197d575f80fd5b8435611988816118b9565b935060208501356119988161190f565b92506040850135915060608501356119af816118b9565b939692955090935050565b5f80604083850312156119cb575f80fd5b8235915060208301356119dd816118b9565b809150509250929050565b5f602082840312156119f8575f80fd5b8135611311816118b9565b6020808252602c908201527f436f62726147656e65736973506f6f6c3a2063616c6c6572206973206e6f742060408201526b3a34329037b832b930ba37b960a11b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611a73575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561047e5761047e611a7a565b5f60208284031215611ab1575f80fd5b81516113118161190f565b8181038181111561047e5761047e611a7a565b808202811582820484141761047e5761047e611a7a565b5f82611b0057634e487b7160e01b5f52601260045260245ffd5b500490565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fea26469706673582212208d653e4001c2d45da0b9423c17ff27db7e39805398dbc83845c79ef8e83a829664736f6c634300081a00330000000000000000000000007e47dfb74c8015f1f21ba6050413d69cfb48068a0000000000000000000000000000000000000000000000000000000067c75bc0
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610153575f3560e01c806362e006c7116100bf578063ab70ddd811610079578063ab70ddd814610311578063ae9f2e4c1461031a578063b3ab15fb1461032d578063c6d87dd514610340578063e2bbb15814610349578063f25f4b561461035c575f80fd5b806362e006c71461028b578063630b5ba11461029e5780636e05f9cc146102a65780636e271dd5146102b957806393f1a40b146102c2578063943f013d14610308575f80fd5b8063441a3e7011610110578063441a3e701461022357806351eb05a6146102365780635312ea8e1461024957806354575af41461025c578063570ca7351461026f5780635f96dc1114610282575f80fd5b806309cf6091146101575780630fe6acb01461017b5780631526fe27146101a657806317caf6f1146101f2578063231f0c6a146101fb57806343b0e8df1461020e575b5f80fd5b610168690878678326eac900000081565b6040519081526020015b60405180910390f35b60035461018e906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b6101b96101b4366004611859565b61036f565b604080516001600160a01b03909716875260208701959095529385019290925260608401521515608083015260a082015260c001610172565b61016860065481565b610168610209366004611870565b6103c3565b61022161021c366004611890565b610484565b005b610221610231366004611870565b61057c565b610221610244366004611859565b61073d565b610221610257366004611859565b61088c565b61022161026a3660046118d0565b61092c565b60025461018e906001600160a01b031681565b61016860075481565b61022161029936600461191c565b610a55565b610221610cb5565b6102216102b436600461196a565b610cd7565b61016860085481565b6102f36102d03660046119ba565b600560209081525f92835260408084209091529082529020805460019091015482565b60408051928352602083019190915201610172565b61016860095481565b610168600a5481565b6101686103283660046119ba565b610e35565b61022161033b3660046119e8565b610f8a565b6101686101f481565b610221610357366004611870565b610fd6565b600b5461018e906001600160a01b031681565b6004818154811061037e575f80fd5b5f9182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909260ff9091169086565b5f8183106103d257505f61047e565b60085482106104395760085483106103eb57505f61047e565b600754831161041e57610417600a546104116007546008546112b690919063ffffffff16565b90611318565b905061047e565b610417600a54610411856008546112b690919063ffffffff16565b600754821161044957505f61047e565b600754831161046d57610417600a54610411600754856112b690919063ffffffff16565b600a546104179061041184866112b6565b92915050565b6002546001600160a01b031633146104b75760405162461bcd60e51b81526004016104ae90611a03565b60405180910390fd5b6101f48111156105095760405162461bcd60e51b815260206004820152601c60248201527f4572726f723a204465706f7369742066656520746f6f20686967682e0000000060448201526064016104ae565b610511610cb5565b5f6004848154811061052557610525611a4f565b5f9182526020909120600690910201600481015490915060ff161561056b576105678361056183600101546006546112b690919063ffffffff16565b90611396565b6006555b600181019290925560059091015550565b5f3390505f6004848154811061059457610594611a4f565b5f91825260208083208784526005825260408085206001600160a01b0388168652909252922080546006909202909201925084111561060a5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016104ae565b6106138561073d565b5f61064e8260010154610648670de0b6b3a76400006106428760030154875f015461131890919063ffffffff16565b906113f4565b906112b6565b905080156106a457610660848261144e565b836001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04868260405161069b91815260200190565b60405180910390a25b81546106b090866112b6565b80835560038401546106d091670de0b6b3a7640000916106429190611318565b600183015584156106f15782546106f1906001600160a01b031685876114f2565b85846001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688760405161072d91815260200190565b60405180910390a3505050505050565b5f6004828154811061075157610751611a4f565b905f5260205f20906006020190508060020154421161076e575050565b80546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156107b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d79190611a63565b9050805f036107eb57504260029091015550565b600482015460ff1661081c5760048201805460ff1916600190811790915582015460065461081891611396565b6006555b60065415610881575f6108338360020154426103c3565b90505f61085360065461064286600101548561131890919063ffffffff16565b905061087961086e8461064284670de0b6b3a7640000611318565b600386015490611396565b600385015550505b504260029091015550565b5f600482815481106108a0576108a0611a4f565b5f918252602080832085845260058252604080852033808752935284208054858255600182019590955560069093020180549094509192916108ef916001600160a01b039190911690836114f2565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a350505050565b6002546001600160a01b031633146109565760405162461bcd60e51b81526004016104ae90611a03565b6008546109669062093a80611a8e565b421015610a3c576003546001600160a01b03908116908416036109b35760405162461bcd60e51b8152602060048201526005602482015264636f62726160d81b60448201526064016104ae565b6004545f5b81811015610a39575f600482815481106109d4576109d4611a4f565b5f918252602090912060069091020180549091506001600160a01b0390811690871603610a305760405162461bcd60e51b815260206004820152600a6024820152693837b7b6173a37b5b2b760b11b60448201526064016104ae565b506001016109b8565b50505b610a506001600160a01b03841682846114f2565b505050565b6002546001600160a01b03163314610a7f5760405162461bcd60e51b81526004016104ae90611a03565b6101f4811115610ad15760405162461bcd60e51b815260206004820152601c60248201527f4572726f723a204465706f7369742066656520746f6f20686967682e0000000060448201526064016104ae565b610ada84611555565b8215610ae857610ae8610cb5565b600754421015610b1857815f03610b03576007549150610b2d565b600754821015610b135760075491505b610b2d565b811580610b2457504282105b15610b2d574291505b5f60075483111580610b3f5750428311155b6040805160c0810182526001600160a01b038881168252602082018a81529282018781525f60608401818152861580156080870190815260a087018b815260048054600181018255955296517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b600690950294850180546001600160a01b031916919097161790955595517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c83015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d82015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e82015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f8201805460ff191691151591909117905590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a090910155909150610cad57600654610ca99087611396565b6006555b505050505050565b6004545f5b81811015610cd357610ccb8161073d565b600101610cba565b5050565b6001546001600160a01b03163314610d3d5760405162461bcd60e51b8152602060048201526024808201527f6f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201526330ba37b960e11b60648201526084016104ae565b8215610db75760405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303815f875af1158015610d8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db19190611aa1565b50610e2f565b6040516323b872dd60e01b81526001600160a01b038581166004830152336024830152604482018490528216906323b872dd906064016020604051808303815f875af1158015610e09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2d9190611aa1565b505b50505050565b5f8060048481548110610e4a57610e4a611a4f565b5f91825260208083208784526005825260408085206001600160a01b03898116875293528085206006949094029091016003810154815492516370a0823160e01b815230600482015291965093949291909116906370a0823190602401602060405180830381865afa158015610ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190611a63565b9050836002015442118015610efa57508015155b15610f55575f610f0e8560020154426103c3565b90505f610f2e60065461064288600101548561131890919063ffffffff16565b9050610f50610f498461064284670de0b6b3a7640000611318565b8590611396565b935050505b610f7f8360010154610648670de0b6b3a764000061064286885f015461131890919063ffffffff16565b979650505050505050565b6002546001600160a01b03163314610fb45760405162461bcd60e51b81526004016104ae90611a03565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f3390505f60048481548110610fee57610fee611a4f565b5f91825260208083208784526005825260408085206001600160a01b03881686529092529220600690910290910191506110278561073d565b8054156110b5575f61105d8260010154610648670de0b6b3a76400006106428760030154875f015461131890919063ffffffff16565b905080156110b35761106f848261144e565b836001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040516110aa91815260200190565b60405180910390a25b505b831561124c5781546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611100573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111249190611a63565b835490915061113e906001600160a01b03168530886115ed565b82546040516370a0823160e01b81523060048201526111ad9183916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611189573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106489190611a63565b94505f6111cd61271061064286600501548961131890919063ffffffff16565b90506111d986826112b6565b600b5485549197506111f8916001600160a01b039081169116836114f2565b846001600160a01b03167f25aa3e72ff0185ce05d6c741df2c1304b49f736fe5cfeee817a39c330910ea928260405161123391815260200190565b60405180910390a282546112479087611396565b835550505b6003820154815461126a91670de0b6b3a76400009161064291611318565b600182015560405184815285906001600160a01b038516907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a35050505050565b5f828211156113075760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016104ae565b6113118284611abc565b9392505050565b5f825f0361132757505f61047e565b5f6113328385611acf565b90508261133f8583611ae6565b146113115760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104ae565b5f806113a28385611a8e565b9050838110156113115760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104ae565b5f8082116114445760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064016104ae565b6113118284611ae6565b6003546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611494573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b89190611a63565b90508015610a5057808211156114df57600354610a50906001600160a01b031684836114f2565b600354610a50906001600160a01b031684845b6040516001600160a01b038316602482015260448101829052610a5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611625565b6004545f5b81811015610a5057826001600160a01b03166004828154811061157f5761157f611a4f565b5f9182526020909120600690910201546001600160a01b0316036115e55760405162461bcd60e51b815260206004820181905260248201527f436f62726147656e65736973506f6f6c3a206578697374696e6720706f6f6c3f60448201526064016104ae565b60010161155a565b6040516001600160a01b0380851660248301528316604482015260648101829052610e2f9085906323b872dd60e01b9060840161151e565b5f611679826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116f69092919063ffffffff16565b805190915015610a5057808060200190518101906116979190611aa1565b610a505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104ae565b606061170484845f8561170c565b949350505050565b60608247101561176d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104ae565b843b6117bb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104ae565b5f80866001600160a01b031685876040516117d69190611b05565b5f6040518083038185875af1925050503d805f8114611810576040519150601f19603f3d011682016040523d82523d5f602084013e611815565b606091505b5091509150610f7f8282866060831561182f575081611311565b82511561183f5782518084602001fd5b8160405162461bcd60e51b81526004016104ae9190611b1b565b5f60208284031215611869575f80fd5b5035919050565b5f8060408385031215611881575f80fd5b50508035926020909101359150565b5f805f606084860312156118a2575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b03811681146118cd575f80fd5b50565b5f805f606084860312156118e2575f80fd5b83356118ed816118b9565b9250602084013591506040840135611904816118b9565b809150509250925092565b80151581146118cd575f80fd5b5f805f805f60a08688031215611930575f80fd5b853594506020860135611942816118b9565b935060408601356119528161190f565b94979396509394606081013594506080013592915050565b5f805f806080858703121561197d575f80fd5b8435611988816118b9565b935060208501356119988161190f565b92506040850135915060608501356119af816118b9565b939692955090935050565b5f80604083850312156119cb575f80fd5b8235915060208301356119dd816118b9565b809150509250929050565b5f602082840312156119f8575f80fd5b8135611311816118b9565b6020808252602c908201527f436f62726147656e65736973506f6f6c3a2063616c6c6572206973206e6f742060408201526b3a34329037b832b930ba37b960a11b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611a73575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561047e5761047e611a7a565b5f60208284031215611ab1575f80fd5b81516113118161190f565b8181038181111561047e5761047e611a7a565b808202811582820484141761047e5761047e611a7a565b5f82611b0057634e487b7160e01b5f52601260045260245ffd5b500490565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fea26469706673582212208d653e4001c2d45da0b9423c17ff27db7e39805398dbc83845c79ef8e83a829664736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007e47dfb74c8015f1f21ba6050413d69cfb48068a0000000000000000000000000000000000000000000000000000000067c75bc0
-----Decoded View---------------
Arg [0] : _cobra (address): 0x7e47dFB74C8015f1F21BA6050413D69cfb48068a
Arg [1] : _poolStartTime (uint256): 1741118400
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007e47dfb74c8015f1f21ba6050413d69cfb48068a
Arg [1] : 0000000000000000000000000000000000000000000000000000000067c75bc0
Deployed Bytecode Sourcemap
25459:11810:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26911:51;;26951:11;26911:51;;;;;160:25:1;;;148:2;133:18;26911:51:0;;;;;;;;26344:19;;;;;-1:-1:-1;;;;;26344:19:0;;;;;;-1:-1:-1;;;;;374:32:1;;;356:51;;344:2;329:18;26344:19:0;196:217:1;26399:26:0;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;962:32:1;;;944:51;;1026:2;1011:18;;1004:34;;;;1054:18;;;1047:34;;;;1112:2;1097:18;;1090:34;1168:14;1161:22;1155:3;1140:19;;1133:51;982:3;1200:19;;1193:35;931:3;916:19;26399:26:0;649:585:1;26644:34:0;;;;;;30536:657;;;;;;:::i;:::-;;:::i;29963:496::-;;;;;;:::i;:::-;;:::i;:::-;;34713:893;;;;;;:::i;:::-;;:::i;32375:912::-;;;;;;:::i;:::-;;:::i;35677:377::-;;;;;;:::i;:::-;;:::i;36660:606::-;;;;;;:::i;:::-;;:::i;25604:23::-;;;;;-1:-1:-1;;;;;25604:23:0;;;26730:28;;;;;;28443:1423;;;;;;:::i;:::-;;:::i;32119:180::-;;;:::i;24004:321::-;;;;;;:::i;:::-;;:::i;26808:26::-;;;;;;26483:64;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:25:1;;;5139:2;5124:18;;5117:34;;;;5056:18;26483:64:0;4909:248:1;26859:35:0;;;;;;26991:29;;;;;;31257:779;;;;;;:::i;:::-;;:::i;36551:101::-;;;;;;:::i;:::-;;:::i;27063:45::-;;27105:3;27063:45;;33322:1355;;;;;;:::i;:::-;;:::i;27117:24::-;;;;;-1:-1:-1;;;;;27117:24:0;;;26399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26399:26:0;;;;-1:-1:-1;26399:26:0;;;;;;;;;;:::o;30536:657::-;30621:7;30658;30645:9;:20;30641:34;;-1:-1:-1;30674:1:0;30667:8;;30641:34;30701:11;;30690:7;:22;30686:500;;30746:11;;30733:9;:24;30729:38;;-1:-1:-1;30766:1:0;30759:8;;30729:38;30799:13;;30786:9;:26;30782:89;;30821:50;30856:14;;30821:30;30837:13;;30821:11;;:15;;:30;;;;:::i;:::-;:34;;:50::i;:::-;30814:57;;;;30782:89;30893:46;30924:14;;30893:26;30909:9;30893:11;;:15;;:26;;;;:::i;30686:500::-;30987:13;;30976:7;:24;30972:38;;-1:-1:-1;31009:1:0;31002:8;;30972:38;31042:13;;31029:9;:26;31025:85;;31064:46;31095:14;;31064:26;31076:13;;31064:7;:11;;:26;;;;:::i;31025:85::-;31159:14;;31132:42;;:22;:7;31144:9;31132:11;:22::i;30686:500::-;30536:657;;;;:::o;29963:496::-;28004:8;;-1:-1:-1;;;;;28004:8:0;28016:10;28004:22;27996:79;;;;-1:-1:-1;;;27996:79:0;;;;;;;:::i;:::-;;;;;;;;;27105:3:::1;30071:11;:30;;30063:71;;;::::0;-1:-1:-1;;;30063:71:0;;6037:2:1;30063:71:0::1;::::0;::::1;6019:21:1::0;6076:2;6056:18;;;6049:30;6115;6095:18;;;6088:58;6163:18;;30063:71:0::1;5835:352:1::0;30063:71:0::1;30145:17;:15;:17::i;:::-;30173:21;30197:8;30206:4;30197:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;30226;::::0;::::1;::::0;30197;;-1:-1:-1;30226:14:0::1;;30222:150;;;30275:85;30334:11;30275:36;30295:4;:15;;;30275;;:19;;:36;;;;:::i;:::-;:40:::0;::::1;:85::i;:::-;30257:15;:103:::0;30222:150:::1;30382:15;::::0;::::1;:29:::0;;;;30422:15:::1;::::0;;::::1;:29:::0;-1:-1:-1;29963:496:0:o;34713:893::-;34780:15;34798:10;34780:28;;34819:21;34843:8;34852:4;34843:14;;;;;;;;:::i;:::-;;;;;;;;;34892;;;:8;:14;;;;;;-1:-1:-1;;;;;34892:23:0;;;;;;;;;34934:11;;34843:14;;;;;;;;-1:-1:-1;34934:22:0;-1:-1:-1;34934:22:0;34926:53;;;;-1:-1:-1;;;34926:53:0;;6526:2:1;34926:53:0;;;6508:21:1;6565:2;6545:18;;;6538:30;-1:-1:-1;;;6584:18:1;;;6577:48;6642:18;;34926:53:0;6324:342:1;34926:53:0;34990:16;35001:4;34990:10;:16::i;:::-;35017;35036:69;35089:4;:15;;;35036:48;35079:4;35036:38;35052:4;:21;;;35036:4;:11;;;:15;;:38;;;;:::i;:::-;:42;;:48::i;:::-;:52;;:69::i;:::-;35017:88;-1:-1:-1;35120:12:0;;35116:130;;35149:36;35167:7;35176:8;35149:17;:36::i;:::-;35216:7;-1:-1:-1;;;;;35205:29:0;;35225:8;35205:29;;;;160:25:1;;148:2;133:18;;14:177;35205:29:0;;;;;;;;35116:130;35354:11;;:24;;35370:7;35354:15;:24::i;:::-;35340:38;;;35423:21;;;;35407:48;;35450:4;;35407:38;;35340;35407:15;:38::i;:48::-;35389:15;;;:66;35470:11;;35466:85;;35498:10;;:41;;-1:-1:-1;;;;;35498:10:0;35522:7;35531;35498:23;:41::i;:::-;35584:4;35575:7;-1:-1:-1;;;;;35566:32:0;;35590:7;35566:32;;;;160:25:1;;148:2;133:18;;14:177;35566:32:0;;;;;;;;34769:837;;;;34713:893;;:::o;32375:912::-;32427:21;32451:8;32460:4;32451:14;;;;;;;;:::i;:::-;;;;;;;;;;;32427:38;;32499:4;:19;;;32480:15;:38;32476:77;;32535:7;32375:912;:::o;32476:77::-;32585:10;;:35;;-1:-1:-1;;;32585:35:0;;32614:4;32585:35;;;356:51:1;32563:19:0;;-1:-1:-1;;;;;32585:10:0;;:20;;329:18:1;;32585:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32563:57;;32635:11;32650:1;32635:16;32631:107;;-1:-1:-1;32690:15:0;32668:19;;;;:37;-1:-1:-1;32375:912:0:o;32631:107::-;32753:14;;;;;;32748:138;;32784:14;;;:21;;-1:-1:-1;;32784:21:0;32801:4;32784:21;;;;;;32858:15;;;32838;;:36;;:19;:36::i;:::-;32820:15;:54;32748:138;32900:15;;:19;32896:336;;32936:24;32963:56;32982:4;:19;;;33003:15;32963:18;:56::i;:::-;32936:83;;33034:20;33057:58;33099:15;;33057:37;33078:4;:15;;;33057:16;:20;;:37;;;;:::i;:58::-;33034:81;-1:-1:-1;33154:66:0;33180:39;33207:11;33180:22;33034:81;33197:4;33180:16;:22::i;:39::-;33154:21;;;;;:25;:66::i;:::-;33130:21;;;:90;-1:-1:-1;;32896:336:0;-1:-1:-1;33264:15:0;33242:19;;;;:37;-1:-1:-1;32375:912:0:o;35677:377::-;35736:21;35760:8;35769:4;35760:14;;;;;;;;:::i;:::-;;;;;;;;;35809;;;:8;:14;;;;;;35824:10;35809:26;;;;;;;35864:11;;35886:15;;;-1:-1:-1;35912:15:0;;:19;;;;35760:14;;;;;35942:10;;35760:14;;-1:-1:-1;35809:26:0;;35864:11;35942:44;;-1:-1:-1;;;;;35942:10:0;;;;;35864:11;35942:23;:44::i;:::-;36002;;160:25:1;;;36032:4:0;;36020:10;;36002:44;;148:2:1;133:18;36002:44:0;;;;;;;35725:329;;;35677:377;:::o;36660:606::-;28004:8;;-1:-1:-1;;;;;28004:8:0;28016:10;28004:22;27996:79;;;;-1:-1:-1;;;27996:79:0;;;;;;;:::i;:::-;36796:11:::1;::::0;:20:::1;::::0;36810:6:::1;36796:20;:::i;:::-;36778:15;:38;36774:443;;;36952:5;::::0;-1:-1:-1;;;;;36952:5:0;;::::1;36942:15:::0;;::::1;::::0;36934:33:::1;;;::::0;-1:-1:-1;;;36934:33:0;;7324:2:1;36934:33:0::1;::::0;::::1;7306:21:1::0;7363:1;7343:18;;;7336:29;-1:-1:-1;;;7381:18:1;;;7374:35;7426:18;;36934:33:0::1;7122:328:1::0;36934:33:0::1;36999:8;:15:::0;36982:14:::1;37029:177;37057:6;37051:3;:12;37029:177;;;37091:21;37115:8;37124:3;37115:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;37165:10:::0;;37115:13;;-1:-1:-1;;;;;;37165:10:0;;::::1;37155:20:::0;;::::1;::::0;37147:43:::1;;;::::0;-1:-1:-1;;;37147:43:0;;7657:2:1;37147:43:0::1;::::0;::::1;7639:21:1::0;7696:2;7676:18;;;7669:30;-1:-1:-1;;;7715:18:1;;;7708:40;7765:18;;37147:43:0::1;7455:334:1::0;37147:43:0::1;-1:-1:-1::0;37065:5:0::1;;37029:177;;;;36818:399;36774:443;37227:31;-1:-1:-1::0;;;;;37227:19:0;::::1;37247:2:::0;37251:6;37227:19:::1;:31::i;:::-;36660:606:::0;;;:::o;28443:1423::-;28004:8;;-1:-1:-1;;;;;28004:8:0;28016:10;28004:22;27996:79;;;;-1:-1:-1;;;27996:79:0;;;;;;;:::i;:::-;27105:3:::1;28647:11;:30;;28639:71;;;::::0;-1:-1:-1;;;28639:71:0;;6037:2:1;28639:71:0::1;::::0;::::1;6019:21:1::0;6076:2;6056:18;;;6049:30;6115;6095:18;;;6088:58;6163:18;;28639:71:0::1;5835:352:1::0;28639:71:0::1;28721:26;28740:6;28721:18;:26::i;:::-;28762:11;28758:61;;;28790:17;:15;:17::i;:::-;28851:13;;28833:15;:31;28829:534;;;28918:15;28937:1;28918:20:::0;28914:243:::1;;28977:13;;28959:31;;28829:534;;28914:243;29053:13;;29035:15;:31;29031:111;;;29109:13;;29091:31;;29031:111;28829:534;;;29225:20:::0;;;:57:::1;;;29267:15;29249;:33;29225:57;29221:131;;;29321:15;29303:33;;29221:131;29373:15;29420:13;;29401:15;:32;;29400:83;;;;29467:15;29448;:34;;29400:83;29508:246;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;29508:246:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;29508:246:0;;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;29494:8:::1;:261:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;29494:261:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29494:261:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;;;;;;;29508:246;;-1:-1:-1;29766:93:0::1;;29815:15;::::0;:32:::1;::::0;29835:11;29815:19:::1;:32::i;:::-;29797:15;:50:::0;29766:93:::1;28628:1238;28443:1423:::0;;;;;:::o;32119:180::-;32181:8;:15;32164:14;32207:85;32235:6;32229:3;:12;32207:85;;;32265:15;32276:3;32265:10;:15::i;:::-;32243:5;;32207:85;;;;32153:146;32119:180::o;24004:321::-;23913:8;;-1:-1:-1;;;;;23913:8:0;23925:10;23913:22;23905:71;;;;-1:-1:-1;;;23905:71:0;;7996:2:1;23905:71:0;;;7978:21:1;8035:2;8015:18;;;8008:30;8074:34;8054:18;;;8047:62;-1:-1:-1;;;8125:18:1;;;8118:34;8169:19;;23905:71:0;7794:400:1;23905:71:0;24135:11:::1;24131:113;;;24163:48;::::0;-1:-1:-1;;;24163:48:0;;24184:10:::1;24163:48;::::0;::::1;8373:51:1::0;8440:18;;;8433:34;;;-1:-1:-1;;;;;24163:20:0;::::1;::::0;::::1;::::0;8346:18:1;;24163:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24226:7;;24131:113;24254:63;::::0;-1:-1:-1;;;24254:63:0;;-1:-1:-1;;;;;8948:32:1;;;24254:63:0::1;::::0;::::1;8930:51:1::0;24290:10:0::1;8997:18:1::0;;;8990:60;9066:18;;;9059:34;;;24254:24:0;::::1;::::0;::::1;::::0;8903:18:1;;24254:63:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23987:1;24004:321:::0;;;;:::o;31257:779::-;31331:7;31351:21;31375:8;31384:4;31375:14;;;;;;;;:::i;:::-;;;;;;;;;31424;;;:8;:14;;;;;;-1:-1:-1;;;;;31424:21:0;;;;;;;;;;31375:14;;;;;;;;31483:21;;;;31537:10;;:35;;-1:-1:-1;;;31537:35:0;;31566:4;31537:35;;;356:51:1;31375:14:0;;-1:-1:-1;31424:21:0;;31375:14;31537:10;;;;;:20;;329:18:1;;31537:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31515:57;;31605:4;:19;;;31587:15;:37;:57;;;;-1:-1:-1;31628:16:0;;;31587:57;31583:364;;;31661:24;31688:56;31707:4;:19;;;31728:15;31688:18;:56::i;:::-;31661:83;;31759:20;31782:58;31824:15;;31782:37;31803:4;:15;;;31782:16;:20;;:37;;;;:::i;:58::-;31759:81;-1:-1:-1;31874:61:0;31895:39;31922:11;31895:22;31759:81;31912:4;31895:16;:22::i;:39::-;31874:16;;:20;:61::i;:::-;31855:80;;31646:301;;31583:364;31964:64;32012:4;:15;;;31964:43;32002:4;31964:33;31980:16;31964:4;:11;;;:15;;:33;;;;:::i;:64::-;31957:71;31257:779;-1:-1:-1;;;;;;;31257:779:0:o;36551:101::-;28004:8;;-1:-1:-1;;;;;28004:8:0;28016:10;28004:22;27996:79;;;;-1:-1:-1;;;27996:79:0;;;;;;;:::i;:::-;36624:8:::1;:20:::0;;-1:-1:-1;;;;;;36624:20:0::1;-1:-1:-1::0;;;;;36624:20:0;;;::::1;::::0;;;::::1;::::0;;36551:101::o;33322:1355::-;33388:15;33406:10;33388:28;;33427:21;33451:8;33460:4;33451:14;;;;;;;;:::i;:::-;;;;;;;;;33500;;;:8;:14;;;;;;-1:-1:-1;;;;;33500:23:0;;;;;;;;;33451:14;;;;;;;;-1:-1:-1;33534:16:0;33509:4;33534:10;:16::i;:::-;33565:11;;:15;33561:292;;33597:16;33616:69;33669:4;:15;;;33616:48;33659:4;33616:38;33632:4;:21;;;33616:4;:11;;;:15;;:38;;;;:::i;:69::-;33597:88;-1:-1:-1;33704:12:0;;33700:142;;33737:36;33755:7;33764:8;33737:17;:36::i;:::-;33808:7;-1:-1:-1;;;;;33797:29:0;;33817:8;33797:29;;;;160:25:1;;148:2;133:18;;14:177;33797:29:0;;;;;;;;33700:142;33582:271;33561:292;33867:11;;33863:683;;34005:10;;:35;;-1:-1:-1;;;34005:35:0;;34034:4;34005:35;;;356:51:1;33976:26:0;;-1:-1:-1;;;;;34005:10:0;;:20;;329:18:1;;34005:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34055:10;;33976:64;;-1:-1:-1;34055:60:0;;-1:-1:-1;;;;;34055:10:0;34083:7;34100:4;34107:7;34055:27;:60::i;:::-;34140:10;;:35;;-1:-1:-1;;;34140:35:0;;34169:4;34140:35;;;356:51:1;34140:59:0;;34180:18;;-1:-1:-1;;;;;34140:10:0;;;;:20;;329:18:1;;34140:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:59::-;34130:69;;34261:17;34281:39;34314:5;34281:28;34293:4;:15;;;34281:7;:11;;:28;;;;:::i;:39::-;34261:59;-1:-1:-1;34345:22:0;:7;34261:59;34345:11;:22::i;:::-;34406:9;;34382:10;;34335:32;;-1:-1:-1;34382:45:0;;-1:-1:-1;;;;;34382:10:0;;;;34406:9;34417;34382:23;:45::i;:::-;34462:7;-1:-1:-1;;;;;34447:34:0;;34471:9;34447:34;;;;160:25:1;;148:2;133:18;;14:177;34447:34:0;;;;;;;;34510:11;;:24;;34526:7;34510:15;:24::i;:::-;34496:38;;-1:-1:-1;;33863:683:0;34590:21;;;;34574:11;;:48;;34617:4;;34574:38;;:15;:38::i;:48::-;34556:15;;;:66;34638:31;;160:25:1;;;34655:4:0;;-1:-1:-1;;;;;34638:31:0;;;;;148:2:1;133:18;34638:31:0;;;;;;;33377:1300;;;33322:1355;;:::o;3193:158::-;3251:7;3284:1;3279;:6;;3271:49;;;;-1:-1:-1;;;3271:49:0;;9306:2:1;3271:49:0;;;9288:21:1;9345:2;9325:18;;;9318:30;9384:32;9364:18;;;9357:60;9434:18;;3271:49:0;9104:354:1;3271:49:0;3338:5;3342:1;3338;:5;:::i;:::-;3331:12;3193:158;-1:-1:-1;;;3193:158:0:o;3610:220::-;3668:7;3692:1;3697;3692:6;3688:20;;-1:-1:-1;3707:1:0;3700:8;;3688:20;3719:9;3731:5;3735:1;3731;:5;:::i;:::-;3719:17;-1:-1:-1;3764:1:0;3755:5;3759:1;3719:17;3755:5;:::i;:::-;:10;3747:56;;;;-1:-1:-1;;;3747:56:0;;10193:2:1;3747:56:0;;;10175:21:1;10232:2;10212:18;;;10205:30;10271:34;10251:18;;;10244:62;-1:-1:-1;;;10322:18:1;;;10315:31;10363:19;;3747:56:0;9991:397:1;2731:179:0;2789:7;;2821:5;2825:1;2821;:5;:::i;:::-;2809:17;;2850:1;2845;:6;;2837:46;;;;-1:-1:-1;;;2837:46:0;;10595:2:1;2837:46:0;;;10577:21:1;10634:2;10614:18;;;10607:30;10673:29;10653:18;;;10646:57;10720:18;;2837:46:0;10393:351:1;4308:153:0;4366:7;4398:1;4394;:5;4386:44;;;;-1:-1:-1;;;4386:44:0;;10951:2:1;4386:44:0;;;10933:21:1;10990:2;10970:18;;;10963:30;11029:28;11009:18;;;11002:56;11075:18;;4386:44:0;10749:350:1;4386:44:0;4448:5;4452:1;4448;:5;:::i;36170:373::-;36271:5;;:30;;-1:-1:-1;;;36271:30:0;;36295:4;36271:30;;;356:51:1;36247:21:0;;-1:-1:-1;;;;;36271:5:0;;:15;;329:18:1;;36271:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36247:54;-1:-1:-1;36316:17:0;;36312:224;;36364:13;36354:7;:23;36350:175;;;36398:5;;:38;;-1:-1:-1;;;;;36398:5:0;36417:3;36422:13;36398:18;:38::i;36350:175::-;36477:5;;:32;;-1:-1:-1;;;;;36477:5:0;36496:3;36501:7;18896:177;19006:58;;-1:-1:-1;;;;;8391:32:1;;19006:58:0;;;8373:51:1;8440:18;;;8433:34;;;18979:86:0;;18999:5;;-1:-1:-1;;;19029:23:0;8346:18:1;;19006:58:0;;;;-1:-1:-1;;19006:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;19006:58:0;-1:-1:-1;;;;;;19006:58:0;;;;;;;;;;18979:19;:86::i;28103:262::-;28188:8;:15;28171:14;28214:144;28242:6;28236:3;:12;28214:144;;;28303:6;-1:-1:-1;;;;;28280:29:0;:8;28289:3;28280:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:19;-1:-1:-1;;;;;28280:19:0;:29;28272:74;;;;-1:-1:-1;;;28272:74:0;;11306:2:1;28272:74:0;;;11288:21:1;;;11325:18;;;11318:30;11384:34;11364:18;;;11357:62;11436:18;;28272:74:0;11104:356:1;28272:74:0;28250:5;;28214:144;;19081:205;19209:68;;-1:-1:-1;;;;;8948:32:1;;;19209:68:0;;;8930:51:1;9017:32;;8997:18;;;8990:60;9066:18;;;9059:34;;;19182:96:0;;19202:5;;-1:-1:-1;;;19232:27:0;8903:18:1;;19209:68:0;8728:371:1;21201:761:0;21625:23;21651:69;21679:4;21651:69;;;;;;;;;;;;;;;;;21659:5;-1:-1:-1;;;;;21651:27:0;;;:69;;;;;:::i;:::-;21735:17;;21625:95;;-1:-1:-1;21735:21:0;21731:224;;21877:10;21866:30;;;;;;;;;;;;:::i;:::-;21858:85;;;;-1:-1:-1;;;21858:85:0;;11667:2:1;21858:85:0;;;11649:21:1;11706:2;11686:18;;;11679:30;11745:34;11725:18;;;11718:62;-1:-1:-1;;;11796:18:1;;;11789:40;11846:19;;21858:85:0;11465:406:1;11088:195:0;11191:12;11223:52;11245:6;11253:4;11259:1;11262:12;11223:21;:52::i;:::-;11216:59;11088:195;-1:-1:-1;;;;11088:195:0:o;12140:530::-;12267:12;12325:5;12300:21;:30;;12292:81;;;;-1:-1:-1;;;12292:81:0;;12078:2:1;12292:81:0;;;12060:21:1;12117:2;12097:18;;;12090:30;12156:34;12136:18;;;12129:62;-1:-1:-1;;;12207:18:1;;;12200:36;12253:19;;12292:81:0;11876:402:1;12292:81:0;8537:20;;12384:60;;;;-1:-1:-1;;;12384:60:0;;12485:2:1;12384:60:0;;;12467:21:1;12524:2;12504:18;;;12497:30;12563:31;12543:18;;;12536:59;12612:18;;12384:60:0;12283:353:1;12384:60:0;12518:12;12532:23;12559:6;-1:-1:-1;;;;;12559:11:0;12579:5;12587:4;12559:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12517:75;;;;12610:52;12628:7;12637:10;12649:12;14795;14824:7;14820:595;;;-1:-1:-1;14855:10:0;14848:17;;14820:595;14969:17;;:21;14965:439;;15232:10;15226:17;15293:15;15280:10;15276:2;15272:19;15265:44;14965:439;15375:12;15368:20;;-1:-1:-1;;;15368:20:0;;;;;;;;:::i;418:226:1:-;477:6;530:2;518:9;509:7;505:23;501:32;498:52;;;546:1;543;536:12;498:52;-1:-1:-1;591:23:1;;418:226;-1:-1:-1;418:226:1:o;1239:346::-;1307:6;1315;1368:2;1356:9;1347:7;1343:23;1339:32;1336:52;;;1384:1;1381;1374:12;1336:52;-1:-1:-1;;1429:23:1;;;1549:2;1534:18;;;1521:32;;-1:-1:-1;1239:346:1:o;1590:466::-;1667:6;1675;1683;1736:2;1724:9;1715:7;1711:23;1707:32;1704:52;;;1752:1;1749;1742:12;1704:52;-1:-1:-1;;1797:23:1;;;1917:2;1902:18;;1889:32;;-1:-1:-1;2020:2:1;2005:18;;;1992:32;;1590:466;-1:-1:-1;1590:466:1:o;2061:139::-;-1:-1:-1;;;;;2144:31:1;;2134:42;;2124:70;;2190:1;2187;2180:12;2124:70;2061:139;:::o;2205:538::-;2296:6;2304;2312;2365:2;2353:9;2344:7;2340:23;2336:32;2333:52;;;2381:1;2378;2371:12;2333:52;2420:9;2407:23;2439:39;2472:5;2439:39;:::i;:::-;2497:5;-1:-1:-1;2575:2:1;2560:18;;2547:32;;-1:-1:-1;2657:2:1;2642:18;;2629:32;2670:41;2629:32;2670:41;:::i;:::-;2730:7;2720:17;;;2205:538;;;;;:::o;2956:118::-;3042:5;3035:13;3028:21;3021:5;3018:32;3008:60;;3064:1;3061;3054:12;3079:766;3185:6;3193;3201;3209;3217;3270:3;3258:9;3249:7;3245:23;3241:33;3238:53;;;3287:1;3284;3277:12;3238:53;3332:23;;;-1:-1:-1;3431:2:1;3416:18;;3403:32;3444:41;3403:32;3444:41;:::i;:::-;3504:7;-1:-1:-1;3563:2:1;3548:18;;3535:32;3576:30;3535:32;3576:30;:::i;:::-;3079:766;;;;-1:-1:-1;3625:7:1;;3705:2;3690:18;;3677:32;;-1:-1:-1;3808:3:1;3793:19;3780:33;;3079:766;-1:-1:-1;;3079:766:1:o;3850:674::-;3947:6;3955;3963;3971;4024:3;4012:9;4003:7;3999:23;3995:33;3992:53;;;4041:1;4038;4031:12;3992:53;4080:9;4067:23;4099:39;4132:5;4099:39;:::i;:::-;4157:5;-1:-1:-1;4214:2:1;4199:18;;4186:32;4227:30;4186:32;4227:30;:::i;:::-;4276:7;-1:-1:-1;4356:2:1;4341:18;;4328:32;;-1:-1:-1;4438:2:1;4423:18;;4410:32;4451:41;4410:32;4451:41;:::i;:::-;3850:674;;;;-1:-1:-1;3850:674:1;;-1:-1:-1;;3850:674:1:o;4529:375::-;4597:6;4605;4658:2;4646:9;4637:7;4633:23;4629:32;4626:52;;;4674:1;4671;4664:12;4626:52;4719:23;;;-1:-1:-1;4818:2:1;4803:18;;4790:32;4831:41;4790:32;4831:41;:::i;:::-;4891:7;4881:17;;;4529:375;;;;;:::o;5162:255::-;5221:6;5274:2;5262:9;5253:7;5249:23;5245:32;5242:52;;;5290:1;5287;5280:12;5242:52;5329:9;5316:23;5348:39;5381:5;5348:39;:::i;5422:408::-;5624:2;5606:21;;;5663:2;5643:18;;;5636:30;5702:34;5697:2;5682:18;;5675:62;-1:-1:-1;;;5768:2:1;5753:18;;5746:42;5820:3;5805:19;;5422:408::o;6192:127::-;6253:10;6248:3;6244:20;6241:1;6234:31;6284:4;6281:1;6274:15;6308:4;6305:1;6298:15;6671:184;6741:6;6794:2;6782:9;6773:7;6769:23;6765:32;6762:52;;;6810:1;6807;6800:12;6762:52;-1:-1:-1;6833:16:1;;6671:184;-1:-1:-1;6671:184:1:o;6860:127::-;6921:10;6916:3;6912:20;6909:1;6902:31;6952:4;6949:1;6942:15;6976:4;6973:1;6966:15;6992:125;7057:9;;;7078:10;;;7075:36;;;7091:18;;:::i;8478:245::-;8545:6;8598:2;8586:9;8577:7;8573:23;8569:32;8566:52;;;8614:1;8611;8604:12;8566:52;8646:9;8640:16;8665:28;8687:5;8665:28;:::i;9463:128::-;9530:9;;;9551:11;;;9548:37;;;9565:18;;:::i;9596:168::-;9669:9;;;9700;;9717:15;;;9711:22;;9697:37;9687:71;;9738:18;;:::i;9769:217::-;9809:1;9835;9825:132;;9879:10;9874:3;9870:20;9867:1;9860:31;9914:4;9911:1;9904:15;9942:4;9939:1;9932:15;9825:132;-1:-1:-1;9971:9:1;;9769:217::o;12641:301::-;12770:3;12808:6;12802:13;12854:6;12847:4;12839:6;12835:17;12830:3;12824:37;12916:1;12880:16;;12905:13;;;-1:-1:-1;12880:16:1;12641:301;-1:-1:-1;12641:301:1:o;12947:418::-;13096:2;13085:9;13078:21;13059:4;13128:6;13122:13;13171:6;13166:2;13155:9;13151:18;13144:34;13230:6;13225:2;13217:6;13213:15;13208:2;13197:9;13193:18;13187:50;13286:1;13281:2;13272:6;13261:9;13257:22;13253:31;13246:42;13356:2;13349;13345:7;13340:2;13332:6;13328:15;13324:29;13313:9;13309:45;13305:54;13297:62;;;12947:418;;;;:::o
Swarm Source
ipfs://8d653e4001c2d45da0b9423c17ff27db7e39805398dbc83845c79ef8e83a8296
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.