More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 117 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 18183741 | 307 days ago | IN | 0 ETH | 0.00129839 | ||||
Claim | 18183731 | 307 days ago | IN | 0 ETH | 0.00140527 | ||||
Claim | 18183730 | 307 days ago | IN | 0 ETH | 0.00143027 | ||||
Unstake | 18171670 | 308 days ago | IN | 0 ETH | 0.00176508 | ||||
Unstake | 18169914 | 309 days ago | IN | 0 ETH | 0.00069822 | ||||
Unstake | 18101594 | 318 days ago | IN | 0 ETH | 0.0004888 | ||||
Unstake | 18101510 | 318 days ago | IN | 0 ETH | 0.00064538 | ||||
Unstake | 18101506 | 318 days ago | IN | 0 ETH | 0.0006569 | ||||
Unstake | 18101488 | 318 days ago | IN | 0 ETH | 0.00080687 | ||||
Unstake | 18101485 | 318 days ago | IN | 0 ETH | 0.00074219 | ||||
Claim Any Token | 17491320 | 404 days ago | IN | 0 ETH | 0.00072303 | ||||
Claim Any Token | 17491318 | 404 days ago | IN | 0 ETH | 0.00079131 | ||||
Unstake | 16630683 | 525 days ago | IN | 0 ETH | 0.00077888 | ||||
Unstake | 16347133 | 565 days ago | IN | 0 ETH | 0.00092311 | ||||
Unstake | 16242954 | 579 days ago | IN | 0 ETH | 0.00147831 | ||||
Unstake | 16168390 | 590 days ago | IN | 0 ETH | 0.00146928 | ||||
Stake | 16153386 | 592 days ago | IN | 0 ETH | 0.00457443 | ||||
Unstake | 16145994 | 593 days ago | IN | 0 ETH | 0.00296586 | ||||
Re Invest | 16096787 | 600 days ago | IN | 0 ETH | 0.00249421 | ||||
Unstake | 16096782 | 600 days ago | IN | 0 ETH | 0.00092835 | ||||
Unstake | 16083581 | 602 days ago | IN | 0 ETH | 0.00152077 | ||||
Unstake | 15981732 | 616 days ago | IN | 0 ETH | 0.00144591 | ||||
Unstake | 15896177 | 628 days ago | IN | 0 ETH | 0.00201295 | ||||
Unstake | 15839712 | 636 days ago | IN | 0 ETH | 0.00154299 | ||||
Unstake | 15816047 | 639 days ago | IN | 0 ETH | 0.00123279 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ConstantReturnStaking
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-13 */ // SPDX-License-Identifier: BSD-3-Clause pragma solidity 0.6.11; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @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.3._ */ 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.3._ */ 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); } } } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @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); } /** * @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"); } } } interface IUniswapV2Router { function WETH() external pure returns (address); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } //interface BuybackContract { // function depositByContract(address account, uint amount) external; //} contract ConstantReturnStaking is Ownable { using Address for address; using SafeMath for uint; using EnumerableSet for EnumerableSet.AddressSet; using SafeERC20 for IERC20; event Stake(address account, uint amount); event Unstake(address account, uint amount); event RewardsTransferred(address indexed holder, uint amount); event ReferralFeeTransferred(address indexed referrer, uint amount); event Reinvest(address indexed holder, uint amount); event StakingFeeChanged(uint newFee); event UnstakingFeeChanged(uint newFee); event ReferralFeeChanged(uint newFee); event UniswapV2RouterChanged(address router); event LockupTimeChanged(uint _newLockupTime); event TrustedDepositContractAdded(address contractAddress); event TrustedDepositContractRemoved(address contractAddress); //event BuybackContractChanged(address contractAddress); event FeeRecipientAddressChanged(address newAddress); event EmergencyDeclared(address indexed owner); // ============================= CONTRACT VARIABLES ============================== // stake token contract address address public TRUSTED_DEPOSIT_TOKEN_ADDRESS = 0x961C8c0B1aaD0c0b10a51FeF6a867E3091BCef17; address public TRUSTED_REWARD_TOKEN_ADDRESS = 0xBD100d061E120b2c67A24453CF6368E63f1Be056; //address public TRUSTED_BUYBACK_CONTRACT_ADDRESS; // earnings reward rate uint public REWARD_RATE_X_100 = 2500; uint public REWARD_INTERVAL = 365 days; // staking fee uint public STAKING_FEE_RATE_X_100 = 0; // unstaking fee uint public UNSTAKING_FEE_RATE_X_100 = 0; // this portion of earned rewards go to referrer uint public REFERRAL_FEE_RATE_X_100 = 500; // unstaking possible after LOCKUP_TIME uint public LOCKUP_TIME = 5 minutes; uint public constant EMERGENCY_WAIT_TIME = 3 days; // If there are any undistributed or unclaimed tokens left in contract after this time // Admin can claim them uint public constant adminCanClaimAfter = 395 days; // Uniswap v2 Router IUniswapV2Router public uniswapV2Router = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // ========================= END CONTRACT VARIABLES ============================== address public feeRecipientAddress; uint public totalClaimedRewards = 0; uint public totalClaimedReferralFee = 0; uint public immutable contractStartTime; bool public isEmergency = false; // Contracts are not allowed to deposit, claim or withdraw modifier noContractsAllowed() { require(!(address(msg.sender).isContract()) && tx.origin == msg.sender, "No Contracts Allowed!"); _; } modifier notDuringEmergency() { require(!isEmergency, "Cannot execute during emergency!"); _; } EnumerableSet.AddressSet private holders; mapping (address => uint) public depositedTokens; mapping (address => uint) public stakingTime; mapping (address => uint) public lastClaimedTime; mapping (address => uint) public totalEarnedTokens; mapping (address => uint) public rewardsPendingClaim; mapping (address => address) public referrals; mapping (address => uint) public totalReferralFeeEarned; mapping (address => EnumerableSet.AddressSet) private activeReferredAddressesOfUser; mapping (address => EnumerableSet.AddressSet) private totalReferredAddressesOfUser; mapping (address => bool) public isTrustedDepositContract; uint public adminClaimableTime; constructor( address _uniswapV2RouterAddress, address _feeRecipientAddress, address trustedDepositTokenAddress, address trustedRewardTokenAddress, uint referralFeeRateX100, uint stakingFeeRateX100, uint unstakingFeeRateX100, uint rewardRateX100, uint rewardInterval, uint lockupTime ) public { setUniswapV2Router(IUniswapV2Router(_uniswapV2RouterAddress)); setFeeRecipientAddress(_feeRecipientAddress); setStakingFeeRateX100(stakingFeeRateX100); setUnstakingFeeRateX100(unstakingFeeRateX100); setReferralFeeRateX100(referralFeeRateX100); require(trustedDepositTokenAddress != address(0), "Invalid deposit token address!"); require(trustedRewardTokenAddress != address(0), "Invalid reward token address!"); TRUSTED_DEPOSIT_TOKEN_ADDRESS = trustedDepositTokenAddress; TRUSTED_REWARD_TOKEN_ADDRESS = trustedRewardTokenAddress; REWARD_RATE_X_100 = rewardRateX100; REWARD_INTERVAL = rewardInterval; require(REWARD_INTERVAL <= 365 days, "Contract must expire in less than 365 days!"); setLockupTime(lockupTime); contractStartTime = now; //require(adminCanClaimAfter <= 395 days, "Admin Claimable Time should be less than 395 days!"); adminClaimableTime = now.add(adminCanClaimAfter); } function setFeeRecipientAddress(address newFeeRecipientAddress) public onlyOwner { require(newFeeRecipientAddress != address(0), "Invalid address!"); feeRecipientAddress = newFeeRecipientAddress; emit FeeRecipientAddressChanged(feeRecipientAddress); } //function setBuybackContractAddress(address trustedBuybackContractAddress) external onlyOwner { // require(trustedBuybackContractAddress != address(0), "Invalid address!"); // TRUSTED_BUYBACK_CONTRACT_ADDRESS = trustedBuybackContractAddress; // emit BuybackContractChanged(TRUSTED_BUYBACK_CONTRACT_ADDRESS); //} function setStakingFeeRateX100(uint _newStakingFeeRateX100) public onlyOwner { require(_newStakingFeeRateX100 < 100e2, "New Staking fee too much!"); STAKING_FEE_RATE_X_100 = _newStakingFeeRateX100; emit StakingFeeChanged(STAKING_FEE_RATE_X_100); } function setUnstakingFeeRateX100(uint _newUnstakingFeeRateX100) public onlyOwner { require(_newUnstakingFeeRateX100 < 100e2, "New Unstaking fee too much!"); UNSTAKING_FEE_RATE_X_100 = _newUnstakingFeeRateX100; emit UnstakingFeeChanged(UNSTAKING_FEE_RATE_X_100); } function setReferralFeeRateX100(uint _newReferralFeeRateX100) public onlyOwner { require(_newReferralFeeRateX100 < 100e2, "Too much referral fee!"); REFERRAL_FEE_RATE_X_100 = _newReferralFeeRateX100; emit ReferralFeeChanged(REFERRAL_FEE_RATE_X_100); } function setUniswapV2Router(IUniswapV2Router _newUniswapV2Router) public onlyOwner { require(address(_newUniswapV2Router) != address(0), "Invalid router!"); uniswapV2Router = _newUniswapV2Router; emit UniswapV2RouterChanged(address(uniswapV2Router)); } function setLockupTime(uint _newLockupTime) public onlyOwner { require(_newLockupTime <= 90 days, "Lockup Time too long!"); LOCKUP_TIME = _newLockupTime; emit LockupTimeChanged(LOCKUP_TIME); } function addTrustedDepositContractAddress(address _address) external onlyOwner { isTrustedDepositContract[_address] = true; emit TrustedDepositContractAdded(_address); } function removeTrustedDepositContractAddress(address _address) external onlyOwner { isTrustedDepositContract[_address] = false; emit TrustedDepositContractRemoved(_address); } modifier onlyTrustedDepositContract() { require(isTrustedDepositContract[msg.sender], "Not trusted deposit contract!"); _; } function setContractVariables( uint lockupTime, uint referralFeeRateX100, uint stakingFeeRateX100, uint unstakingFeeRateX100, address router, address _feeRecipientAddress ) external onlyOwner { setLockupTime(lockupTime); setReferralFeeRateX100(referralFeeRateX100); setStakingFeeRateX100(stakingFeeRateX100); setUnstakingFeeRateX100(unstakingFeeRateX100); setUniswapV2Router(IUniswapV2Router(router)); setFeeRecipientAddress(_feeRecipientAddress); } function declareEmergency() external onlyOwner notDuringEmergency { isEmergency = true; adminClaimableTime = now.add(EMERGENCY_WAIT_TIME); LOCKUP_TIME = 0; emit EmergencyDeclared(owner); } function doSwap(address fromToken, address toToken, uint fromTokenAmount, uint amountOutMin, uint deadline) private returns (uint _toTokenReceived) { if (fromToken == toToken) { return fromTokenAmount; } IERC20(fromToken).safeApprove(address(uniswapV2Router), 0); IERC20(fromToken).safeApprove(address(uniswapV2Router), fromTokenAmount); uint oldToTokenBalance = IERC20(toToken).balanceOf(address(this)); address[] memory path; if (fromToken == uniswapV2Router.WETH() || toToken == uniswapV2Router.WETH()) { path = new address[](2); path[0] = fromToken; path[1] = toToken; } else { path = new address[](3); path[0] = fromToken; path[1] = uniswapV2Router.WETH(); path[2] = toToken; } uniswapV2Router.swapExactTokensForTokens(fromTokenAmount, amountOutMin, path, address(this), deadline); uint newToTokenBalance = IERC20(toToken).balanceOf(address(this)); uint toTokenReceived = newToTokenBalance.sub(oldToTokenBalance); return toTokenReceived; } function updateAccount(address account, uint _amountOutMin_referralFee, uint _deadline) private { uint pendingDivs = getPendingDivs(account); if (pendingDivs > 0) { uint referralFee = pendingDivs.mul(REFERRAL_FEE_RATE_X_100).div(100e2); uint pendingDivsAfterFee = pendingDivs.sub(referralFee); bool success = transferReferralFeeIfPossible(referrals[account], referralFee, _amountOutMin_referralFee, _deadline); uint amount = pendingDivs; if (success) { amount = pendingDivsAfterFee; } rewardsPendingClaim[account] = rewardsPendingClaim[account].add(amount); totalEarnedTokens[account] = totalEarnedTokens[account].add(amount); totalClaimedRewards = totalClaimedRewards.add(amount); } lastClaimedTime[account] = now; } function transferReferralFeeIfPossible(address account, uint amount, uint _amountOutMin_referralFee, uint _deadline) private returns (bool) { if (account != address(0) && amount > 0) { // swap to DYP here uint platformTokenReceived = doSwap(TRUSTED_REWARD_TOKEN_ADDRESS, TRUSTED_DEPOSIT_TOKEN_ADDRESS, amount, _amountOutMin_referralFee, _deadline); totalReferralFeeEarned[account] = totalReferralFeeEarned[account].add(platformTokenReceived); IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(account, platformTokenReceived); totalClaimedReferralFee = totalClaimedReferralFee.add(platformTokenReceived); emit ReferralFeeTransferred(account, platformTokenReceived); return true; } return false; } function getPendingDivs(address _holder) public view returns (uint) { if (!holders.contains(_holder)) return 0; if (depositedTokens[_holder] == 0) return 0; uint timeDiff; uint stakingEndTime = contractStartTime.add(REWARD_INTERVAL); uint _now = now; if (_now > stakingEndTime) { _now = stakingEndTime; } if (lastClaimedTime[_holder] >= _now) { timeDiff = 0; } else { timeDiff = _now.sub(lastClaimedTime[_holder]); } uint stakedAmount = depositedTokens[_holder]; uint pendingDivs = stakedAmount .mul(REWARD_RATE_X_100) .mul(timeDiff) .div(REWARD_INTERVAL) .div(1e4); return pendingDivs; } function getTotalPendingDivs(address _holder) external view returns (uint) { uint pending = getPendingDivs(_holder); uint awaitingClaim = rewardsPendingClaim[_holder]; return pending.add(awaitingClaim); } function getNumberOfHolders() external view returns (uint) { return holders.length(); } function getNumberOfReferredStakers(address referrer) external view returns (uint _activeStakers, uint _totalStakers) { _activeStakers = activeReferredAddressesOfUser[referrer].length(); _totalStakers = totalReferredAddressesOfUser[referrer].length(); } function getReferredStaker(address account, uint i) external view returns (address _staker, uint _totalEarned) { _staker = totalReferredAddressesOfUser[account].at(i); _totalEarned = totalEarnedTokens[_staker]; } function getActiveReferredStaker(address account, uint i) external view returns (address _staker, uint _totalEarned) { _staker = activeReferredAddressesOfUser[account].at(i); _totalEarned = totalEarnedTokens[_staker]; } function depositByContract(address account, uint amount, uint _amountOutMin_stakingReferralFee, uint _deadline) external onlyTrustedDepositContract { require(amount > 0, "Amount must not be 0!"); require(account != address(0), "Invalid account!"); IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransferFrom(msg.sender, address(this), amount); updateAccount(account, _amountOutMin_stakingReferralFee, _deadline); depositedTokens[account] = depositedTokens[account].add(amount); holders.add(account); stakingTime[account] = now; emit Stake(account, amount); } function stake(uint amountToStake, address referrer, uint _amountOutMin_referralFee, uint _deadline) external noContractsAllowed notDuringEmergency { require(amountToStake > 0, "Cannot deposit 0 Tokens"); IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransferFrom(msg.sender, address(this), amountToStake); updateAccount(msg.sender, _amountOutMin_referralFee, _deadline); uint fee = amountToStake.mul(STAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToStake.sub(fee); if (fee > 0) { IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(feeRecipientAddress, fee); } //uint _75Percent = amountAfterFee.mul(75e2).div(100e2); //uint contractDepositAmount = doSwap(TRUSTED_DEPOSIT_TOKEN_ADDRESS, TRUSTED_REWARD_TOKEN_ADDRESS, _75Percent, _amountOutMin_75Percent, _deadline); //IERC20(TRUSTED_REWARD_TOKEN_ADDRESS).safeApprove(TRUSTED_BUYBACK_CONTRACT_ADDRESS, 0); //IERC20(TRUSTED_REWARD_TOKEN_ADDRESS).safeApprove(TRUSTED_BUYBACK_CONTRACT_ADDRESS, contractDepositAmount); //BuybackContract(TRUSTED_BUYBACK_CONTRACT_ADDRESS).depositByContract(msg.sender, contractDepositAmount); //uint remainingAmount = amountAfterFee.sub(_75Percent); depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amountAfterFee); holders.add(msg.sender); if (referrals[msg.sender] == address(0)) { referrals[msg.sender] = referrer; } totalReferredAddressesOfUser[referrals[msg.sender]].add(msg.sender); activeReferredAddressesOfUser[referrals[msg.sender]].add(msg.sender); stakingTime[msg.sender] = now; emit Stake(msg.sender, amountAfterFee); } function unstake(uint amountToWithdraw, uint _amountOutMin_referralFee, uint _deadline) external noContractsAllowed { require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw"); require(now.sub(stakingTime[msg.sender]) > LOCKUP_TIME, "You recently staked, please wait before withdrawing."); updateAccount(msg.sender, _amountOutMin_referralFee, _deadline); uint fee = amountToWithdraw.mul(UNSTAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToWithdraw.sub(fee); if (fee > 0) { IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(feeRecipientAddress, fee); } IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(msg.sender, amountAfterFee); depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw); if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) { holders.remove(msg.sender); activeReferredAddressesOfUser[referrals[msg.sender]].remove(msg.sender); } emit Unstake(msg.sender, amountToWithdraw); } function claim(uint _amountOutMin_referralFee, uint _amountOutMin_claim, uint _deadline) external noContractsAllowed notDuringEmergency { updateAccount(msg.sender, _amountOutMin_referralFee, _deadline); uint amount = rewardsPendingClaim[msg.sender]; if (amount > 0) { rewardsPendingClaim[msg.sender] = 0; // swap to DYP here uint platformTokenReceived = doSwap(TRUSTED_REWARD_TOKEN_ADDRESS, TRUSTED_DEPOSIT_TOKEN_ADDRESS, amount, _amountOutMin_claim, _deadline); IERC20(TRUSTED_DEPOSIT_TOKEN_ADDRESS).safeTransfer(msg.sender, platformTokenReceived); emit RewardsTransferred(msg.sender, platformTokenReceived); } } function reInvest(uint _amountOutMin_referralFee, uint _amountOutMin_reinvest, uint _deadline) external noContractsAllowed notDuringEmergency { updateAccount(msg.sender, _amountOutMin_referralFee, _deadline); uint amount = rewardsPendingClaim[msg.sender]; if (amount > 0) { rewardsPendingClaim[msg.sender] = 0; // swap to DYP here uint platformTokenReceived = doSwap(TRUSTED_REWARD_TOKEN_ADDRESS, TRUSTED_DEPOSIT_TOKEN_ADDRESS, amount, _amountOutMin_reinvest, _deadline); // re-invest here depositedTokens[msg.sender] = depositedTokens[msg.sender].add(platformTokenReceived); // no lock time reset for reinvest // stakingTime[msg.sender] = now; emit Reinvest(msg.sender, platformTokenReceived); } } function getStakersList(uint startIndex, uint endIndex) public view returns (address[] memory stakers, uint[] memory stakingTimestamps, uint[] memory lastClaimedTimeStamps, uint[] memory stakedTokens) { require (startIndex < endIndex); uint length = endIndex.sub(startIndex); address[] memory _stakers = new address[](length); uint[] memory _stakingTimestamps = new uint[](length); uint[] memory _lastClaimedTimeStamps = new uint[](length); uint[] memory _stakedTokens = new uint[](length); for (uint i = startIndex; i < endIndex; i = i.add(1)) { address staker = holders.at(i); uint listIndex = i.sub(startIndex); _stakers[listIndex] = staker; _stakingTimestamps[listIndex] = stakingTime[staker]; _lastClaimedTimeStamps[listIndex] = lastClaimedTime[staker]; _stakedTokens[listIndex] = depositedTokens[staker]; } return (_stakers, _stakingTimestamps, _lastClaimedTimeStamps, _stakedTokens); } // admin can claim any tokens left in the contract after it expires or during emergency function claimAnyToken(address token, address recipient, uint amount) external onlyOwner { require(recipient != address(0), "Invalid Recipient"); require(now > adminClaimableTime, "Contract not expired yet!"); if (token == address(0)) { address payable _recipient = payable(recipient); _recipient.transfer(amount); return; } IERC20(token).safeTransfer(recipient, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_uniswapV2RouterAddress","type":"address"},{"internalType":"address","name":"_feeRecipientAddress","type":"address"},{"internalType":"address","name":"trustedDepositTokenAddress","type":"address"},{"internalType":"address","name":"trustedRewardTokenAddress","type":"address"},{"internalType":"uint256","name":"referralFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"stakingFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"unstakingFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"rewardRateX100","type":"uint256"},{"internalType":"uint256","name":"rewardInterval","type":"uint256"},{"internalType":"uint256","name":"lockupTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"EmergencyDeclared","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"FeeRecipientAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newLockupTime","type":"uint256"}],"name":"LockupTimeChanged","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":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"ReferralFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferralFeeTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"StakingFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"TrustedDepositContractAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"TrustedDepositContractRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"}],"name":"UniswapV2RouterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"UnstakingFeeChanged","type":"event"},{"inputs":[],"name":"EMERGENCY_WAIT_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCKUP_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERRAL_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRUSTED_DEPOSIT_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRUSTED_REWARD_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNSTAKING_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addTrustedDepositContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminCanClaimAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminClaimableTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountOutMin_referralFee","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin_claim","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimAnyToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"declareEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin_stakingReferralFee","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"depositByContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipientAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getActiveReferredStaker","outputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"getNumberOfReferredStakers","outputs":[{"internalType":"uint256","name":"_activeStakers","type":"uint256"},{"internalType":"uint256","name":"_totalStakers","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getReferredStaker","outputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"endIndex","type":"uint256"}],"name":"getStakersList","outputs":[{"internalType":"address[]","name":"stakers","type":"address[]"},{"internalType":"uint256[]","name":"stakingTimestamps","type":"uint256[]"},{"internalType":"uint256[]","name":"lastClaimedTimeStamps","type":"uint256[]"},{"internalType":"uint256[]","name":"stakedTokens","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getTotalPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isEmergency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTrustedDepositContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountOutMin_referralFee","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin_reinvest","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"reInvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeTrustedDepositContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsPendingClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockupTime","type":"uint256"},{"internalType":"uint256","name":"referralFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"stakingFeeRateX100","type":"uint256"},{"internalType":"uint256","name":"unstakingFeeRateX100","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"_feeRecipientAddress","type":"address"}],"name":"setContractVariables","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeRecipientAddress","type":"address"}],"name":"setFeeRecipientAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLockupTime","type":"uint256"}],"name":"setLockupTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReferralFeeRateX100","type":"uint256"}],"name":"setReferralFeeRateX100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newStakingFeeRateX100","type":"uint256"}],"name":"setStakingFeeRateX100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapV2Router","name":"_newUniswapV2Router","type":"address"}],"name":"setUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newUnstakingFeeRateX100","type":"uint256"}],"name":"setUnstakingFeeRateX100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToStake","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"_amountOutMin_referralFee","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedReferralFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalEarnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalReferralFeeEarned","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":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin_referralFee","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052600180546001600160a01b031990811673961c8c0b1aad0c0b10a51fef6a867e3091bcef171790915560028054821673bd100d061e120b2c67a24453cf6368e63f1be0561790556109c46003556301e133806004556000600581905560068190556101f460075561012c60085560098054909216737a250d5630b4cf539739df2c5dacb4c659f2488d17909155600b819055600c55600d805460ff19169055348015620000b057600080fd5b5060405162003ab338038062003ab38339818101604052610140811015620000d757600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e088015161010089015161012090990151600080546001600160a01b0319163317905597989697959694959394929391929091620001408a6001600160e01b036200031516565b62000154896001600160e01b03620003d516565b62000168856001600160e01b036200049616565b6200017c846001600160e01b036200054016565b62000190866001600160e01b03620005ea16565b6001600160a01b038816620001ec576040805162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206465706f73697420746f6b656e2061646472657373210000604482015290519081900360640190fd5b6001600160a01b03871662000248576040805162461bcd60e51b815260206004820152601d60248201527f496e76616c69642072657761726420746f6b656e206164647265737321000000604482015290519081900360640190fd5b600180546001600160a01b03808b166001600160a01b03199283161790925560028054928a1692909116919091179055600383905560048290556301e13380821115620002c75760405162461bcd60e51b815260040180806020018281038252602b81526020018062003a88602b913960400191505060405180910390fd5b620002db816001600160e01b036200069416565b426080818152505062000301630208c080426200074060201b620021af1790919060201c565b601a5550620007a298505050505050505050565b6000546001600160a01b031633146200032d57600080fd5b6001600160a01b0381166200037b576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420726f757465722160881b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f49381de8f56ca0c45bdd955e613a01e042fdf45d2ae4b0cfd920226fe0ed2ede916020908290030190a150565b6000546001600160a01b03163314620003ed57600080fd5b6001600160a01b0381166200043c576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420616464726573732160801b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fafc54c644914e872610dbc4334999d957d145108fd88d63d83cc3a710dc6ee71916020908290030190a150565b6000546001600160a01b03163314620004ae57600080fd5b612710811062000505576040805162461bcd60e51b815260206004820152601960248201527f4e6577205374616b696e672066656520746f6f206d7563682100000000000000604482015290519081900360640190fd5b60058190556040805182815290517f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f9181900360200190a150565b6000546001600160a01b031633146200055857600080fd5b6127108110620005af576040805162461bcd60e51b815260206004820152601b60248201527f4e657720556e7374616b696e672066656520746f6f206d756368210000000000604482015290519081900360640190fd5b60068190556040805182815290517f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231009181900360200190a150565b6000546001600160a01b031633146200060257600080fd5b612710811062000659576040805162461bcd60e51b815260206004820152601660248201527f546f6f206d75636820726566657272616c206665652100000000000000000000604482015290519081900360640190fd5b60078190556040805182815290517fd51125b9b3b3e2699a79428534dbc7cf5f2c1e3612ebeaf02853a94ea13fee749181900360200190a150565b6000546001600160a01b03163314620006ac57600080fd5b6276a70081111562000705576040805162461bcd60e51b815260206004820152601560248201527f4c6f636b75702054696d6520746f6f206c6f6e67210000000000000000000000604482015290519081900360640190fd5b60088190556040805182815290517fadbac78f382a6f10bef84ad4b704cac4817788ffec4f83ac665d7a1152dc44729181900360200190a150565b6000828201838110156200079b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6080516132c6620007c2600039806109d652806113f452506132c66000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c8063b7d3786e11610182578063dbcdc2cc116100e9578063f1bab2ec116100a2578063f5326ada1161007c578063f5326ada14610938578063f63de3ac14610940578063f749229e1461095d578063faf5ec0c1461099c576102d6565b8063f1bab2ec146108e4578063f2fde38b146108ec578063f3f91fa014610912576102d6565b8063dbcdc2cc14610829578063df4b70ba1461084f578063e7b62f5814610857578063e9dc18ec1461087d578063ebe6cad1146108b3578063efa9a9be146108bb576102d6565b8063ca7e08351161013b578063ca7e0835146107db578063ca9a2132146107e3578063d079490f146107eb578063d578ceab146107f3578063d7130e14146107fb578063db16caf214610803576102d6565b8063b7d3786e14610739578063bd97b37514610756578063c1665f401461077f578063c326bf4f14610787578063c6363892146107ad578063c80ed116146107d3576102d6565b80634fcfe7ae116102415780637e44b933116101fa57806398896d10116101d457806398896d10146106c85780639ca423b3146106ee578063a1ccb81314610714578063a2a5124114610731576102d6565b80637e44b933146106925780637fc505031461069a5780638da5cb5b146106c0576102d6565b80634fcfe7ae146105c457806355468afa146105fe578063583d42fd146106365780635dbdda691461065c5780635f9e8f82146106645780636270cd181461066c576102d6565b80632e9f87a6116102935780632e9f87a614610502578063308feec31461054857806331e244e5146105505780633ddb34221461055857806348f554d3146105815780634b62b70b146105a7576102d6565b80630c3d5157146102db5780631419841d146102f55780631694505e1461031d5780631808fdb8146103415780631911cf4a146103905780632a6b9bfd146104d6575b600080fd5b6102e36109d4565b60408051918252519081900360200190f35b61031b6004803603602081101561030b57600080fd5b50356001600160a01b03166109f8565b005b610325610ab6565b604080516001600160a01b039092168252519081900360200190f35b61036d6004803603604081101561035757600080fd5b506001600160a01b038135169060200135610ac5565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103b3600480360360408110156103a657600080fd5b5080359060200135610b13565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103ff5781810151838201526020016103e7565b50505050905001858103845288818151815260200191508051906020019060200280838360005b8381101561043e578181015183820152602001610426565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561047d578181015183820152602001610465565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156104bc5781810151838201526020016104a4565b505050509050019850505050505050505060405180910390f35b61036d600480360360408110156104ec57600080fd5b506001600160a01b038135169060200135610d97565b61031b600480360360c081101561051857600080fd5b508035906020810135906040810135906060810135906001600160a01b03608082013581169160a0013516610dc1565b6102e3610e16565b61031b610e27565b61031b6004803603606081101561056e57600080fd5b5080359060208101359060400135610ee4565b6102e36004803603602081101561059757600080fd5b50356001600160a01b031661104e565b61031b600480360360208110156105bd57600080fd5b5035611060565b6105ea600480360360208110156105da57600080fd5b50356001600160a01b0316611102565b604080519115158252519081900360200190f35b61031b6004803603608081101561061457600080fd5b506001600160a01b038135169060208101359060408101359060600135611117565b6102e36004803603602081101561064c57600080fd5b50356001600160a01b03166112ee565b6102e3611300565b6105ea611306565b6102e36004803603602081101561068257600080fd5b50356001600160a01b031661130f565b6102e3611321565b61031b600480360360208110156106b057600080fd5b50356001600160a01b0316611327565b610325611396565b6102e3600480360360208110156106de57600080fd5b50356001600160a01b03166113a5565b6103256004803603602081101561070457600080fd5b50356001600160a01b03166114ed565b61031b6004803603602081101561072a57600080fd5b5035611508565b6103256115b0565b61031b6004803603602081101561074f57600080fd5b50356115bf565b61031b6004803603606081101561076c57600080fd5b5080359060208101359060400135611667565b6102e36118fa565b6102e36004803603602081101561079d57600080fd5b50356001600160a01b0316611900565b6102e3600480360360208110156107c357600080fd5b50356001600160a01b0316611912565b610325611924565b6102e3611933565b6102e3611939565b6102e3611940565b6102e3611946565b6102e361194c565b61031b6004803603602081101561081957600080fd5b50356001600160a01b0316611954565b61031b6004803603602081101561083f57600080fd5b50356001600160a01b03166119c6565b6102e3611a85565b6102e36004803603602081101561086d57600080fd5b50356001600160a01b0316611a8b565b61031b6004803603606081101561089357600080fd5b506001600160a01b03813581169160208101359091169060400135611acb565b6102e3611bf3565b61031b600480360360608110156108d157600080fd5b5080359060208101359060400135611bf9565b610325611d4c565b61031b6004803603602081101561090257600080fd5b50356001600160a01b0316611d5b565b6102e36004803603602081101561092857600080fd5b50356001600160a01b0316611de0565b6102e3611df2565b61031b6004803603602081101561095657600080fd5b5035611df8565b6109836004803603602081101561097357600080fd5b50356001600160a01b0316611e99565b6040805192835260208301919091528051918290030190f35b61031b600480360360808110156109b257600080fd5b508035906001600160a01b036020820135169060408101359060600135611ee7565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610a0f57600080fd5b6001600160a01b038116610a5c576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420726f757465722160881b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f49381de8f56ca0c45bdd955e613a01e042fdf45d2ae4b0cfd920226fe0ed2ede916020908290030190a150565b6009546001600160a01b031681565b6001600160a01b03821660009081526017602052604081208190610aef908463ffffffff61221216565b6001600160a01b038116600090815260136020526040902054909590945092505050565b606080606080848610610b2557600080fd5b6000610b37868863ffffffff61221e16565b905060608167ffffffffffffffff81118015610b5257600080fd5b50604051908082528060200260200182016040528015610b7c578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610b9857600080fd5b50604051908082528060200260200182016040528015610bc2578160200160208202803683370190505b50905060608367ffffffffffffffff81118015610bde57600080fd5b50604051908082528060200260200182016040528015610c08578160200160208202803683370190505b50905060608467ffffffffffffffff81118015610c2457600080fd5b50604051908082528060200260200182016040528015610c4e578160200160208202803683370190505b5090508a5b8a811015610d85576000610c6e600e8363ffffffff61221216565b90506000610c82838f63ffffffff61221e16565b905081878281518110610c9157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060116000836001600160a01b03166001600160a01b0316815260200190815260200160002054868281518110610ce357fe5b60200260200101818152505060126000836001600160a01b03166001600160a01b0316815260200190815260200160002054858281518110610d2157fe5b60200260200101818152505060106000836001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610d5f57fe5b602090810291909101015250610d7e905081600163ffffffff6121af16565b9050610c53565b50929a91995097509095509350505050565b6001600160a01b03821660009081526018602052604081208190610aef908463ffffffff61221216565b6000546001600160a01b03163314610dd857600080fd5b610de186611060565b610dea85611df8565b610df3846115bf565b610dfc83611508565b610e05826109f8565b610e0e816119c6565b505050505050565b6000610e22600e612260565b905090565b6000546001600160a01b03163314610e3e57600080fd5b600d5460ff1615610e84576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b600d805460ff19166001179055610ea4426203f48063ffffffff6121af16565b601a556000600881905580546040516001600160a01b03909116917fe465b068e033879ed58088ba05882c35e2a52240ea1432b95753d6aebdd0814a91a2565b610eed3361226b565b158015610ef957503233145b610f42576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615610f88576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b610f93338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154610fda916001600160a01b03908116911684878761239d565b33600090815260106020526040902054909150610ffd908263ffffffff6121af16565b33600081815260106020908152604091829020939093558051848152905191927fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b8792918290030190a2505b50505050565b60146020526000908152604090205481565b6000546001600160a01b0316331461107757600080fd5b6276a7008111156110c7576040805162461bcd60e51b81526020600482015260156024820152744c6f636b75702054696d6520746f6f206c6f6e672160581b604482015290519081900360640190fd5b60088190556040805182815290517fadbac78f382a6f10bef84ad4b704cac4817788ffec4f83ac665d7a1152dc44729181900360200190a150565b60196020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661117b576040805162461bcd60e51b815260206004820152601d60248201527f4e6f742074727573746564206465706f73697420636f6e747261637421000000604482015290519081900360640190fd5b600083116111c8576040805162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206e6f7420626520302160581b604482015290519081900360640190fd5b6001600160a01b038416611216576040805162461bcd60e51b815260206004820152601060248201526f496e76616c6964206163636f756e742160801b604482015290519081900360640190fd5b600154611234906001600160a01b031633308663ffffffff61292d16565b61123f848383612271565b6001600160a01b038416600090815260106020526040902054611268908463ffffffff6121af16565b6001600160a01b038516600090815260106020526040902055611292600e8563ffffffff61298716565b506001600160a01b0384166000818152601160209081526040918290204290558151928352820185905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a150505050565b60116020526000908152604090205481565b60045481565b600d5460ff1681565b60136020526000908152604090205481565b60055481565b6000546001600160a01b0316331461133e57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19169055815192835290517f7e0d9d001816978c78464fad5f6627ab7096346030d64b54bf5205c95816f79f9281900390910190a150565b6000546001600160a01b031681565b60006113b8600e8363ffffffff61299c16565b6113c4575060006114e8565b6001600160a01b0382166000908152601060205260409020546113e9575060006114e8565b6000806114216004547f00000000000000000000000000000000000000000000000000000000000000006121af90919063ffffffff16565b9050428181111561142f5750805b6001600160a01b03851660009081526012602052604090205481116114575760009250611484565b6001600160a01b03851660009081526012602052604090205461148190829063ffffffff61221e16565b92505b6001600160a01b0385166000908152601060205260408120546004546003549192916114e091612710916114d4919082908a906114c890899063ffffffff6129b116565b9063ffffffff6129b116565b9063ffffffff612a0a16565b955050505050505b919050565b6015602052600090815260409020546001600160a01b031681565b6000546001600160a01b0316331461151f57600080fd5b6127108110611575576040805162461bcd60e51b815260206004820152601b60248201527f4e657720556e7374616b696e672066656520746f6f206d756368210000000000604482015290519081900360640190fd5b60068190556040805182815290517f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231009181900360200190a150565b6001546001600160a01b031681565b6000546001600160a01b031633146115d657600080fd5b612710811061162c576040805162461bcd60e51b815260206004820152601960248201527f4e6577205374616b696e672066656520746f6f206d7563682100000000000000604482015290519081900360640190fd5b60058190556040805182815290517f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f9181900360200190a150565b6116703361226b565b15801561167c57503233145b6116c5576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b33600090815260106020526040902054831115611729576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b6008543360009081526011602052604090205461174d90429063ffffffff61221e16565b116117895760405162461bcd60e51b81526004018080602001828103825260348152602001806131fd6034913960400191505060405180910390fd5b611794338383612271565b60006117b16127106114d4600654876129b190919063ffffffff16565b905060006117c5858363ffffffff61221e16565b905081156117f057600a546001546117f0916001600160a01b0391821691168463ffffffff612a4c16565b60015461180d906001600160a01b0316338363ffffffff612a4c16565b3360009081526010602052604090205461182d908663ffffffff61221e16565b3360008181526010602052604090209190915561185290600e9063ffffffff61299c16565b801561186b575033600090815260106020526040902054155b156118b857611881600e3363ffffffff612a9e16565b50336000818152601560209081526040808320546001600160a01b03168352601790915290206118b69163ffffffff612a9e16565b505b604080513381526020810187905281517f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd929181900390910190a15050505050565b60065481565b60106020526000908152604090205481565b60166020526000908152604090205481565b6002546001600160a01b031681565b601a5481565b6203f48081565b600c5481565b600b5481565b630208c08081565b6000546001600160a01b0316331461196b57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055815192835290517f40c63143c93100e0caf027a91ca0854f28a3efb805e7d1c598a4637f8f22c78c9281900390910190a150565b6000546001600160a01b031633146119dd57600080fd5b6001600160a01b038116611a2b576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420616464726573732160801b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fafc54c644914e872610dbc4334999d957d145108fd88d63d83cc3a710dc6ee71916020908290030190a150565b60075481565b600080611a97836113a5565b6001600160a01b038416600090815260146020526040902054909150611ac3828263ffffffff6121af16565b949350505050565b6000546001600160a01b03163314611ae257600080fd5b6001600160a01b038216611b31576040805162461bcd60e51b8152602060048201526011602482015270125b9d985b1a5908149958da5c1a595b9d607a1b604482015290519081900360640190fd5b601a544211611b87576040805162461bcd60e51b815260206004820152601960248201527f436f6e7472616374206e6f742065787069726564207965742100000000000000604482015290519081900360640190fd5b6001600160a01b038316611bd45760405182906001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611bcd573d6000803e3d6000fd5b5050611bee565b611bee6001600160a01b038416838363ffffffff612a4c16565b505050565b60035481565b611c023361226b565b158015611c0e57503233145b611c57576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611c9d576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b611ca8338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154611cef916001600160a01b03908116911684878761239d565b600154909150611d0f906001600160a01b0316338363ffffffff612a4c16565b60408051828152905133917f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130919081900360200190a25050505050565b600a546001600160a01b031681565b6000546001600160a01b03163314611d7257600080fd5b6001600160a01b038116611d8557600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60126020526000908152604090205481565b60085481565b6000546001600160a01b03163314611e0f57600080fd5b6127108110611e5e576040805162461bcd60e51b8152602060048201526016602482015275546f6f206d75636820726566657272616c206665652160501b604482015290519081900360640190fd5b60078190556040805182815290517fd51125b9b3b3e2699a79428534dbc7cf5f2c1e3612ebeaf02853a94ea13fee749181900360200190a150565b6001600160a01b03811660009081526017602052604081208190611ebc90612260565b6001600160a01b0384166000908152601860205260409020909250611ee090612260565b9050915091565b611ef03361226b565b158015611efc57503233145b611f45576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611f8b576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b60008411611fe0576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206465706f736974203020546f6b656e73000000000000000000604482015290519081900360640190fd5b600154611ffe906001600160a01b031633308763ffffffff61292d16565b612009338383612271565b60006120266127106114d4600554886129b190919063ffffffff16565b9050600061203a868363ffffffff61221e16565b9050811561206557600a54600154612065916001600160a01b0391821691168463ffffffff612a4c16565b33600090815260106020526040902054612085908263ffffffff6121af16565b336000818152601060205260409020919091556120aa90600e9063ffffffff61298716565b50336000908152601560205260409020546001600160a01b03166120f15733600090815260156020526040902080546001600160a01b0319166001600160a01b0387161790555b336000818152601560209081526040808320546001600160a01b03168352601890915290206121259163ffffffff61298716565b50336000818152601560209081526040808320546001600160a01b031683526017909152902061215a9163ffffffff61298716565b50336000818152601160209081526040918290204290558151928352820183905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a1505050505050565b600082820183811015612209576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60006122098383612ab3565b600061220983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b17565b600061220c82612bb3565b3b151590565b600061227c846113a5565b9050801561237e5760006122a16127106114d4600754856129b190919063ffffffff16565b905060006122b5838363ffffffff61221e16565b6001600160a01b03808816600090815260156020526040812054929350916122e09116848888612bb7565b90508381156122ec5750815b6001600160a01b038816600090815260146020526040902054612315908263ffffffff6121af16565b6001600160a01b03891660009081526014602090815260408083209390935560139052205461234a908263ffffffff6121af16565b6001600160a01b038916600090815260136020526040902055600b54612376908263ffffffff6121af16565b600b55505050505b5050506001600160a01b03166000908152601260205260409020429055565b6000846001600160a01b0316866001600160a01b031614156123c0575082612924565b6009546123e1906001600160a01b038881169116600063ffffffff612cc016565b600954612401906001600160a01b0388811691168663ffffffff612cc016565b604080516370a0823160e01b815230600482015290516000916001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561244b57600080fd5b505afa15801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b5051600954604080516315ab88c960e31b815290519293506060926001600160a01b039092169163ad5c464891600480820192602092909190829003018186803b1580156124c257600080fd5b505afa1580156124d6573d6000803e3d6000fd5b505050506040513d60208110156124ec57600080fd5b50516001600160a01b038981169116148061258b5750600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255057600080fd5b505afa158015612564573d6000803e3d6000fd5b505050506040513d602081101561257a57600080fd5b50516001600160a01b038881169116145b1561261157604080516002808252606082018352909160208301908036833701905050905087816000815181106125be57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106125ec57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061271e565b604080516003808252608082019092529060208201606080368337019050509050878160008151811061264057fe5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561269457600080fd5b505afa1580156126a8573d6000803e3d6000fd5b505050506040513d60208110156126be57600080fd5b50518151829060019081106126cf57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816002815181106126fd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6009546040516338ed173960e01b8152600481018881526024820188905230606483018190526084830188905260a060448401908152855160a485015285516001600160a01b03909516946338ed1739948c948c94899490938d9360c401906020808801910280838360005b838110156127a257818101518382015260200161278a565b505050509050019650505050505050600060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561280857600080fd5b810190808051604051939291908464010000000082111561282857600080fd5b90830190602082018581111561283d57600080fd5b825186602082028301116401000000008211171561285a57600080fd5b82525081516020918201928201910280838360005b8381101561288757818101518382015260200161286f565b505050509190910160408181526370a0823160e01b825230600483015251600096506001600160a01b038e1695506370a08231945060248083019450602093509091829003018186803b1580156128dd57600080fd5b505afa1580156128f1573d6000803e3d6000fd5b505050506040513d602081101561290757600080fd5b50519050600061291d828563ffffffff61221e16565b9450505050505b95945050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611048908590612dcf565b6000612209836001600160a01b038416612e80565b6000612209836001600160a01b038416612eca565b6000826129c05750600061220c565b828202828482816129cd57fe5b04146122095760405162461bcd60e51b81526004018080602001828103825260218152602001806131dc6021913960400191505060405180910390fd5b600061220983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ee2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bee908490612dcf565b6000612209836001600160a01b038416612f47565b81546000908210612af55760405162461bcd60e51b815260040180806020018281038252602281526020018061319a6022913960400191505060405180910390fd5b826000018281548110612b0457fe5b9060005260206000200154905092915050565b60008184841115612ba65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b6b578181015183820152602001612b53565b50505050905090810190601f168015612b985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50508183035b9392505050565b5490565b60006001600160a01b03851615801590612bd15750600084115b15612cb557600254600154600091612bf8916001600160a01b03918216911687878761239d565b6001600160a01b038716600090815260166020526040902054909150612c24908263ffffffff6121af16565b6001600160a01b03808816600090815260166020526040902091909155600154612c569116878363ffffffff612a4c16565b600c54612c69908263ffffffff6121af16565b600c556040805182815290516001600160a01b038816917fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219919081900360200190a26001915050611ac3565b506000949350505050565b801580612d46575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d1857600080fd5b505afa158015612d2c573d6000803e3d6000fd5b505050506040513d6020811015612d4257600080fd5b5051155b612d815760405162461bcd60e51b815260040180806020018281038252603681526020018061325b6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611bee9084905b6060612e24826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661300d9092919063ffffffff16565b805190915015611bee57808060200190516020811015612e4357600080fd5b5051611bee5760405162461bcd60e51b815260040180806020018281038252602a815260200180613231602a913960400191505060405180910390fd5b6000612e8c8383612eca565b612ec25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561220c565b50600061220c565b60009081526001919091016020526040902054151590565b60008183612f315760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b6b578181015183820152602001612b53565b506000838581612f3d57fe5b0495945050505050565b600081815260018301602052604081205480156130035783546000198083019190810190600090879083908110612f7a57fe5b9060005260206000200154905080876000018481548110612f9757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612fc757fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061220c565b600091505061220c565b6060611ac38484600085856130218561226b565b613072576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106130b15780518252601f199092019160209182019101613092565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613113576040519150601f19603f3d011682016040523d82523d6000602084013e613118565b606091505b5091509150613128828286613133565b979650505050505050565b60608315613142575081612bac565b8251156131525782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612b6b578181015183820152602001612b5356fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647343616e6e6f74206578656375746520647572696e6720656d657267656e637921536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a264697066735822122055ec40d3c4ec4816e5ad0bf346223e79c5531d4d0590afb0fd96ae6bcb8005a064736f6c634300060b0033436f6e7472616374206d7573742065787069726520696e206c657373207468616e203336352064617973210000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000910090ea889b64b4e722ea4b8ff6d5e734dfb38f000000000000000000000000961c8c0b1aad0c0b10a51fef6a867e3091bcef17000000000000000000000000bd100d061e120b2c67a24453cf6368e63f1be05600000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000001e13380000000000000000000000000000000000000000000000000000000000000012c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102d65760003560e01c8063b7d3786e11610182578063dbcdc2cc116100e9578063f1bab2ec116100a2578063f5326ada1161007c578063f5326ada14610938578063f63de3ac14610940578063f749229e1461095d578063faf5ec0c1461099c576102d6565b8063f1bab2ec146108e4578063f2fde38b146108ec578063f3f91fa014610912576102d6565b8063dbcdc2cc14610829578063df4b70ba1461084f578063e7b62f5814610857578063e9dc18ec1461087d578063ebe6cad1146108b3578063efa9a9be146108bb576102d6565b8063ca7e08351161013b578063ca7e0835146107db578063ca9a2132146107e3578063d079490f146107eb578063d578ceab146107f3578063d7130e14146107fb578063db16caf214610803576102d6565b8063b7d3786e14610739578063bd97b37514610756578063c1665f401461077f578063c326bf4f14610787578063c6363892146107ad578063c80ed116146107d3576102d6565b80634fcfe7ae116102415780637e44b933116101fa57806398896d10116101d457806398896d10146106c85780639ca423b3146106ee578063a1ccb81314610714578063a2a5124114610731576102d6565b80637e44b933146106925780637fc505031461069a5780638da5cb5b146106c0576102d6565b80634fcfe7ae146105c457806355468afa146105fe578063583d42fd146106365780635dbdda691461065c5780635f9e8f82146106645780636270cd181461066c576102d6565b80632e9f87a6116102935780632e9f87a614610502578063308feec31461054857806331e244e5146105505780633ddb34221461055857806348f554d3146105815780634b62b70b146105a7576102d6565b80630c3d5157146102db5780631419841d146102f55780631694505e1461031d5780631808fdb8146103415780631911cf4a146103905780632a6b9bfd146104d6575b600080fd5b6102e36109d4565b60408051918252519081900360200190f35b61031b6004803603602081101561030b57600080fd5b50356001600160a01b03166109f8565b005b610325610ab6565b604080516001600160a01b039092168252519081900360200190f35b61036d6004803603604081101561035757600080fd5b506001600160a01b038135169060200135610ac5565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103b3600480360360408110156103a657600080fd5b5080359060200135610b13565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103ff5781810151838201526020016103e7565b50505050905001858103845288818151815260200191508051906020019060200280838360005b8381101561043e578181015183820152602001610426565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561047d578181015183820152602001610465565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156104bc5781810151838201526020016104a4565b505050509050019850505050505050505060405180910390f35b61036d600480360360408110156104ec57600080fd5b506001600160a01b038135169060200135610d97565b61031b600480360360c081101561051857600080fd5b508035906020810135906040810135906060810135906001600160a01b03608082013581169160a0013516610dc1565b6102e3610e16565b61031b610e27565b61031b6004803603606081101561056e57600080fd5b5080359060208101359060400135610ee4565b6102e36004803603602081101561059757600080fd5b50356001600160a01b031661104e565b61031b600480360360208110156105bd57600080fd5b5035611060565b6105ea600480360360208110156105da57600080fd5b50356001600160a01b0316611102565b604080519115158252519081900360200190f35b61031b6004803603608081101561061457600080fd5b506001600160a01b038135169060208101359060408101359060600135611117565b6102e36004803603602081101561064c57600080fd5b50356001600160a01b03166112ee565b6102e3611300565b6105ea611306565b6102e36004803603602081101561068257600080fd5b50356001600160a01b031661130f565b6102e3611321565b61031b600480360360208110156106b057600080fd5b50356001600160a01b0316611327565b610325611396565b6102e3600480360360208110156106de57600080fd5b50356001600160a01b03166113a5565b6103256004803603602081101561070457600080fd5b50356001600160a01b03166114ed565b61031b6004803603602081101561072a57600080fd5b5035611508565b6103256115b0565b61031b6004803603602081101561074f57600080fd5b50356115bf565b61031b6004803603606081101561076c57600080fd5b5080359060208101359060400135611667565b6102e36118fa565b6102e36004803603602081101561079d57600080fd5b50356001600160a01b0316611900565b6102e3600480360360208110156107c357600080fd5b50356001600160a01b0316611912565b610325611924565b6102e3611933565b6102e3611939565b6102e3611940565b6102e3611946565b6102e361194c565b61031b6004803603602081101561081957600080fd5b50356001600160a01b0316611954565b61031b6004803603602081101561083f57600080fd5b50356001600160a01b03166119c6565b6102e3611a85565b6102e36004803603602081101561086d57600080fd5b50356001600160a01b0316611a8b565b61031b6004803603606081101561089357600080fd5b506001600160a01b03813581169160208101359091169060400135611acb565b6102e3611bf3565b61031b600480360360608110156108d157600080fd5b5080359060208101359060400135611bf9565b610325611d4c565b61031b6004803603602081101561090257600080fd5b50356001600160a01b0316611d5b565b6102e36004803603602081101561092857600080fd5b50356001600160a01b0316611de0565b6102e3611df2565b61031b6004803603602081101561095657600080fd5b5035611df8565b6109836004803603602081101561097357600080fd5b50356001600160a01b0316611e99565b6040805192835260208301919091528051918290030190f35b61031b600480360360808110156109b257600080fd5b508035906001600160a01b036020820135169060408101359060600135611ee7565b7f0000000000000000000000000000000000000000000000000000000061b73d9381565b6000546001600160a01b03163314610a0f57600080fd5b6001600160a01b038116610a5c576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c696420726f757465722160881b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f49381de8f56ca0c45bdd955e613a01e042fdf45d2ae4b0cfd920226fe0ed2ede916020908290030190a150565b6009546001600160a01b031681565b6001600160a01b03821660009081526017602052604081208190610aef908463ffffffff61221216565b6001600160a01b038116600090815260136020526040902054909590945092505050565b606080606080848610610b2557600080fd5b6000610b37868863ffffffff61221e16565b905060608167ffffffffffffffff81118015610b5257600080fd5b50604051908082528060200260200182016040528015610b7c578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610b9857600080fd5b50604051908082528060200260200182016040528015610bc2578160200160208202803683370190505b50905060608367ffffffffffffffff81118015610bde57600080fd5b50604051908082528060200260200182016040528015610c08578160200160208202803683370190505b50905060608467ffffffffffffffff81118015610c2457600080fd5b50604051908082528060200260200182016040528015610c4e578160200160208202803683370190505b5090508a5b8a811015610d85576000610c6e600e8363ffffffff61221216565b90506000610c82838f63ffffffff61221e16565b905081878281518110610c9157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060116000836001600160a01b03166001600160a01b0316815260200190815260200160002054868281518110610ce357fe5b60200260200101818152505060126000836001600160a01b03166001600160a01b0316815260200190815260200160002054858281518110610d2157fe5b60200260200101818152505060106000836001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610d5f57fe5b602090810291909101015250610d7e905081600163ffffffff6121af16565b9050610c53565b50929a91995097509095509350505050565b6001600160a01b03821660009081526018602052604081208190610aef908463ffffffff61221216565b6000546001600160a01b03163314610dd857600080fd5b610de186611060565b610dea85611df8565b610df3846115bf565b610dfc83611508565b610e05826109f8565b610e0e816119c6565b505050505050565b6000610e22600e612260565b905090565b6000546001600160a01b03163314610e3e57600080fd5b600d5460ff1615610e84576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b600d805460ff19166001179055610ea4426203f48063ffffffff6121af16565b601a556000600881905580546040516001600160a01b03909116917fe465b068e033879ed58088ba05882c35e2a52240ea1432b95753d6aebdd0814a91a2565b610eed3361226b565b158015610ef957503233145b610f42576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615610f88576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b610f93338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154610fda916001600160a01b03908116911684878761239d565b33600090815260106020526040902054909150610ffd908263ffffffff6121af16565b33600081815260106020908152604091829020939093558051848152905191927fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b8792918290030190a2505b50505050565b60146020526000908152604090205481565b6000546001600160a01b0316331461107757600080fd5b6276a7008111156110c7576040805162461bcd60e51b81526020600482015260156024820152744c6f636b75702054696d6520746f6f206c6f6e672160581b604482015290519081900360640190fd5b60088190556040805182815290517fadbac78f382a6f10bef84ad4b704cac4817788ffec4f83ac665d7a1152dc44729181900360200190a150565b60196020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661117b576040805162461bcd60e51b815260206004820152601d60248201527f4e6f742074727573746564206465706f73697420636f6e747261637421000000604482015290519081900360640190fd5b600083116111c8576040805162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206e6f7420626520302160581b604482015290519081900360640190fd5b6001600160a01b038416611216576040805162461bcd60e51b815260206004820152601060248201526f496e76616c6964206163636f756e742160801b604482015290519081900360640190fd5b600154611234906001600160a01b031633308663ffffffff61292d16565b61123f848383612271565b6001600160a01b038416600090815260106020526040902054611268908463ffffffff6121af16565b6001600160a01b038516600090815260106020526040902055611292600e8563ffffffff61298716565b506001600160a01b0384166000818152601160209081526040918290204290558151928352820185905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a150505050565b60116020526000908152604090205481565b60045481565b600d5460ff1681565b60136020526000908152604090205481565b60055481565b6000546001600160a01b0316331461133e57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19169055815192835290517f7e0d9d001816978c78464fad5f6627ab7096346030d64b54bf5205c95816f79f9281900390910190a150565b6000546001600160a01b031681565b60006113b8600e8363ffffffff61299c16565b6113c4575060006114e8565b6001600160a01b0382166000908152601060205260409020546113e9575060006114e8565b6000806114216004547f0000000000000000000000000000000000000000000000000000000061b73d936121af90919063ffffffff16565b9050428181111561142f5750805b6001600160a01b03851660009081526012602052604090205481116114575760009250611484565b6001600160a01b03851660009081526012602052604090205461148190829063ffffffff61221e16565b92505b6001600160a01b0385166000908152601060205260408120546004546003549192916114e091612710916114d4919082908a906114c890899063ffffffff6129b116565b9063ffffffff6129b116565b9063ffffffff612a0a16565b955050505050505b919050565b6015602052600090815260409020546001600160a01b031681565b6000546001600160a01b0316331461151f57600080fd5b6127108110611575576040805162461bcd60e51b815260206004820152601b60248201527f4e657720556e7374616b696e672066656520746f6f206d756368210000000000604482015290519081900360640190fd5b60068190556040805182815290517f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231009181900360200190a150565b6001546001600160a01b031681565b6000546001600160a01b031633146115d657600080fd5b612710811061162c576040805162461bcd60e51b815260206004820152601960248201527f4e6577205374616b696e672066656520746f6f206d7563682100000000000000604482015290519081900360640190fd5b60058190556040805182815290517f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f9181900360200190a150565b6116703361226b565b15801561167c57503233145b6116c5576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b33600090815260106020526040902054831115611729576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b6008543360009081526011602052604090205461174d90429063ffffffff61221e16565b116117895760405162461bcd60e51b81526004018080602001828103825260348152602001806131fd6034913960400191505060405180910390fd5b611794338383612271565b60006117b16127106114d4600654876129b190919063ffffffff16565b905060006117c5858363ffffffff61221e16565b905081156117f057600a546001546117f0916001600160a01b0391821691168463ffffffff612a4c16565b60015461180d906001600160a01b0316338363ffffffff612a4c16565b3360009081526010602052604090205461182d908663ffffffff61221e16565b3360008181526010602052604090209190915561185290600e9063ffffffff61299c16565b801561186b575033600090815260106020526040902054155b156118b857611881600e3363ffffffff612a9e16565b50336000818152601560209081526040808320546001600160a01b03168352601790915290206118b69163ffffffff612a9e16565b505b604080513381526020810187905281517f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd929181900390910190a15050505050565b60065481565b60106020526000908152604090205481565b60166020526000908152604090205481565b6002546001600160a01b031681565b601a5481565b6203f48081565b600c5481565b600b5481565b630208c08081565b6000546001600160a01b0316331461196b57600080fd5b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055815192835290517f40c63143c93100e0caf027a91ca0854f28a3efb805e7d1c598a4637f8f22c78c9281900390910190a150565b6000546001600160a01b031633146119dd57600080fd5b6001600160a01b038116611a2b576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420616464726573732160801b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fafc54c644914e872610dbc4334999d957d145108fd88d63d83cc3a710dc6ee71916020908290030190a150565b60075481565b600080611a97836113a5565b6001600160a01b038416600090815260146020526040902054909150611ac3828263ffffffff6121af16565b949350505050565b6000546001600160a01b03163314611ae257600080fd5b6001600160a01b038216611b31576040805162461bcd60e51b8152602060048201526011602482015270125b9d985b1a5908149958da5c1a595b9d607a1b604482015290519081900360640190fd5b601a544211611b87576040805162461bcd60e51b815260206004820152601960248201527f436f6e7472616374206e6f742065787069726564207965742100000000000000604482015290519081900360640190fd5b6001600160a01b038316611bd45760405182906001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611bcd573d6000803e3d6000fd5b5050611bee565b611bee6001600160a01b038416838363ffffffff612a4c16565b505050565b60035481565b611c023361226b565b158015611c0e57503233145b611c57576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611c9d576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b611ca8338483612271565b33600090815260146020526040902054801561104857336000908152601460205260408120819055600254600154611cef916001600160a01b03908116911684878761239d565b600154909150611d0f906001600160a01b0316338363ffffffff612a4c16565b60408051828152905133917f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130919081900360200190a25050505050565b600a546001600160a01b031681565b6000546001600160a01b03163314611d7257600080fd5b6001600160a01b038116611d8557600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60126020526000908152604090205481565b60085481565b6000546001600160a01b03163314611e0f57600080fd5b6127108110611e5e576040805162461bcd60e51b8152602060048201526016602482015275546f6f206d75636820726566657272616c206665652160501b604482015290519081900360640190fd5b60078190556040805182815290517fd51125b9b3b3e2699a79428534dbc7cf5f2c1e3612ebeaf02853a94ea13fee749181900360200190a150565b6001600160a01b03811660009081526017602052604081208190611ebc90612260565b6001600160a01b0384166000908152601860205260409020909250611ee090612260565b9050915091565b611ef03361226b565b158015611efc57503233145b611f45576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b600d5460ff1615611f8b576040805162461bcd60e51b815260206004820181905260248201526000805160206131bc833981519152604482015290519081900360640190fd5b60008411611fe0576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206465706f736974203020546f6b656e73000000000000000000604482015290519081900360640190fd5b600154611ffe906001600160a01b031633308763ffffffff61292d16565b612009338383612271565b60006120266127106114d4600554886129b190919063ffffffff16565b9050600061203a868363ffffffff61221e16565b9050811561206557600a54600154612065916001600160a01b0391821691168463ffffffff612a4c16565b33600090815260106020526040902054612085908263ffffffff6121af16565b336000818152601060205260409020919091556120aa90600e9063ffffffff61298716565b50336000908152601560205260409020546001600160a01b03166120f15733600090815260156020526040902080546001600160a01b0319166001600160a01b0387161790555b336000818152601560209081526040808320546001600160a01b03168352601890915290206121259163ffffffff61298716565b50336000818152601560209081526040808320546001600160a01b031683526017909152902061215a9163ffffffff61298716565b50336000818152601160209081526040918290204290558151928352820183905280517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9281900390910190a1505050505050565b600082820183811015612209576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60006122098383612ab3565b600061220983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b17565b600061220c82612bb3565b3b151590565b600061227c846113a5565b9050801561237e5760006122a16127106114d4600754856129b190919063ffffffff16565b905060006122b5838363ffffffff61221e16565b6001600160a01b03808816600090815260156020526040812054929350916122e09116848888612bb7565b90508381156122ec5750815b6001600160a01b038816600090815260146020526040902054612315908263ffffffff6121af16565b6001600160a01b03891660009081526014602090815260408083209390935560139052205461234a908263ffffffff6121af16565b6001600160a01b038916600090815260136020526040902055600b54612376908263ffffffff6121af16565b600b55505050505b5050506001600160a01b03166000908152601260205260409020429055565b6000846001600160a01b0316866001600160a01b031614156123c0575082612924565b6009546123e1906001600160a01b038881169116600063ffffffff612cc016565b600954612401906001600160a01b0388811691168663ffffffff612cc016565b604080516370a0823160e01b815230600482015290516000916001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561244b57600080fd5b505afa15801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b5051600954604080516315ab88c960e31b815290519293506060926001600160a01b039092169163ad5c464891600480820192602092909190829003018186803b1580156124c257600080fd5b505afa1580156124d6573d6000803e3d6000fd5b505050506040513d60208110156124ec57600080fd5b50516001600160a01b038981169116148061258b5750600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255057600080fd5b505afa158015612564573d6000803e3d6000fd5b505050506040513d602081101561257a57600080fd5b50516001600160a01b038881169116145b1561261157604080516002808252606082018352909160208301908036833701905050905087816000815181106125be57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106125ec57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061271e565b604080516003808252608082019092529060208201606080368337019050509050878160008151811061264057fe5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561269457600080fd5b505afa1580156126a8573d6000803e3d6000fd5b505050506040513d60208110156126be57600080fd5b50518151829060019081106126cf57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816002815181106126fd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6009546040516338ed173960e01b8152600481018881526024820188905230606483018190526084830188905260a060448401908152855160a485015285516001600160a01b03909516946338ed1739948c948c94899490938d9360c401906020808801910280838360005b838110156127a257818101518382015260200161278a565b505050509050019650505050505050600060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561280857600080fd5b810190808051604051939291908464010000000082111561282857600080fd5b90830190602082018581111561283d57600080fd5b825186602082028301116401000000008211171561285a57600080fd5b82525081516020918201928201910280838360005b8381101561288757818101518382015260200161286f565b505050509190910160408181526370a0823160e01b825230600483015251600096506001600160a01b038e1695506370a08231945060248083019450602093509091829003018186803b1580156128dd57600080fd5b505afa1580156128f1573d6000803e3d6000fd5b505050506040513d602081101561290757600080fd5b50519050600061291d828563ffffffff61221e16565b9450505050505b95945050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611048908590612dcf565b6000612209836001600160a01b038416612e80565b6000612209836001600160a01b038416612eca565b6000826129c05750600061220c565b828202828482816129cd57fe5b04146122095760405162461bcd60e51b81526004018080602001828103825260218152602001806131dc6021913960400191505060405180910390fd5b600061220983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ee2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bee908490612dcf565b6000612209836001600160a01b038416612f47565b81546000908210612af55760405162461bcd60e51b815260040180806020018281038252602281526020018061319a6022913960400191505060405180910390fd5b826000018281548110612b0457fe5b9060005260206000200154905092915050565b60008184841115612ba65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b6b578181015183820152602001612b53565b50505050905090810190601f168015612b985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50508183035b9392505050565b5490565b60006001600160a01b03851615801590612bd15750600084115b15612cb557600254600154600091612bf8916001600160a01b03918216911687878761239d565b6001600160a01b038716600090815260166020526040902054909150612c24908263ffffffff6121af16565b6001600160a01b03808816600090815260166020526040902091909155600154612c569116878363ffffffff612a4c16565b600c54612c69908263ffffffff6121af16565b600c556040805182815290516001600160a01b038816917fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219919081900360200190a26001915050611ac3565b506000949350505050565b801580612d46575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d1857600080fd5b505afa158015612d2c573d6000803e3d6000fd5b505050506040513d6020811015612d4257600080fd5b5051155b612d815760405162461bcd60e51b815260040180806020018281038252603681526020018061325b6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611bee9084905b6060612e24826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661300d9092919063ffffffff16565b805190915015611bee57808060200190516020811015612e4357600080fd5b5051611bee5760405162461bcd60e51b815260040180806020018281038252602a815260200180613231602a913960400191505060405180910390fd5b6000612e8c8383612eca565b612ec25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561220c565b50600061220c565b60009081526001919091016020526040902054151590565b60008183612f315760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b6b578181015183820152602001612b53565b506000838581612f3d57fe5b0495945050505050565b600081815260018301602052604081205480156130035783546000198083019190810190600090879083908110612f7a57fe5b9060005260206000200154905080876000018481548110612f9757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612fc757fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061220c565b600091505061220c565b6060611ac38484600085856130218561226b565b613072576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106130b15780518252601f199092019160209182019101613092565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613113576040519150601f19603f3d011682016040523d82523d6000602084013e613118565b606091505b5091509150613128828286613133565b979650505050505050565b60608315613142575081612bac565b8251156131525782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612b6b578181015183820152602001612b5356fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647343616e6e6f74206578656375746520647572696e6720656d657267656e637921536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a264697066735822122055ec40d3c4ec4816e5ad0bf346223e79c5531d4d0590afb0fd96ae6bcb8005a064736f6c634300060b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000910090ea889b64b4e722ea4b8ff6d5e734dfb38f000000000000000000000000961c8c0b1aad0c0b10a51fef6a867e3091bcef17000000000000000000000000bd100d061e120b2c67a24453cf6368e63f1be05600000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000001e13380000000000000000000000000000000000000000000000000000000000000012c
-----Decoded View---------------
Arg [0] : _uniswapV2RouterAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _feeRecipientAddress (address): 0x910090Ea889B64B4e722ea4b8fF6D5e734dFb38F
Arg [2] : trustedDepositTokenAddress (address): 0x961C8c0B1aaD0c0b10a51FeF6a867E3091BCef17
Arg [3] : trustedRewardTokenAddress (address): 0xBD100d061E120b2c67A24453CF6368E63f1Be056
Arg [4] : referralFeeRateX100 (uint256): 500
Arg [5] : stakingFeeRateX100 (uint256): 0
Arg [6] : unstakingFeeRateX100 (uint256): 0
Arg [7] : rewardRateX100 (uint256): 2500
Arg [8] : rewardInterval (uint256): 31536000
Arg [9] : lockupTime (uint256): 300
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000910090ea889b64b4e722ea4b8ff6d5e734dfb38f
Arg [2] : 000000000000000000000000961c8c0b1aad0c0b10a51fef6a867e3091bcef17
Arg [3] : 000000000000000000000000bd100d061e120b2c67a24453cf6368e63f1be056
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 00000000000000000000000000000000000000000000000000000000000009c4
Arg [8] : 0000000000000000000000000000000000000000000000000000000001e13380
Arg [9] : 000000000000000000000000000000000000000000000000000000000000012c
Deployed Bytecode Sourcemap
29168:21061:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31714:39;;;:::i;:::-;;;;;;;;;;;;;;;;36017:284;;;;;;;;;;;;;;;;-1:-1:-1;36017:284:0;-1:-1:-1;;;;;36017:284:0;;:::i;:::-;;31364:102;;;:::i;:::-;;;;-1:-1:-1;;;;;31364:102:0;;;;;;;;;;;;;;42853:242;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42853:242:0;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;42853:242:0;;;;;;;;;;;;;;;;;;;;;48502:1157;;;;;;;;;;;;;;;;-1:-1:-1;48502:1157:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42612:235;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42612:235:0;;;;;;;;:::i;37104:570::-;;;;;;;;;;;;;;;;-1:-1:-1;37104:570:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37104:570:0;;;;;;;;;;;;:::i;42211:101::-;;;:::i;37686:239::-;;;:::i;47605:885::-;;;;;;;;;;;;;;;;-1:-1:-1;47605:885:0;;;;;;;;;;;;:::i;32450:52::-;;;;;;;;;;;;;;;;-1:-1:-1;32450:52:0;-1:-1:-1;;;;;32450:52:0;;:::i;36307:224::-;;;;;;;;;;;;;;;;-1:-1:-1;36307:224:0;;:::i;32820:57::-;;;;;;;;;;;;;;;;-1:-1:-1;32820:57:0;-1:-1:-1;;;;;32820:57:0;;:::i;:::-;;;;;;;;;;;;;;;;;;43107:666;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43107:666:0;;;;;;;;;;;;;;;;;;:::i;32281:44::-;;;;;;;;;;;;;;;;-1:-1:-1;32281:44:0;-1:-1:-1;;;;;32281:44:0;;:::i;30697:38::-;;;:::i;31760:31::-;;;:::i;32387:50::-;;;;;;;;;;;;;;;;-1:-1:-1;32387:50:0;-1:-1:-1;;;;;32387:50:0;;:::i;30768:38::-;;;:::i;36735:198::-;;;;;;;;;;;;;;;;-1:-1:-1;36735:198:0;-1:-1:-1;;;;;36735:198:0;;:::i;21496:20::-;;;:::i;41040:911::-;;;;;;;;;;;;;;;;-1:-1:-1;41040:911:0;-1:-1:-1;;;;;41040:911:0;;:::i;32515:45::-;;;;;;;;;;;;;;;;-1:-1:-1;32515:45:0;-1:-1:-1;;;;;32515:45:0;;:::i;35427:295::-;;;;;;;;;;;;;;;;-1:-1:-1;35427:295:0;;:::i;30372:89::-;;;:::i;35142:279::-;;;;;;;;;;;;;;;;-1:-1:-1;35142:279:0;;:::i;45643:1189::-;;;;;;;;;;;;;;;;-1:-1:-1;45643:1189:0;;;;;;;;;;;;:::i;30842:40::-;;;:::i;32226:48::-;;;;;;;;;;;;;;;;-1:-1:-1;32226:48:0;-1:-1:-1;;;;;32226:48:0;;:::i;32567:55::-;;;;;;;;;;;;;;;;-1:-1:-1;32567:55:0;-1:-1:-1;;;;;32567:55:0;;:::i;30468:88::-;;;:::i;32890:30::-;;;:::i;31096:49::-;;;:::i;31662:39::-;;;:::i;31620:35::-;;;:::i;31275:50::-;;;:::i;36537:192::-;;;;;;;;;;;;;;;;-1:-1:-1;36537:192:0;-1:-1:-1;;;;;36537:192:0;;:::i;34498:283::-;;;;;;;;;;;;;;;;-1:-1:-1;34498:283:0;-1:-1:-1;;;;;34498:283:0;;:::i;30949:41::-;;;:::i;41963:236::-;;;;;;;;;;;;;;;;-1:-1:-1;41963:236:0;-1:-1:-1;;;;;41963:236:0;;:::i;49764:462::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;49764:462:0;;;;;;;;;;;;;;;;;:::i;30654:36::-;;;:::i;46844:749::-;;;;;;;;;;;;;;;;-1:-1:-1;46844:749:0;;;;;;;;;;;;:::i;31573:34::-;;;:::i;22115:178::-;;;;;;;;;;;;;;;;-1:-1:-1;22115:178:0;-1:-1:-1;;;;;22115:178:0;;:::i;32332:48::-;;;;;;;;;;;;;;;;-1:-1:-1;32332:48:0;-1:-1:-1;;;;;32332:48:0;;:::i;31048:35::-;;;:::i;35728:283::-;;;;;;;;;;;;;;;;-1:-1:-1;35728:283:0;;:::i;42324:276::-;;;;;;;;;;;;;;;;-1:-1:-1;42324:276:0;-1:-1:-1;;;;;42324:276:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;43785:1846;;;;;;;;;;;;;;;;-1:-1:-1;43785:1846:0;;;-1:-1:-1;;;;;43785:1846:0;;;;;;;;;;;;;;;:::i;31714:39::-;;;:::o;36017:284::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;36119:42:0;::::1;36111:70;;;::::0;;-1:-1:-1;;;36111:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36111:70:0;;;;;;;;;;;;;::::1;;36192:15;:37:::0;;-1:-1:-1;;;;;;36192:37:0::1;-1:-1:-1::0;;;;;36192:37:0;;::::1;::::0;;;::::1;::::0;;;;36245:48:::1;::::0;;36276:15;;;::::1;36245:48:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;36017:284:::0;:::o;31364:102::-;;;-1:-1:-1;;;;;31364:102:0;;:::o;42853:242::-;-1:-1:-1;;;;;42991:38:0;;42934:15;42991:38;;;:29;:38;;;;;42934:15;;42991:44;;43033:1;42991:44;:41;:44;:::i;:::-;-1:-1:-1;;;;;43061:26:0;;;;;;:17;:26;;;;;;42981:54;;43061:26;;-1:-1:-1;42853:242:0;-1:-1:-1;;;42853:242:0:o;48502:1157::-;48609:24;48649:31;48696:35;48746:26;48807:8;48794:10;:21;48785:31;;;;;;48837:11;48851:24;:8;48864:10;48851:24;:12;:24;:::i;:::-;48837:38;;48886:25;48928:6;48914:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48914:21:0;;48886:49;;48946:32;48992:6;48981:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48981:18:0;;48946:53;;49010:36;49060:6;49049:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49049:18:0;;49010:57;;49078:27;49119:6;49108:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49108:18:0;-1:-1:-1;49078:48:0;-1:-1:-1;49161:10:0;49147:408;49177:8;49173:1;:12;49147:408;;;49216:14;49233:13;:7;49244:1;49233:13;:10;:13;:::i;:::-;49216:30;-1:-1:-1;49261:14:0;49278:17;:1;49284:10;49278:17;:5;:17;:::i;:::-;49261:34;;49332:6;49310:8;49319:9;49310:19;;;;;;;;;;;;;:28;-1:-1:-1;;;;;49310:28:0;;;-1:-1:-1;;;;;49310:28:0;;;;;49385:11;:19;49397:6;-1:-1:-1;;;;;49385:19:0;-1:-1:-1;;;;;49385:19:0;;;;;;;;;;;;;49353:18;49372:9;49353:29;;;;;;;;;;;;;:51;;;;;49455:15;:23;49471:6;-1:-1:-1;;;;;49455:23:0;-1:-1:-1;;;;;49455:23:0;;;;;;;;;;;;;49419:22;49442:9;49419:33;;;;;;;;;;;;;:59;;;;;49520:15;:23;49536:6;-1:-1:-1;;;;;49520:23:0;-1:-1:-1;;;;;49520:23:0;;;;;;;;;;;;;49493:13;49507:9;49493:24;;;;;;;;;;;;;;;;;:50;-1:-1:-1;49191:8:0;;-1:-1:-1;49191:1:0;49197;49191:8;:5;:8;:::i;:::-;49187:12;;49147:408;;;-1:-1:-1;49583:8:0;;49593:18;;-1:-1:-1;49593:18:0;-1:-1:-1;49583:8:0;;-1:-1:-1;48502:1157:0;-1:-1:-1;;;;48502:1157:0:o;42612:235::-;-1:-1:-1;;;;;42744:37:0;;42687:15;42744:37;;;:28;:37;;;;;42687:15;;42744:43;;42785:1;42744:43;:40;:43;:::i;37104:570::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;37369:25:::1;37383:10;37369:13;:25::i;:::-;37405:43;37428:19;37405:22;:43::i;:::-;37459:41;37481:18;37459:21;:41::i;:::-;37511:45;37535:20;37511:23;:45::i;:::-;37567:44;37603:6;37567:18;:44::i;:::-;37622;37645:20;37622:22;:44::i;:::-;37104:570:::0;;;;;;:::o;42211:101::-;42264:4;42288:16;:7;:14;:16::i;:::-;42281:23;;42211:101;:::o;37686:239::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;32087:11:::1;::::0;::::1;;32086:12;32078:57;;;::::0;;-1:-1:-1;;;32078:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32078:57:0;;;;;;;;;;;;;::::1;;37763:11:::2;:18:::0;;-1:-1:-1;;37763:18:0::2;37777:4;37763:18;::::0;;37813:28:::2;:3;31139:6;37813:28;:7;:28;:::i;:::-;37792:18;:49:::0;37866:1:::2;37852:11;:15:::0;;;37911:5;;37893:24:::2;::::0;-1:-1:-1;;;;;37911:5:0;;::::2;::::0;37893:24:::2;::::0;::::2;37686:239::o:0;47605:885::-;31919:32;31927:10;31919:30;:32::i;:::-;31917:35;:62;;;;-1:-1:-1;31956:9:0;31969:10;31956:23;31917:62;31909:96;;;;;-1:-1:-1;;;31909:96:0;;;;;;;;;;;;-1:-1:-1;;;31909:96:0;;;;;;;;;;;;;;;32087:11:::1;::::0;::::1;;32086:12;32078:57;;;::::0;;-1:-1:-1;;;32078:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32078:57:0;;;;;;;;;;;;;::::1;;47758:63:::2;47772:10;47784:25;47811:9;47758:13;:63::i;:::-;47866:10;47832:11;47846:31:::0;;;:19:::2;:31;::::0;;;;;47892:10;;47888:595:::2;;47939:10;47953:1;47919:31:::0;;;:19:::2;:31;::::0;;;;:35;;;48052:28:::2;::::0;;48082:29;48045:110:::2;::::0;-1:-1:-1;;;;;48052:28:0;;::::2;::::0;48082:29:::2;48113:6:::0;48121:22;48145:9;48045:6:::2;:110::i;:::-;48261:10;48245:27;::::0;;;:15:::2;:27;::::0;;;;;48016:139;;-1:-1:-1;48245:54:0::2;::::0;48016:139;48245:54:::2;:31;:54;:::i;:::-;48231:10;48215:27;::::0;;;:15:::2;:27;::::0;;;;;;;;:84;;;;48428:43;;;;;;;48231:10;;48428:43:::2;::::0;;;;;;;::::2;47888:595;;32146:1;47605:885:::0;;;:::o;32450:52::-;;;;;;;;;;;;;:::o;36307:224::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;36405:7:::1;36387:14;:25;;36379:59;;;::::0;;-1:-1:-1;;;36379:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36379:59:0;;;;;;;;;;;;;::::1;;36449:11;:28:::0;;;36493:30:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;36307:224:::0;:::o;32820:57::-;;;;;;;;;;;;;;;:::o;43107:666::-;37027:10;37002:36;;;;:24;:36;;;;;;;;36994:78;;;;;-1:-1:-1;;;36994:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43283:1:::1;43274:6;:10;43266:44;;;::::0;;-1:-1:-1;;;43266:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43266:44:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;43329:21:0;::::1;43321:50;;;::::0;;-1:-1:-1;;;43321:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43321:50:0;;;;;;;;;;;;;::::1;;43389:29;::::0;43382:89:::1;::::0;-1:-1:-1;;;;;43389:29:0::1;43437:10;43457:4;43464:6:::0;43382:89:::1;:54;:89;:::i;:::-;43492:67;43506:7;43515:32;43549:9;43492:13;:67::i;:::-;-1:-1:-1::0;;;;;43607:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;:36:::1;::::0;43636:6;43607:36:::1;:28;:36;:::i;:::-;-1:-1:-1::0;;;;;43580:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:63;43664:20:::1;:7;43596::::0;43664:20:::1;:11;:20;:::i;:::-;-1:-1:-1::0;;;;;;43701:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;;;;43724:3:::1;43701:26:::0;;43743:22;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;43107:666:::0;;;;:::o;32281:44::-;;;;;;;;;;;;;:::o;30697:38::-;;;;:::o;31760:31::-;;;;;;:::o;32387:50::-;;;;;;;;;;;;;:::o;30768:38::-;;;;:::o;36735:198::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;36828:34:0;::::1;36865:5;36828:34:::0;;;:24:::1;:34;::::0;;;;;;;;:42;;-1:-1:-1;;36828:42:0::1;::::0;;36886:39;;;;;;;::::1;::::0;;;;;;;;::::1;36735:198:::0;:::o;21496:20::-;;;-1:-1:-1;;;;;21496:20:0;;:::o;41040:911::-;41102:4;41124:25;:7;41141;41124:25;:16;:25;:::i;:::-;41119:40;;-1:-1:-1;41158:1:0;41151:8;;41119:40;-1:-1:-1;;;;;41174:24:0;;;;;;:15;:24;;;;;;41170:43;;-1:-1:-1;41212:1:0;41205:8;;41170:43;41234:13;41258:19;41280:38;41302:15;;41280:17;:21;;:38;;;;:::i;:::-;41258:60;-1:-1:-1;41341:3:0;41359:21;;;41355:75;;;-1:-1:-1;41404:14:0;41355:75;-1:-1:-1;;;;;41454:24:0;;;;;;:15;:24;;;;;;:32;-1:-1:-1;41450:155:0;;41514:1;41503:12;;41450:155;;;-1:-1:-1;;;;;41568:24:0;;;;;;:15;:24;;;;;;41559:34;;:4;;:34;:8;:34;:::i;:::-;41548:45;;41450:155;-1:-1:-1;;;;;41637:24:0;;41617:17;41637:24;;;:15;:24;;;;;;41845:15;;41748:17;;41637:24;;41617:17;41701:199;;41896:3;;41701:160;;41845:15;41701:160;;41801:8;;41701:65;;41637:24;;41701:65;:46;:65;:::i;:::-;:99;:109;:99;:109;:::i;:::-;:143;:160;:143;:160;:::i;:199::-;41682:218;-1:-1:-1;;;;;;41040:911:0;;;;:::o;32515:45::-;;;;;;;;;;;;-1:-1:-1;;;;;32515:45:0;;:::o;35427:295::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;35554:5:::1;35527:24;:32;35519:72;;;::::0;;-1:-1:-1;;;35519:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35602:24;:51:::0;;;35669:45:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35427:295:::0;:::o;30372:89::-;;;-1:-1:-1;;;;;30372:89:0;;:::o;35142:279::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;35263:5:::1;35238:22;:30;35230:68;;;::::0;;-1:-1:-1;;;35230:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35309:22;:47:::0;;;35372:41:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35142:279:::0;:::o;45643:1189::-;31919:32;31927:10;31919:30;:32::i;:::-;31917:35;:62;;;;-1:-1:-1;31956:9:0;31969:10;31956:23;31917:62;31909:96;;;;;-1:-1:-1;;;31909:96:0;;;;;;;;;;;;-1:-1:-1;;;31909:96:0;;;;;;;;;;;;;;;45794:10:::1;45778:27;::::0;;;:15:::1;:27;::::0;;;;;:47;-1:-1:-1;45778:47:0::1;45770:86;;;::::0;;-1:-1:-1;;;45770:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;45920:11;::::0;45905:10:::1;45893:23;::::0;;;:11:::1;:23;::::0;;;;;45885:32:::1;::::0;:3:::1;::::0;:32:::1;:7;:32;:::i;:::-;:46;45877:111;;;;-1:-1:-1::0;;;45877:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46009:63;46023:10;46035:25;46062:9;46009:13;:63::i;:::-;46093:8;46104:55;46155:3;46104:46;46125:24;;46104:16;:20;;:46;;;;:::i;:55::-;46093:66:::0;-1:-1:-1;46170:19:0::1;46192:25;:16:::0;46093:66;46192:25:::1;:20;:25;:::i;:::-;46170:47:::0;-1:-1:-1;46232:7:0;;46228:116:::1;;46307:19;::::0;;46263:29;46256:76:::1;::::0;-1:-1:-1;;;;;46263:29:0;;::::1;::::0;46307:19:::1;46328:3:::0;46256:76:::1;:50;:76;:::i;:::-;46361:29;::::0;46354:78:::1;::::0;-1:-1:-1;;;;;46361:29:0::1;46405:10;46417:14:::0;46354:78:::1;:50;:78;:::i;:::-;46499:10;46483:27;::::0;;;:15:::1;:27;::::0;;;;;:49:::1;::::0;46515:16;46483:49:::1;:31;:49;:::i;:::-;46469:10;46453:27;::::0;;;:15:::1;:27;::::0;;;;:79;;;;46557:28:::1;::::0;:7:::1;::::0;:28:::1;:16;:28;:::i;:::-;:64;;;;-1:-1:-1::0;46605:10:0::1;46589:27;::::0;;;:15:::1;:27;::::0;;;;;:32;46557:64:::1;46553:209;;;46638:26;:7;46653:10;46638:26;:14;:26;:::i;:::-;-1:-1:-1::0;46739:10:0::1;46679:52;46709:21:::0;;;:9:::1;:21;::::0;;;;;;;;-1:-1:-1;;;;;46709:21:0::1;46679:52:::0;;:29:::1;:52:::0;;;;;:71:::1;::::0;::::1;:59;:71;:::i;:::-;;46553:209;46787:37;::::0;;46795:10:::1;46787:37:::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;32016:1;;45643:1189:::0;;;:::o;30842:40::-;;;;:::o;32226:48::-;;;;;;;;;;;;;:::o;32567:55::-;;;;;;;;;;;;;:::o;30468:88::-;;;-1:-1:-1;;;;;30468:88:0;;:::o;32890:30::-;;;;:::o;31096:49::-;31139:6;31096:49;:::o;31662:39::-;;;;:::o;31620:35::-;;;;:::o;31275:50::-;31317:8;31275:50;:::o;36537:192::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;36627:34:0;::::1;;::::0;;;:24:::1;:34;::::0;;;;;;;;:41;;-1:-1:-1;;36627:41:0::1;36664:4;36627:41;::::0;;36684:37;;;;;;;::::1;::::0;;;;;;;;::::1;36537:192:::0;:::o;34498:283::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;34598:36:0;::::1;34590:65;;;::::0;;-1:-1:-1;;;34590:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34590:65:0;;;;;;;;;;;;;::::1;;34666:19;:44:::0;;-1:-1:-1;;;;;;34666:44:0::1;-1:-1:-1::0;;;;;34666:44:0;;::::1;::::0;;;::::1;::::0;;;;34726:47:::1;::::0;;34753:19;;;::::1;34726:47:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;34498:283:::0;:::o;30949:41::-;;;;:::o;41963:236::-;42032:4;42049:12;42064:23;42079:7;42064:14;:23::i;:::-;-1:-1:-1;;;;;42119:28:0;;42098:18;42119:28;;;:19;:28;;;;;;42049:38;;-1:-1:-1;42165:26:0;42049:38;42119:28;42165:26;:11;:26;:::i;:::-;42158:33;41963:236;-1:-1:-1;;;;41963:236:0:o;49764:462::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;49872:23:0;::::1;49864:53;;;::::0;;-1:-1:-1;;;49864:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49864:53:0;;;;;;;;;;;;;::::1;;49942:18;;49936:3;:24;49928:62;;;::::0;;-1:-1:-1;;;49928:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;50005:19:0;::::1;50001:162;;50103:27;::::0;50078:9;;-1:-1:-1;;;;;50103:19:0;::::1;::::0;:27;::::1;;;::::0;50123:6;;50041:26:::1;50103:27:::0;50041:26;50103:27;50123:6;50103:19;:27;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;50145:7;;;50001:162;50173:45;-1:-1:-1::0;;;;;50173:26:0;::::1;50200:9:::0;50211:6;50173:45:::1;:26;:45;:::i;:::-;49764:462:::0;;;:::o;30654:36::-;;;;:::o;46844:749::-;31919:32;31927:10;31919:30;:32::i;:::-;31917:35;:62;;;;-1:-1:-1;31956:9:0;31969:10;31956:23;31917:62;31909:96;;;;;-1:-1:-1;;;31909:96:0;;;;;;;;;;;;-1:-1:-1;;;31909:96:0;;;;;;;;;;;;;;;32087:11:::1;::::0;::::1;;32086:12;32078:57;;;::::0;;-1:-1:-1;;;32078:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32078:57:0;;;;;;;;;;;;;::::1;;46991:63:::2;47005:10;47017:25;47044:9;46991:13;:63::i;:::-;47099:10;47065:11;47079:31:::0;;;:19:::2;:31;::::0;;;;;47125:10;;47121:465:::2;;47172:10;47186:1;47152:31:::0;;;:19:::2;:31;::::0;;;;:35;;;47285:28:::2;::::0;;47315:29;47278:107:::2;::::0;-1:-1:-1;;;;;47285:28:0;;::::2;::::0;47315:29:::2;47346:6:::0;47354:19;47375:9;47278:6:::2;:107::i;:::-;47421:29;::::0;47249:136;;-1:-1:-1;47414:85:0::2;::::0;-1:-1:-1;;;;;47421:29:0::2;47465:10;47249:136:::0;47414:85:::2;:50;:85;:::i;:::-;47521:53;::::0;;;;;;;47540:10:::2;::::0;47521:53:::2;::::0;;;;;::::2;::::0;;::::2;47121:465;32146:1;46844:749:::0;;;:::o;31573:34::-;;;-1:-1:-1;;;;;31573:34:0;;:::o;22115:178::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;-1:-1:-1;;;;;22192:22:0;::::1;22184:31;;;::::0;::::1;;22248:5;::::0;;22227:37:::1;::::0;-1:-1:-1;;;;;22227:37:0;;::::1;::::0;22248:5;::::1;::::0;22227:37:::1;::::0;::::1;22271:5;:16:::0;;-1:-1:-1;;;;;;22271:16:0::1;-1:-1:-1::0;;;;;22271:16:0;;;::::1;::::0;;;::::1;::::0;;22115:178::o;32332:48::-;;;;;;;;;;;;;:::o;31048:35::-;;;;:::o;35728:283::-;21926:5;;-1:-1:-1;;;;;21926:5:0;21912:10;:19;21904:28;;;;;;35852:5:::1;35826:23;:31;35818:66;;;::::0;;-1:-1:-1;;;35818:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35818:66:0;;;;;;;;;;;;;::::1;;35895:23;:49:::0;;;35960:43:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35728:283:::0;:::o;42324:276::-;-1:-1:-1;;;;;42470:39:0;;42401:19;42470:39;;;:29;:39;;;;;42401:19;;42470:48;;:46;:48::i;:::-;-1:-1:-1;;;;;42545:38:0;;;;;;:28;:38;;;;;42453:65;;-1:-1:-1;42545:47:0;;:45;:47::i;:::-;42529:63;;42324:276;;;:::o;43785:1846::-;31919:32;31927:10;31919:30;:32::i;:::-;31917:35;:62;;;;-1:-1:-1;31956:9:0;31969:10;31956:23;31917:62;31909:96;;;;;-1:-1:-1;;;31909:96:0;;;;;;;;;;;;-1:-1:-1;;;31909:96:0;;;;;;;;;;;;;;;32087:11:::1;::::0;::::1;;32086:12;32078:57;;;::::0;;-1:-1:-1;;;32078:57:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32078:57:0;;;;;;;;;;;;;::::1;;43968:1:::2;43952:13;:17;43944:53;;;::::0;;-1:-1:-1;;;43944:53:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;44015:29;::::0;44008:96:::2;::::0;-1:-1:-1;;;;;44015:29:0::2;44063:10;44083:4;44090:13:::0;44008:96:::2;:54;:96;:::i;:::-;44125:63;44139:10;44151:25;44178:9;44125:13;:63::i;:::-;44209:8;44220:50;44266:3;44220:41;44238:22;;44220:13;:17;;:41;;;;:::i;:50::-;44209:61:::0;-1:-1:-1;44281:19:0::2;44303:22;:13:::0;44209:61;44303:22:::2;:17;:22;:::i;:::-;44281:44:::0;-1:-1:-1;44340:7:0;;44336:116:::2;;44415:19;::::0;;44371:29;44364:76:::2;::::0;-1:-1:-1;;;;;44371:29:0;;::::2;::::0;44415:19:::2;44436:3:::0;44364:76:::2;:50;:76;:::i;:::-;45162:10;45146:27;::::0;;;:15:::2;:27;::::0;;;;;:47:::2;::::0;45178:14;45146:47:::2;:31;:47;:::i;:::-;45132:10;45116:27;::::0;;;:15:::2;:27;::::0;;;;:77;;;;45214:23:::2;::::0;:7:::2;::::0;:23:::2;:11;:23;:::i;:::-;-1:-1:-1::0;45272:10:0::2;45295:1;45262:21:::0;;;:9:::2;:21;::::0;;;;;-1:-1:-1;;;;;45262:21:0::2;45258:100;;45324:10;45314:21;::::0;;;:9:::2;:21;::::0;;;;:32;;-1:-1:-1;;;;;;45314:32:0::2;-1:-1:-1::0;;;;;45314:32:0;::::2;;::::0;;45258:100:::2;45434:10;45378:51;45407:21:::0;;;:9:::2;:21;::::0;;;;;;;;-1:-1:-1;;;;;45407:21:0::2;45378:51:::0;;:28:::2;:51:::0;;;;;:67:::2;::::0;::::2;:55;:67;:::i;:::-;-1:-1:-1::0;45513:10:0::2;45456:52;45486:21:::0;;;:9:::2;:21;::::0;;;;;;;;-1:-1:-1;;;;;45486:21:0::2;45456:52:::0;;:29:::2;:52:::0;;;;;:68:::2;::::0;::::2;:56;:68;:::i;:::-;-1:-1:-1::0;45557:10:0::2;45545:23;::::0;;;:11:::2;:23;::::0;;;;;;;;45571:3:::2;45545:29:::0;;45590:33;;;;;;::::2;::::0;;;;;::::2;::::0;;;;;;;;::::2;32146:1;;43785:1846:::0;;;;:::o;909:181::-;967:7;999:5;;;1023:6;;;;1015:46;;;;;-1:-1:-1;;;1015:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1081:1;-1:-1:-1;909:181:0;;;;;:::o;19516:149::-;19590:7;19633:22;19637:3;19649:5;19633:3;:22::i;1373:136::-;1431:7;1458:43;1462:1;1465;1458:43;;;;;;;;;;;;;;;;;:3;:43::i;19055:117::-;19118:7;19145:19;19153:3;19145:7;:19::i;6050:422::-;6417:20;6456:8;;;6050:422::o;39207:962::-;39314:16;39333:23;39348:7;39333:14;:23::i;:::-;39314:42;-1:-1:-1;39371:15:0;;39367:754;;39403:16;39422:51;39467:5;39422:40;39438:23;;39422:11;:15;;:40;;;;:::i;:51::-;39403:70;-1:-1:-1;39488:24:0;39515:28;:11;39403:70;39515:28;:15;:28;:::i;:::-;-1:-1:-1;;;;;39617:18:0;;;39572:12;39617:18;;;:9;:18;;;;;;39488:55;;-1:-1:-1;39572:12:0;39587:100;;39617:18;39637:11;39650:25;39677:9;39587:29;:100::i;:::-;39572:115;-1:-1:-1;39730:11:0;39756:76;;;;-1:-1:-1;39797:19:0;39756:76;-1:-1:-1;;;;;39891:28:0;;;;;;:19;:28;;;;;;:40;;39924:6;39891:40;:32;:40;:::i;:::-;-1:-1:-1;;;;;39860:28:0;;;;;;:19;:28;;;;;;;;:71;;;;39975:17;:26;;;;:38;;40006:6;39975:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;39946:26:0;;;;;;:17;:26;;;;;:67;40064:19;;:31;;40088:6;40064:31;:23;:31;:::i;:::-;40042:19;:53;-1:-1:-1;;;;39367:754:0;-1:-1:-1;;;;;;;;40131:24:0;;;;;:15;:24;;;;;40158:3;40131:30;;39207:962::o;37937:1258::-;38072:21;38137:7;-1:-1:-1;;;;;38124:20:0;:9;-1:-1:-1;;;;;38124:20:0;;38120:75;;;-1:-1:-1;38168:15:0;38161:22;;38120:75;38257:15;;38219:58;;-1:-1:-1;;;;;38219:29:0;;;;38257:15;;38219:58;:29;:58;:::i;:::-;38326:15;;38288:72;;-1:-1:-1;;;;;38288:29:0;;;;38326:15;38344;38288:72;:29;:72;:::i;:::-;38406:40;;;-1:-1:-1;;;38406:40:0;;38440:4;38406:40;;;;;;38381:22;;-1:-1:-1;;;;;38406:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38406:40:0;38526:15;;:22;;;-1:-1:-1;;;38526:22:0;;;;38406:40;;-1:-1:-1;38467:21:0;;-1:-1:-1;;;;;38526:15:0;;;;:20;;:22;;;;;38406:40;;38526:22;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38526:22:0;-1:-1:-1;;;;;38513:35:0;;;;;;;:72;;;38563:15;;;;;;;;;-1:-1:-1;;;;;38563:15:0;-1:-1:-1;;;;;38563:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38563:22:0;-1:-1:-1;;;;;38552:33:0;;;;;;38513:72;38509:363;;;38609:16;;;38623:1;38609:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38609:16:0;38602:23;;38650:9;38640:4;38645:1;38640:7;;;;;;;;;;;;;:19;-1:-1:-1;;;;;38640:19:0;;;-1:-1:-1;;;;;38640:19:0;;;;;38684:7;38674:4;38679:1;38674:7;;;;;;;;;;;;;:17;-1:-1:-1;;;;;38674:17:0;;;-1:-1:-1;;;;;38674:17:0;;;;;38509:363;;;38731:16;;;38745:1;38731:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38731:16:0;38724:23;;38772:9;38762:4;38767:1;38762:7;;;;;;;;-1:-1:-1;;;;;38762:19:0;;;:7;;;;;;;;;;:19;;;;38806:15;;:22;;;-1:-1:-1;;;38806:22:0;;;;:15;;;;;:20;;:22;;;;;38762:7;;38806:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38806:22:0;38796:7;;:4;;38801:1;;38796:7;;;;;;;;;;;:32;-1:-1:-1;;;;;38796:32:0;;;-1:-1:-1;;;;;38796:32:0;;;;;38853:7;38843:4;38848:1;38843:7;;;;;;;;;;;;;:17;-1:-1:-1;;;;;38843:17:0;;;-1:-1:-1;;;;;38843:17:0;;;;;38509:363;38892:15;;:102;;-1:-1:-1;;;38892:102:0;;;;;;;;;;;;;;38978:4;38892:102;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38892:15:0;;;;:40;;38933:15;;38950:12;;38964:4;;38978;;38985:8;;38892:102;;;;;;;;;;;;:15;:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38892:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38892:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;38892:102:0;;;;;;;;-1:-1:-1;;;39040:40:0;;39074:4;39040:40;;;;;39015:22;;-1:-1:-1;;;;;;39040:25:0;;;-1:-1:-1;39040:25:0;;-1:-1:-1;39040:40:0;;;;;-1:-1:-1;39040:40:0;;-1:-1:-1;39040:40:0;;;;;;;:25;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39040:40:0;;-1:-1:-1;39091:20:0;39114:40;39040;39136:17;39114:40;:21;:40;:::i;:::-;39091:63;-1:-1:-1;;;;;37937:1258:0;;;;;;;;:::o;25757:205::-;25885:68;;;-1:-1:-1;;;;;25885:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25885:68:0;-1:-1:-1;;;25885:68:0;;;25858:96;;25878:5;;25858:19;:96::i;18257:143::-;18327:4;18351:41;18356:3;-1:-1:-1;;;;;18376:14:0;;18351:4;:41::i;18811:158::-;18891:4;18915:46;18925:3;-1:-1:-1;;;;;18945:14:0;;18915:9;:46::i;2263:471::-;2321:7;2566:6;2562:47;;-1:-1:-1;2596:1:0;2589:8;;2562:47;2633:5;;;2637:1;2633;:5;:1;2657:5;;;;;:10;2649:56;;;;-1:-1:-1;;;2649:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3210:132;3268:7;3295:39;3299:1;3302;3295:39;;;;;;;;;;;;;;;;;:3;:39::i;25572:177::-;25682:58;;;-1:-1:-1;;;;;25682:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25682:58:0;-1:-1:-1;;;25682:58:0;;;25655:86;;25675:5;;25655:19;:86::i;18576:149::-;18649:4;18673:44;18681:3;-1:-1:-1;;;;;18701:14:0;;18673:7;:44::i;17799:204::-;17894:18;;17866:7;;17894:26;-1:-1:-1;17886:73:0;;;;-1:-1:-1;;;17886:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17977:3;:11;;17989:5;17977:18;;;;;;;;;;;;;;;;17970:25;;17799:204;;;;:::o;1812:192::-;1898:7;1934:12;1926:6;;;;1918:29;;;;-1:-1:-1;;;1918:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:5:0;;;1812:192;;;;;;:::o;17346:109::-;17429:18;;17346:109::o;40181:847::-;40315:4;-1:-1:-1;;;;;40336:21:0;;;;;;:35;;;40370:1;40361:6;:10;40336:35;40332:666;;;40471:28;;;40501:29;40435:26;;40464:113;;-1:-1:-1;;;;;40471:28:0;;;;40501:29;40532:6;40540:25;40567:9;40464:6;:113::i;:::-;-1:-1:-1;;;;;40640:31:0;;;;;;:22;:31;;;;;;40435:142;;-1:-1:-1;40640:58:0;;40435:142;40640:58;:35;:58;:::i;:::-;-1:-1:-1;;;;;40606:31:0;;;;;;;:22;:31;;;;;:92;;;;40720:29;;40713:82;;40720:29;40629:7;40773:21;40713:82;:50;:82;:::i;:::-;40836:23;;:50;;40864:21;40836:50;:27;:50;:::i;:::-;40810:23;:76;40906:54;;;;;;;;-1:-1:-1;;;;;40906:54:0;;;;;;;;;;;;;40982:4;40975:11;;;;;40332:666;-1:-1:-1;41015:5:0;40181:847;;;;;;:::o;26231:622::-;26601:10;;;26600:62;;-1:-1:-1;26617:39:0;;;-1:-1:-1;;;26617:39:0;;26641:4;26617:39;;;;-1:-1:-1;;;;;26617:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26617:39:0;:44;26600:62;26592:152;;;;-1:-1:-1;;;26592:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26782:62;;;-1:-1:-1;;;;;26782:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26782:62:0;-1:-1:-1;;;26782:62:0;;;26755:90;;26775:5;;27877:761;28301:23;28327:69;28355:4;28327:69;;;;;;;;;;;;;;;;;28335:5;-1:-1:-1;;;;;28327:27:0;;;:69;;;;;:::i;:::-;28411:17;;28301:95;;-1:-1:-1;28411:21:0;28407:224;;28553:10;28542:30;;;;;;;;;;;;;;;-1:-1:-1;28542:30:0;28534:85;;;;-1:-1:-1;;;28534:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14911:414;14974:4;14996:21;15006:3;15011:5;14996:9;:21::i;:::-;14991:327;;-1:-1:-1;15034:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;15217:18;;15195:19;;;:12;;;:19;;;;;;:40;;;;15250:11;;14991:327;-1:-1:-1;15301:5:0;15294:12;;17131:129;17204:4;17228:19;;;:12;;;;;:19;;;;;;:24;;;17131:129::o;3838:278::-;3924:7;3959:12;3952:5;3944:28;;;;-1:-1:-1;;;3944:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3983:9;3999:1;3995;:5;;;;;;;3838:278;-1:-1:-1;;;;;3838:278:0:o;15501:1544::-;15567:4;15706:19;;;:12;;;:19;;;;;;15742:15;;15738:1300;;16177:18;;-1:-1:-1;;16128:14:0;;;;16177:22;;;;16104:21;;16177:3;;:22;;16464;;;;;;;;;;;;;;16444:42;;16610:9;16581:3;:11;;16593:13;16581:26;;;;;;;;;;;;;;;;;;;:38;;;;16687:23;;;16729:1;16687:12;;;:23;;;;;;16713:17;;;16687:43;;16839:17;;16687:3;;16839:17;;;;;;;;;;;;;;;;;;;;;;16934:3;:12;;:19;16947:5;16934:19;;;;;;;;;;;16927:26;;;16977:4;16970:11;;;;;;;;15738:1300;17021:5;17014:12;;;;;8968:195;9071:12;9103:52;9125:6;9133:4;9139:1;9142:12;9071;10272:18;10283:6;10272:10;:18::i;:::-;10264:60;;;;;-1:-1:-1;;;10264:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10398:12;10412:23;10439:6;-1:-1:-1;;;;;10439:11:0;10459:5;10467:4;10439:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10439:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10397:75;;;;10490:52;10508:7;10517:10;10529:12;10490:17;:52::i;:::-;10483:59;10020:530;-1:-1:-1;;;;;;;10020:530:0:o;12560:742::-;12675:12;12704:7;12700:595;;;-1:-1:-1;12735:10:0;12728:17;;12700:595;12849:17;;:21;12845:439;;13112:10;13106:17;13173:15;13160:10;13156:2;13152:19;13145:44;13060:148;13248:20;;-1:-1:-1;;;13248:20:0;;;;;;;;;;;;;;;;;13255:12;;13248:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://55ec40d3c4ec4816e5ad0bf346223e79c5531d4d0590afb0fd96ae6bcb8005a0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.293548 | 97.713 | $28.68 |
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.