More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,585 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Emergency Withdr... | 18539651 | 525 days ago | IN | 0 ETH | 0.00140955 | ||||
Emergency Withdr... | 18539648 | 525 days ago | IN | 0 ETH | 0.00145559 | ||||
Emergency Withdr... | 18539644 | 525 days ago | IN | 0 ETH | 0.00582895 | ||||
Emergency Withdr... | 18539639 | 525 days ago | IN | 0 ETH | 0.00133425 | ||||
Emergency Withdr... | 18539631 | 525 days ago | IN | 0 ETH | 0.00166474 | ||||
Emergency Withdr... | 18539629 | 525 days ago | IN | 0 ETH | 0.00708817 | ||||
Emergency Withdr... | 18539627 | 525 days ago | IN | 0 ETH | 0.00146652 | ||||
Withdraw | 16131155 | 863 days ago | IN | 0 ETH | 0.00114378 | ||||
Withdraw | 15523935 | 949 days ago | IN | 0 ETH | 0.00039837 | ||||
Deposit | 14722856 | 1078 days ago | IN | 0 ETH | 0.00164159 | ||||
Withdraw | 14722855 | 1078 days ago | IN | 0 ETH | 0.00425343 | ||||
Withdraw | 14721904 | 1078 days ago | IN | 0 ETH | 0.00288629 | ||||
Deposit | 14721883 | 1078 days ago | IN | 0 ETH | 0.00485167 | ||||
Deposit | 14563820 | 1103 days ago | IN | 0 ETH | 0.0041373 | ||||
Deposit | 14505742 | 1112 days ago | IN | 0 ETH | 0.00429425 | ||||
Withdraw | 14476784 | 1117 days ago | IN | 0 ETH | 0.01055314 | ||||
Withdraw | 14444723 | 1122 days ago | IN | 0 ETH | 0.01039252 | ||||
Withdraw | 14444712 | 1122 days ago | IN | 0 ETH | 0.0056563 | ||||
Deposit | 14444709 | 1122 days ago | IN | 0 ETH | 0.00269603 | ||||
Withdraw | 14444707 | 1122 days ago | IN | 0 ETH | 0.0095495 | ||||
Withdraw | 14423929 | 1125 days ago | IN | 0 ETH | 0.00361944 | ||||
Deposit | 14423928 | 1125 days ago | IN | 0 ETH | 0.00340663 | ||||
Withdraw | 14292391 | 1145 days ago | IN | 0 ETH | 0.00560993 | ||||
Withdraw | 14292391 | 1145 days ago | IN | 0 ETH | 0.00588508 | ||||
Withdraw | 14292391 | 1145 days ago | IN | 0 ETH | 0.00658685 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GovTreasurer
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-22 */ //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////.////////////////////////////////.//////////////////////////////////// ///////////////////////////////////.@.//////////////////////////////////.@.///////////////////////////////// ////////////////////////////////.@@.//////////////////////////////////////.@@.////////////////////////////// /////////////////////////////..@@@.////////////////////////////////////////.@@@../////////////////////////// ///////////////////////////.@@@@@.//////////////////////////////////////////.@@@@@.///////////////////////// /////////////////////////.@@@@@@@////////////////////////////////////////////@@@@@@@./////////////////////// ////////////////////////.@@@@@@@.////////////////////////////////////////////.@@@@@@@.////////////////////// //////////////////..///.@@@@@@@@//////////////////////////////////////////////@@@@@@@@.///..//////////////// ////////////////.@@.//.@@@@@@@@@//////////////////////////////////////////////@@@@@@@@@.//.@@.////////////// ///////////////@@@@.//@@@@@@@@@.//////////////////////////////////////////////.@@@@@@@@@//@@@@@///////////// //////////////@@@@@@//@@@@@@@@@.//////////////////////////////////////////////.@@@@@@@@@//@@@@@@//////////// /////////////@@@@@@@./@@@@@@@@@@//////////////////////////////////////////////@@@@@@@@@./.@@@@@@@/////////// /////////////@@@@@@@@//@@@@@@@@@.////////////////////////////////////////////.@@@@@@@@@//@@@@@@@@/////////// /////////////@@@@@@@@.//.@@@@@@@@.//////////////////////////////////////////@@@@@@@@@.//.@@@@@@@@/////////// /////////////@@@@@@@@@///.@@@@@@@@@.////////.//////////////////////////////@@@@@@@@@.///@@@@@@@@@/////////// /////////////.@@@@@@@@@///..@@@@@@@.////////.@.///////////////////////////.@@@@@@@.////@@@@@@@@@./////////// //////////////.@@@@@@@@@.////.@@@@///////////.@@.//////////////////////////.@@@@.////.@@@@@@@@@.//////////// //////////.////.@@@@@@@@@@./////./////////////.@@@@..////////////////////////./////.@@@@@@@@@@.///..//////// //////////@@.///.@@@@@@@@@@@.//////////////////.@@@@@@@@@@./////////////////////..@@@@@@@@@@.///.@@.//////// //////////@@@@.///.@@@@@@@@@@@@.////////////////.@@@@@@@@@@@..///////////////.@@@@@@@@@@@@@.//.@@@@.//////// //////////.@@@@@@.///.@@@@@@@@@@@.///////////////.@@@@@@@@@@@@./////////////.@@@@@@@@@@@.//.@@@@@@@.//////// //////////.@@@@@@@@.////.@@@@@@@@@.///////////////@@@@@@@@@...@////////////.@@@@@@@@@.//..@@@@@@@@@.//////// //////////.@@@@@@@@@@@..////..@@@@@@./////////////@@@@@@@@@ /////////////.@@@@@@..///..@@@@@@@@@@@.///////// ///////////.@@@@@@@@@@@@@@..//////.....///////////@@@@@@@@@.///////////...../////..@@@@@@@@@@@@@@@////////// ////////////.@@@@@@@@@@@@@@@@@@....///////////////@@@@@@@@@.///////////////...@@@@@@@@@@@@@@@@@@@.////////// /////////////.@@@@@@@@@@@@@@@@@@@@@@@@@@@..///////@@@@@@@@@@//////....@@@@@@@@@@@@@@@@@@@@@@@@@@./////////// //////////////.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.///.@@@@@@@@@@/////@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@///////////// ////////////////.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@///@@@@@@@@@@@.///.@@@@@@@@@@@@@@@@@@@@@@@@@@@@.////////////// //////////////////.@@@@@@@@@@@@@@@@@@@@@@@@@@@@/@@@@@@@@@@@@@./.@@@@@@@@@@@@@@@@@@@@@@@@@@@.//////////////// ////////////////////.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..////////////////// //////////////////////..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.///////////////////// /////////////////////////..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.//////////////////////// /////////////////////////////..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@../////////////////////////// /////////////////////////////////..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@../////////////////////////////// //////////////////////////////////////...@@@@@@@@@@@@@@@@@@@@@@@@@@@@...//////////////////////////////////// //////////////////////////////////////////////...@@@@@@@@@@@@@@...////////////////////////////////////////// //////////////////////////////////////////////////.@@@@@@@@@//////////////////////////////////////////////// ////////////////////////////////////////////////.@@@@@./@@@@@/////////////////////////////////////////////// ///////////////////////////////////////////////.@@@@@@///@@@@@.///////////////////////////////////////////// /////////////////////////////////////////////.@@@@@@@/.@./@@@@@@./////////////////////////////////////////// ////////////////////////////////////////////@@@@@@@@/.@@@/.@@@@@@@.///////////////////////////////////////// ///////////////////////////////////////////.@@@@@@@//@@@@@//@@@@@@@.//////////////////////////////////////// ////////////////////////////////////////////.@@@@@./@@@@@@@/.@@@@@.///////////////////////////////////////// //////////////////////////////////////////////.@@./@@@@@@@@@/.@@./////////////////////////////////////////// ///////////////////////////////////////////////../@@@@@@@@@@@/..//////////////////////////////////////////// /////////////////////////////////////////////////@@@@@@@@@@@@@////////////////////////////////////////////// ////////////////////////////////////////////////@@@@@@@@@@@@@@@///////////////////////////////////////////// ///////////////////////////////////////////////@@@@@@.///.@@@@@.//////////////////////////////////////////// //////////////////////////////////////////////.@@..//.@@..//..@@./////////////////////////////////////////// /////////////////////////////////////////////..//////@@@@//////...////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////_______///________//____////____//_______//______///////__///__////______////______//////////// /////////////@@_____|//@@@__@@@\/\@@@\ /@@@//|@@@____||@@@_ \/////|@@\ |@@|/// __ \//|@@@_@@\/////////// ////////////|@@|//__//|@@| |@@|//\@@@\/@@@///|@@|__///|@@|_) |////|@@@\|@@|/|@@| |@@|/|@@|_)@@|////////// ////////////|@@| |_@|/|@@| |@@|///\@@@@@@////|@@@__|//|@@@@@@//////|@@.@`@@|/|@@| |@@|/|@@@@@@//////////// ////////////|@@|__|@|/|@@`--'@@|////\@@@@/////|@@|____/|@@|\@@\----.|@@|\@@@|/|@@`--'@@|/|@@|\@@\----.////// /////////////\______|//\______///////\__//////|_______|| _| `._____||__| \__|//\______///|@_| `._____|////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// // // SPDX-License-Identifier: MIT pragma solidity 0.6.12; // /** * @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); } // /** * @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); } 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); } } } } // /** * @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"); } } } // /** * @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.3.0, sets of type `bytes32` (`Bytes32Set`), `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]; } // Bytes32Set struct Bytes32Set { 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(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, 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(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set 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(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, 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)); } } // /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // // GovTreasurer is the treasurer of GDAO. She may allocate GDAO and she is a fair lady <3 // Note that it's ownable and the owner wields tremendous power. The ownership // will be transferred to a governance smart contract once GDAO is sufficiently // distributed and the community can show to govern itself. contract GovTreasurer is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; address devaddr; address public treasury; IERC20 public gdao; uint256 public bonusEndBlock; uint256 public GDAOPerBlock; // INFO | USER VARIABLES struct UserInfo { uint256 amount; // How many tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. // // The pending GDAO entitled to a user is referred to as the pending reward: // // pending reward = (user.amount * pool.accGDAOPerShare) - user.rewardDebt - user.taxedAmount // // Upon deposit and withdraw, the following occur: // 1. The pool's `accGDAOPerShare` (and `lastRewardBlock`) gets updated. // 2. User receives the pending reward sent to his/her address. // 3. User's `amount` gets updated and taxed as 'taxedAmount'. // 4. User's `rewardDebt` gets updated. } // INFO | POOL VARIABLES struct PoolInfo { IERC20 token; // Address of token contract. uint256 allocPoint; // How many allocation points assigned to this pool. GDAOs to distribute per block. uint256 taxRate; // Rate at which the LP token is taxed. uint256 lastRewardBlock; // Last block number that GDAOs distribution occurs. uint256 accGDAOPerShare; // Accumulated GDAOs per share, times 1e12. See below. } PoolInfo[] public poolInfo; mapping (uint256 => mapping (address => UserInfo)) public userInfo; uint256 public totalAllocPoint = 0; uint256 public startBlock; event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); constructor(IERC20 _gdao, address _treasury, uint256 _GDAOPerBlock, uint256 _startBlock, uint256 _bonusEndBlock) public { gdao = _gdao; treasury = _treasury; devaddr = msg.sender; GDAOPerBlock = _GDAOPerBlock; startBlock = _startBlock; bonusEndBlock = _bonusEndBlock; } function poolLength() external view returns (uint256) { return poolInfo.length; } // VALIDATION | ELIMINATES POOL DUPLICATION RISK function checkPoolDuplicate(IERC20 _token) public view { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { require(poolInfo[pid].token != _token, "add: existing pool?"); } } // ADD | NEW TOKEN POOL function add(uint256 _allocPoint, IERC20 _token, uint256 _taxRate, bool _withUpdate) public onlyOwner { if (_withUpdate) { massUpdatePools(); } uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ token: _token, allocPoint: _allocPoint, taxRate: _taxRate, lastRewardBlock: lastRewardBlock, accGDAOPerShare: 0 })); } // UPDATE | ALLOCATION POINT function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner { if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; } // RETURN | REWARD MULTIPLIER OVER GIVEN BLOCK RANGE | INCLUDES START BLOCK function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { _from = _from >= startBlock ? _from : startBlock; if (_to <= bonusEndBlock) { return _to.sub(_from); } else if (_from >= bonusEndBlock) { return _to.sub(_from); } else { return bonusEndBlock.sub(_from).add( _to.sub(bonusEndBlock) ); } } // VIEW | PENDING REWARD function pendingGDAO(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accGDAOPerShare = pool.accGDAOPerShare; uint256 lpSupply = pool.token.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 GDAOReward = multiplier.mul(GDAOPerBlock).mul(pool.allocPoint).div(totalAllocPoint); accGDAOPerShare = accGDAOPerShare.add(GDAOReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accGDAOPerShare).div(1e12).sub(user.rewardDebt); } // UPDATE | (ALL) REWARD VARIABLES | BEWARE: HIGH GAS POTENTIAL function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // UPDATE | (ONE POOL) REWARD VARIABLES function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return; } uint256 lpSupply = pool.token.balanceOf(address(this)); if (lpSupply == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 GDAOReward = multiplier.mul(GDAOPerBlock).mul(pool.allocPoint).div(totalAllocPoint); safeGDAOTransfer(address(this), GDAOReward); pool.accGDAOPerShare = pool.accGDAOPerShare.add(GDAOReward.mul(1e12).div(lpSupply)); pool.lastRewardBlock = block.number; } // VALIDATE | AUTHENTICATE _PID modifier validatePool(uint256 _pid) { require(_pid < poolInfo.length, "gov: pool exists?"); _; } // WITHDRAW | ASSETS (TOKENS) WITH NO REWARDS | EMERGENCY ONLY function emergencyWithdraw(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; user.amount = 0; user.rewardDebt = 0; pool.token.safeTransfer(address(msg.sender), user.amount); emit EmergencyWithdraw(msg.sender, _pid, user.amount); } // DEPOSIT | ASSETS (TOKENS) function deposit(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); uint256 taxedAmount = _amount.div(pool.taxRate); if (user.amount > 0) { // if there are already some amount deposited uint256 pending = user.amount.mul(pool.accGDAOPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { // sends pending rewards, if applicable safeGDAOTransfer(msg.sender, pending); } } if(_amount > 0) { // if adding more pool.token.safeTransferFrom(address(msg.sender), address(this), _amount.sub(taxedAmount)); pool.token.safeTransferFrom(address(msg.sender), address(treasury), taxedAmount); user.amount = user.amount.add(_amount.sub(taxedAmount)); // update user.amount = non-taxed amount } user.rewardDebt = user.amount.mul(pool.accGDAOPerShare).div(1e12); emit Deposit(msg.sender, _pid, _amount.sub(taxedAmount)); } // WITHDRAW | ASSETS (TOKENS) function withdraw(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "withdraw: not good"); updatePool(_pid); uint256 pending = user.amount.mul(pool.accGDAOPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { // send pending GDAO rewards safeGDAOTransfer(msg.sender, pending); } if(_amount > 0) { user.amount = user.amount.sub(_amount); pool.token.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount.mul(pool.accGDAOPerShare).div(1e12); emit Withdraw(msg.sender, _pid, _amount); } // SAFE TRANSFER FUNCTION | ACCOUNTS FOR ROUNDING ERRORS | ENSURES SUFFICIENT GDAO IN POOLS. function safeGDAOTransfer(address _to, uint256 _amount) internal { uint256 GDAOBal = gdao.balanceOf(address(this)); if (_amount > GDAOBal) { gdao.transfer(_to, GDAOBal); } else { gdao.transfer(_to, _amount); } } // UPDATE | DEV ADDRESS | DEV-ONLY function dev(address _devaddr) public { require(msg.sender == devaddr, "dev: wut?"); devaddr = _devaddr; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_gdao","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"uint256","name":"_GDAOPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_bonusEndBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"GDAOPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_taxRate","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonusEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"checkPoolDuplicate","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gdao","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingGDAO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"taxRate","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accGDAOPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","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":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060085534801561001557600080fd5b506040516200290e3803806200290e833981810160405260a081101561003a57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600061008361020360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826005819055508160098190555080600481905550505050505061020b565b600033905090565b6126f3806200021b6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063630b5ba1116100c35780638dbb1e3a1161007c5780638dbb1e3a1461049a57806393f1a40b146104e6578063988d7a601461054f578063a29a0d90146105b3578063e2bbb158146105e7578063f2fde38b1461061f5761014d565b8063630b5ba1146103ac57806364482f79146103b6578063715018a6146103fa57806386059a8d146104045780638d88a90e146104225780638da5cb5b146104665761014d565b806340c5547d1161011557806340c5547d14610264578063441a3e70146102c657806348cd4cb1146102fe57806351eb05a61461031c5780635312ea8e1461034a57806361d027b3146103785761014d565b8063081e3eda146101525780631526fe271461017057806317caf6f1146101e45780631aed655314610202578063322d0d4a14610220575b600080fd5b61015a610663565b6040518082815260200191505060405180910390f35b61019c6004803603602081101561018657600080fd5b8101908080359060200190929190505050610670565b604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b6101ec6106d3565b6040518082815260200191505060405180910390f35b61020a6106d9565b6040518082815260200191505060405180910390f35b6102626004803603602081101561023657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106df565b005b6102b06004803603604081101561027a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107e4565b6040518082815260200191505060405180910390f35b6102fc600480360360408110156102dc57600080fd5b810190808035906020019092919080359060200190929190505050610a2a565b005b610306610c88565b6040518082815260200191505060405180910390f35b6103486004803603602081101561033257600080fd5b8101908080359060200190929190505050610c8e565b005b6103766004803603602081101561036057600080fd5b8101908080359060200190929190505050610e59565b005b610380610f8b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103b4610fb1565b005b6103f8600480360360608110156103cc57600080fd5b810190808035906020019092919080359060200190929190803515159060200190929190505050610fde565b005b610402611128565b005b61040c6112ae565b6040518082815260200191505060405180910390f35b6104646004803603602081101561043857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112b4565b005b61046e6113bb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104d0600480360360408110156104b057600080fd5b8101908080359060200190929190803590602001909291905050506113e4565b6040518082815260200191505060405180910390f35b610532600480360360408110156104fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611486565b604051808381526020018281526020019250505060405180910390f35b6105b16004803603608081101561056557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035151590602001909291905050506114b7565b005b6105bb6116a1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61061d600480360360408110156105fd57600080fd5b8101908080359060200190929190803590602001909291905050506116c7565b005b6106616004803603602081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611980565b005b6000600680549050905090565b6006818154811061067d57fe5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b60085481565b60045481565b6000600680549050905060005b818110156107df578273ffffffffffffffffffffffffffffffffffffffff166006828154811061071857fe5b906000526020600020906005020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6164643a206578697374696e6720706f6f6c3f0000000000000000000000000081525060200191505060405180910390fd5b8060010190506106ec565b505050565b600080600684815481106107f457fe5b9060005260206000209060050201905060006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260040154905060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156108ee57600080fd5b505afa158015610902573d6000803e3d6000fd5b505050506040513d602081101561091857600080fd5b8101908080519060200190929190505050905083600301544311801561093f575060008114155b156109da5760006109548560030154436113e4565b90506000610997600854610989886001015461097b60055487611b8b90919063ffffffff16565b611b8b90919063ffffffff16565b611c1190919063ffffffff16565b90506109d56109c6846109b864e8d4a5100085611b8b90919063ffffffff16565b611c1190919063ffffffff16565b85611c5b90919063ffffffff16565b935050505b610a1e8360010154610a1064e8d4a51000610a02868860000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b611ce390919063ffffffff16565b94505050505092915050565b600060068381548110610a3957fe5b9060005260206000209060050201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015610b17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f77697468647261773a206e6f7420676f6f64000000000000000000000000000081525060200191505060405180910390fd5b610b2084610c8e565b6000610b6a8260010154610b5c64e8d4a51000610b4e87600401548760000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b611ce390919063ffffffff16565b90506000811115610b8057610b7f3382611d2d565b5b6000841115610bf857610ba0848360000154611ce390919063ffffffff16565b8260000181905550610bf733858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fa69092919063ffffffff16565b5b610c2a64e8d4a51000610c1c85600401548560000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568866040518082815260200191505060405180910390a35050505050565b60095481565b600060068281548110610c9d57fe5b9060005260206000209060050201905080600301544311610cbe5750610e56565b60008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d4b57600080fd5b505afa158015610d5f573d6000803e3d6000fd5b505050506040513d6020811015610d7557600080fd5b810190808051906020019092919050505090506000811415610da1574382600301819055505050610e56565b6000610db18360030154436113e4565b90506000610df4600854610de68660010154610dd860055487611b8b90919063ffffffff16565b611b8b90919063ffffffff16565b611c1190919063ffffffff16565b9050610e003082611d2d565b610e40610e2d84610e1f64e8d4a5100085611b8b90919063ffffffff16565b611c1190919063ffffffff16565b8560040154611c5b90919063ffffffff16565b8460040181905550438460030181905550505050505b50565b600060068281548110610e6857fe5b9060005260206000209060050201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000018190555060008160010181905550610f333382600001548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fa69092919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae059583600001546040518082815260200191505060405180910390a3505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600680549050905060005b81811015610fda57610fcf81610c8e565b806001019050610fbe565b5050565b610fe6612048565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80156110b5576110b4610fb1565b5b6110fa826110ec600686815481106110c957fe5b906000526020600020906005020160010154600854611ce390919063ffffffff16565b611c5b90919063ffffffff16565b600881905550816006848154811061110e57fe5b906000526020600020906005020160010181905550505050565b611130612048565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60055481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611377576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6465763a207775743f000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006009548310156113f8576009546113fa565b825b9250600454821161141f576114188383611ce390919063ffffffff16565b9050611480565b60045483106114425761143b8383611ce390919063ffffffff16565b9050611480565b61147d61145a60045484611ce390919063ffffffff16565b61146f85600454611ce390919063ffffffff16565b611c5b90919063ffffffff16565b90505b92915050565b6007602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b6114bf612048565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801561158e5761158d610fb1565b5b600060095443116115a1576009546115a3565b435b90506115ba85600854611c5b90919063ffffffff16565b60088190555060066040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018581526020018381526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015550505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600683815481106116d657fe5b9060005260206000209060050201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061174384610c8e565b600061175c836002015485611c1190919063ffffffff16565b90506000826000015411156117cd5760006117b583600101546117a764e8d4a5100061179988600401548860000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b611ce390919063ffffffff16565b905060008111156117cb576117ca3382611d2d565b5b505b60008411156118de5761183933306117ee8488611ce390919063ffffffff16565b8660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612050909392919063ffffffff16565b6118ac33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612050909392919063ffffffff16565b6118d56118c28286611ce390919063ffffffff16565b8360000154611c5b90919063ffffffff16565b82600001819055505b61191064e8d4a5100061190285600401548560000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a156119648488611ce390919063ffffffff16565b6040518082815260200191505060405180910390a35050505050565b611988612048565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ace576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806126276026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080831415611b9e5760009050611c0b565b6000828402905082848281611baf57fe5b0414611c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806126736021913960400191505060405180910390fd5b809150505b92915050565b6000611c5383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612111565b905092915050565b600080828401905083811015611cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000611d2583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121d7565b905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611db857600080fd5b505afa158015611dcc573d6000803e3d6000fd5b505050506040513d6020811015611de257600080fd5b8101908080519060200190929190505050905080821115611ed157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e9057600080fd5b505af1158015611ea4573d6000803e3d6000fd5b505050506040513d6020811015611eba57600080fd5b810190808051906020019092919050505050611fa1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f6457600080fd5b505af1158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b8101908080519060200190929190505050505b505050565b6120438363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612297565b505050565b600033905090565b61210b846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612297565b50505050565b600080831182906121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612182578082015181840152602081019050612167565b50505050905090810190601f1680156121af5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816121c957fe5b049050809150509392505050565b6000838311158290612284576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561224957808201518184015260208101905061222e565b50505050905090810190601f1680156122765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60606122f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123869092919063ffffffff16565b90506000815111156123815780806020019051602081101561231a57600080fd5b8101908080519060200190929190505050612380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612694602a913960400191505060405180910390fd5b5b505050565b6060612395848460008561239e565b90509392505050565b6060824710156123f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061264d6026913960400191505060405180910390fd5b61240285612547565b612474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106124c457805182526020820191506020810190506020830392506124a1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612526576040519150601f19603f3d011682016040523d82523d6000602084013e61252b565b606091505b509150915061253b82828661255a565b92505050949350505050565b600080823b905060008111915050919050565b6060831561256a5782905061261f565b60008351111561257d5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125e45780820151818401526020810190506125c9565b50505050905090810190601f1680156126115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220ccd2cbea3d8084552ddd65ccaab545742445a0710bf1711c8f7ed0bc4294c81964736f6c634300060c0033000000000000000000000000515d7e9d75e2b76db60f8a051cd890eba23286bc0000000000000000000000005ab8e3a7bc8be9efdd0943ab65221bdf240518c30000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000af91320000000000000000000000000000000000000000000000000000000000c1e0b2
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c8063630b5ba1116100c35780638dbb1e3a1161007c5780638dbb1e3a1461049a57806393f1a40b146104e6578063988d7a601461054f578063a29a0d90146105b3578063e2bbb158146105e7578063f2fde38b1461061f5761014d565b8063630b5ba1146103ac57806364482f79146103b6578063715018a6146103fa57806386059a8d146104045780638d88a90e146104225780638da5cb5b146104665761014d565b806340c5547d1161011557806340c5547d14610264578063441a3e70146102c657806348cd4cb1146102fe57806351eb05a61461031c5780635312ea8e1461034a57806361d027b3146103785761014d565b8063081e3eda146101525780631526fe271461017057806317caf6f1146101e45780631aed655314610202578063322d0d4a14610220575b600080fd5b61015a610663565b6040518082815260200191505060405180910390f35b61019c6004803603602081101561018657600080fd5b8101908080359060200190929190505050610670565b604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b6101ec6106d3565b6040518082815260200191505060405180910390f35b61020a6106d9565b6040518082815260200191505060405180910390f35b6102626004803603602081101561023657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106df565b005b6102b06004803603604081101561027a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107e4565b6040518082815260200191505060405180910390f35b6102fc600480360360408110156102dc57600080fd5b810190808035906020019092919080359060200190929190505050610a2a565b005b610306610c88565b6040518082815260200191505060405180910390f35b6103486004803603602081101561033257600080fd5b8101908080359060200190929190505050610c8e565b005b6103766004803603602081101561036057600080fd5b8101908080359060200190929190505050610e59565b005b610380610f8b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103b4610fb1565b005b6103f8600480360360608110156103cc57600080fd5b810190808035906020019092919080359060200190929190803515159060200190929190505050610fde565b005b610402611128565b005b61040c6112ae565b6040518082815260200191505060405180910390f35b6104646004803603602081101561043857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112b4565b005b61046e6113bb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104d0600480360360408110156104b057600080fd5b8101908080359060200190929190803590602001909291905050506113e4565b6040518082815260200191505060405180910390f35b610532600480360360408110156104fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611486565b604051808381526020018281526020019250505060405180910390f35b6105b16004803603608081101561056557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035151590602001909291905050506114b7565b005b6105bb6116a1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61061d600480360360408110156105fd57600080fd5b8101908080359060200190929190803590602001909291905050506116c7565b005b6106616004803603602081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611980565b005b6000600680549050905090565b6006818154811061067d57fe5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b60085481565b60045481565b6000600680549050905060005b818110156107df578273ffffffffffffffffffffffffffffffffffffffff166006828154811061071857fe5b906000526020600020906005020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6164643a206578697374696e6720706f6f6c3f0000000000000000000000000081525060200191505060405180910390fd5b8060010190506106ec565b505050565b600080600684815481106107f457fe5b9060005260206000209060050201905060006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260040154905060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156108ee57600080fd5b505afa158015610902573d6000803e3d6000fd5b505050506040513d602081101561091857600080fd5b8101908080519060200190929190505050905083600301544311801561093f575060008114155b156109da5760006109548560030154436113e4565b90506000610997600854610989886001015461097b60055487611b8b90919063ffffffff16565b611b8b90919063ffffffff16565b611c1190919063ffffffff16565b90506109d56109c6846109b864e8d4a5100085611b8b90919063ffffffff16565b611c1190919063ffffffff16565b85611c5b90919063ffffffff16565b935050505b610a1e8360010154610a1064e8d4a51000610a02868860000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b611ce390919063ffffffff16565b94505050505092915050565b600060068381548110610a3957fe5b9060005260206000209060050201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015610b17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f77697468647261773a206e6f7420676f6f64000000000000000000000000000081525060200191505060405180910390fd5b610b2084610c8e565b6000610b6a8260010154610b5c64e8d4a51000610b4e87600401548760000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b611ce390919063ffffffff16565b90506000811115610b8057610b7f3382611d2d565b5b6000841115610bf857610ba0848360000154611ce390919063ffffffff16565b8260000181905550610bf733858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fa69092919063ffffffff16565b5b610c2a64e8d4a51000610c1c85600401548560000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568866040518082815260200191505060405180910390a35050505050565b60095481565b600060068281548110610c9d57fe5b9060005260206000209060050201905080600301544311610cbe5750610e56565b60008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d4b57600080fd5b505afa158015610d5f573d6000803e3d6000fd5b505050506040513d6020811015610d7557600080fd5b810190808051906020019092919050505090506000811415610da1574382600301819055505050610e56565b6000610db18360030154436113e4565b90506000610df4600854610de68660010154610dd860055487611b8b90919063ffffffff16565b611b8b90919063ffffffff16565b611c1190919063ffffffff16565b9050610e003082611d2d565b610e40610e2d84610e1f64e8d4a5100085611b8b90919063ffffffff16565b611c1190919063ffffffff16565b8560040154611c5b90919063ffffffff16565b8460040181905550438460030181905550505050505b50565b600060068281548110610e6857fe5b9060005260206000209060050201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000018190555060008160010181905550610f333382600001548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fa69092919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae059583600001546040518082815260200191505060405180910390a3505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600680549050905060005b81811015610fda57610fcf81610c8e565b806001019050610fbe565b5050565b610fe6612048565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80156110b5576110b4610fb1565b5b6110fa826110ec600686815481106110c957fe5b906000526020600020906005020160010154600854611ce390919063ffffffff16565b611c5b90919063ffffffff16565b600881905550816006848154811061110e57fe5b906000526020600020906005020160010181905550505050565b611130612048565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60055481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611377576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6465763a207775743f000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006009548310156113f8576009546113fa565b825b9250600454821161141f576114188383611ce390919063ffffffff16565b9050611480565b60045483106114425761143b8383611ce390919063ffffffff16565b9050611480565b61147d61145a60045484611ce390919063ffffffff16565b61146f85600454611ce390919063ffffffff16565b611c5b90919063ffffffff16565b90505b92915050565b6007602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b6114bf612048565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801561158e5761158d610fb1565b5b600060095443116115a1576009546115a3565b435b90506115ba85600854611c5b90919063ffffffff16565b60088190555060066040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018581526020018381526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015550505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600683815481106116d657fe5b9060005260206000209060050201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061174384610c8e565b600061175c836002015485611c1190919063ffffffff16565b90506000826000015411156117cd5760006117b583600101546117a764e8d4a5100061179988600401548860000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b611ce390919063ffffffff16565b905060008111156117cb576117ca3382611d2d565b5b505b60008411156118de5761183933306117ee8488611ce390919063ffffffff16565b8660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612050909392919063ffffffff16565b6118ac33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612050909392919063ffffffff16565b6118d56118c28286611ce390919063ffffffff16565b8360000154611c5b90919063ffffffff16565b82600001819055505b61191064e8d4a5100061190285600401548560000154611b8b90919063ffffffff16565b611c1190919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a156119648488611ce390919063ffffffff16565b6040518082815260200191505060405180910390a35050505050565b611988612048565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ace576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806126276026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080831415611b9e5760009050611c0b565b6000828402905082848281611baf57fe5b0414611c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806126736021913960400191505060405180910390fd5b809150505b92915050565b6000611c5383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612111565b905092915050565b600080828401905083811015611cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000611d2583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121d7565b905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611db857600080fd5b505afa158015611dcc573d6000803e3d6000fd5b505050506040513d6020811015611de257600080fd5b8101908080519060200190929190505050905080821115611ed157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e9057600080fd5b505af1158015611ea4573d6000803e3d6000fd5b505050506040513d6020811015611eba57600080fd5b810190808051906020019092919050505050611fa1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f6457600080fd5b505af1158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b8101908080519060200190929190505050505b505050565b6120438363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612297565b505050565b600033905090565b61210b846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612297565b50505050565b600080831182906121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612182578082015181840152602081019050612167565b50505050905090810190601f1680156121af5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816121c957fe5b049050809150509392505050565b6000838311158290612284576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561224957808201518184015260208101905061222e565b50505050905090810190601f1680156122765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60606122f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123869092919063ffffffff16565b90506000815111156123815780806020019051602081101561231a57600080fd5b8101908080519060200190929190505050612380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612694602a913960400191505060405180910390fd5b5b505050565b6060612395848460008561239e565b90509392505050565b6060824710156123f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061264d6026913960400191505060405180910390fd5b61240285612547565b612474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106124c457805182526020820191506020810190506020830392506124a1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612526576040519150601f19603f3d011682016040523d82523d6000602084013e61252b565b606091505b509150915061253b82828661255a565b92505050949350505050565b600080823b905060008111915050919050565b6060831561256a5782905061261f565b60008351111561257d5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125e45780820151818401526020810190506125c9565b50505050905090810190601f1680156126115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220ccd2cbea3d8084552ddd65ccaab545742445a0710bf1711c8f7ed0bc4294c81964736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000515d7e9d75e2b76db60f8a051cd890eba23286bc0000000000000000000000005ab8e3a7bc8be9efdd0943ab65221bdf240518c30000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000af91320000000000000000000000000000000000000000000000000000000000c1e0b2
-----Decoded View---------------
Arg [0] : _gdao (address): 0x515d7E9D75E2b76DB60F8a051Cd890eBa23286Bc
Arg [1] : _treasury (address): 0x5AB8e3a7BC8BE9eFDD0943aB65221bDf240518C3
Arg [2] : _GDAOPerBlock (uint256): 1000000000000000000
Arg [3] : _startBlock (uint256): 11505970
Arg [4] : _bonusEndBlock (uint256): 12705970
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000515d7e9d75e2b76db60f8a051cd890eba23286bc
Arg [1] : 0000000000000000000000005ab8e3a7bc8be9efdd0943ab65221bdf240518c3
Arg [2] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000af9132
Arg [4] : 0000000000000000000000000000000000000000000000000000000000c1e0b2
Deployed Bytecode Sourcemap
38843:9199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41134:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40367:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40473:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39026:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41293:247;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43055:757;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46689:789;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40514:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44122:737;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45099:384;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38971:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43889:180;;;:::i;:::-;;42186:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37972:148;;;:::i;:::-;;39061:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47910:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37330:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42579:438;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40400:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;41577:567;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39001:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45525:1121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38275:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41134:95;41179:7;41206:8;:15;;;;41199:22;;41134:95;:::o;40367:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40473:34::-;;;;:::o;39026:28::-;;;;:::o;41293:247::-;41359:14;41376:8;:15;;;;41359:32;;41407:11;41402:131;41430:6;41424:3;:12;41402:131;;;41491:6;41468:29;;:8;41477:3;41468:13;;;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;:29;;;;41460:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41438:5;;;;;41402:131;;;;41293:247;;:::o;43055:757::-;43128:7;43148:21;43172:8;43181:4;43172:14;;;;;;;;;;;;;;;;;;43148:38;;43197:21;43221:8;:14;43230:4;43221:14;;;;;;;;;;;:21;43236:5;43221:21;;;;;;;;;;;;;;;43197:45;;43253:23;43279:4;:20;;;43253:46;;43310:16;43329:4;:10;;;;;;;;;;;;:20;;;43358:4;43329:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43310:54;;43394:4;:20;;;43379:12;:35;:52;;;;;43430:1;43418:8;:13;;43379:52;43375:349;;;43448:18;43469:49;43483:4;:20;;;43505:12;43469:13;:49::i;:::-;43448:70;;43533:18;43554:70;43608:15;;43554:49;43587:4;:15;;;43554:28;43569:12;;43554:10;:14;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;43533:91;;43657:55;43677:34;43702:8;43677:20;43692:4;43677:10;:14;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;43657:15;:19;;:55;;;;:::i;:::-;43639:73;;43375:349;;;43741:63;43788:4;:15;;;43741:42;43778:4;43741:32;43757:15;43741:4;:11;;;:15;;:32;;;;:::i;:::-;:36;;:42;;;;:::i;:::-;:46;;:63;;;;:::i;:::-;43734:70;;;;;;43055:757;;;;:::o;46689:789::-;46756:21;46780:8;46789:4;46780:14;;;;;;;;;;;;;;;;;;46756:38;;46805:21;46829:8;:14;46838:4;46829:14;;;;;;;;;;;:26;46844:10;46829:26;;;;;;;;;;;;;;;46805:50;;46889:7;46874:4;:11;;;:22;;46866:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46930:16;46941:4;46930:10;:16::i;:::-;46957:15;46975:68;47027:4;:15;;;46975:47;47017:4;46975:37;46991:4;:20;;;46975:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;46957:86;;47069:1;47059:7;:11;47056:109;;;47116:37;47133:10;47145:7;47116:16;:37::i;:::-;47056:109;47198:1;47188:7;:11;47185:149;;;47230:24;47246:7;47230:4;:11;;;:15;;:24;;;;:::i;:::-;47216:4;:11;;:38;;;;47269:53;47301:10;47314:7;47269:4;:10;;;;;;;;;;;;:23;;;;:53;;;;;:::i;:::-;47185:149;47372:47;47414:4;47372:37;47388:4;:20;;;47372:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;47354:4;:15;;:65;;;;47456:4;47444:10;47435:35;;;47462:7;47435:35;;;;;;;;;;;;;;;;;;46689:789;;;;;:::o;40514:25::-;;;;:::o;44122:737::-;44174:21;44198:8;44207:4;44198:14;;;;;;;;;;;;;;;;;;44174:38;;44243:4;:20;;;44227:12;:36;44223:75;;44280:7;;;44223:75;44308:16;44327:4;:10;;;;;;;;;;;;:20;;;44356:4;44327:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44308:54;;44389:1;44377:8;:13;44373:102;;;44430:12;44407:4;:20;;:35;;;;44457:7;;;;44373:102;44485:18;44506:49;44520:4;:20;;;44542:12;44506:13;:49::i;:::-;44485:70;;44566:18;44587:70;44641:15;;44587:49;44620:4;:15;;;44587:28;44602:12;;44587:10;:14;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;44566:91;;44668:43;44693:4;44700:10;44668:16;:43::i;:::-;44745:60;44770:34;44795:8;44770:20;44785:4;44770:10;:14;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;44745:4;:20;;;:24;;:60;;;;:::i;:::-;44722:4;:20;;:83;;;;44839:12;44816:4;:20;;:35;;;;44122:737;;;;;;:::o;45099:384::-;45158:21;45182:8;45191:4;45182:14;;;;;;;;;;;;;;;;;;45158:38;;45207:21;45231:8;:14;45240:4;45231:14;;;;;;;;;;;:26;45246:10;45231:26;;;;;;;;;;;;;;;45207:50;;45292:1;45278:4;:11;;:15;;;;45322:1;45304:4;:15;;:19;;;;45344:57;45376:10;45389:4;:11;;;45344:4;:10;;;;;;;;;;;;:23;;;;:57;;;;;:::i;:::-;45449:4;45437:10;45419:48;;;45455:4;:11;;;45419:48;;;;;;;;;;;;;;;;;;45099:384;;;:::o;38971:23::-;;;;;;;;;;;;;:::o;43889:180::-;43934:14;43951:8;:15;;;;43934:32;;43982:11;43977:85;44005:6;43999:3;:12;43977:85;;;44035:15;44046:3;44035:10;:15::i;:::-;44013:5;;;;;43977:85;;;;43889:180;:::o;42186:304::-;37552:12;:10;:12::i;:::-;37542:22;;:6;;;;;;;;;;:22;;;37534:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42284:11:::1;42280:61;;;42312:17;:15;:17::i;:::-;42280:61;42369:63;42420:11;42369:46;42389:8;42398:4;42389:14;;;;;;;;;;;;;;;;;;:25;;;42369:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;42351:15;:81;;;;42471:11;42443:8;42452:4;42443:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;42186:304:::0;;;:::o;37972:148::-;37552:12;:10;:12::i;:::-;37542:22;;:6;;;;;;;;;;:22;;;37534:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38079:1:::1;38042:40;;38063:6;::::0;::::1;;;;;;;;38042:40;;;;;;;;;;;;38110:1;38093:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;37972:148::o:0;39061:27::-;;;;:::o;47910:129::-;47981:7;;;;;;;;;;;47967:21;;:10;:21;;;47959:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48023:8;48013:7;;:18;;;;;;;;;;;;;;;;;;47910:129;:::o;37330:79::-;37368:7;37395:6;;;;;;;;;;;37388:13;;37330:79;:::o;42579:438::-;42651:7;42688:10;;42679:5;:19;;:40;;42709:10;;42679:40;;;42701:5;42679:40;42671:48;;42741:13;;42734:3;:20;42730:280;;42778:14;42786:5;42778:3;:7;;:14;;;;:::i;:::-;42771:21;;;;42730:280;42823:13;;42814:5;:22;42810:200;;42860:14;42868:5;42860:3;:7;;:14;;;;:::i;:::-;42853:21;;;;42810:200;42914:84;42961:22;42969:13;;42961:3;:7;;:22;;;;:::i;:::-;42914:24;42932:5;42914:13;;:17;;:24;;;;:::i;:::-;:28;;:84;;;;:::i;:::-;42907:91;;42579:438;;;;;:::o;40400:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41577:567::-;37552:12;:10;:12::i;:::-;37542:22;;:6;;;;;;;;;;:22;;;37534:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41704:11:::1;41700:61;;;41732:17;:15;:17::i;:::-;41700:61;41771:23;41812:10;;41797:12;:25;:53;;41840:10;;41797:53;;;41825:12;41797:53;41771:79;;41879:32;41899:11;41879:15;;:19;;:32;;;;:::i;:::-;41861:15;:50;;;;41922:8;41936:199;;;;;;;;41967:6;41936:199;;;;;;42000:11;41936:199;;;;42035:8;41936:199;;;;42075:15;41936:199;;;;42122:1;41936:199;;::::0;41922:214:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37612:1;41577:567:::0;;;;:::o;39001:18::-;;;;;;;;;;;;;:::o;45525:1121::-;45591:21;45615:8;45624:4;45615:14;;;;;;;;;;;;;;;;;;45591:38;;45640:21;45664:8;:14;45673:4;45664:14;;;;;;;;;;;:26;45679:10;45664:26;;;;;;;;;;;;;;;45640:50;;45701:16;45712:4;45701:10;:16::i;:::-;45728:19;45750:25;45762:4;:12;;;45750:7;:11;;:25;;;;:::i;:::-;45728:47;;45806:1;45792:4;:11;;;:15;45788:322;;;45870:15;45888:68;45940:4;:15;;;45888:47;45930:4;45888:37;45904:4;:20;;;45888:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;45870:86;;45984:1;45974:7;:11;45971:128;;;46046:37;46063:10;46075:7;46046:16;:37::i;:::-;45971:128;45788:322;;46143:1;46133:7;:11;46130:356;;;46179:89;46215:10;46236:4;46243:24;46255:11;46243:7;:11;;:24;;;;:::i;:::-;46179:4;:10;;;;;;;;;;;;:27;;;;:89;;;;;;:::i;:::-;46283:80;46319:10;46340:8;;;;;;;;;;;46351:11;46283:4;:10;;;;;;;;;;;;:27;;;;:80;;;;;;:::i;:::-;46392:41;46408:24;46420:11;46408:7;:11;;:24;;;;:::i;:::-;46392:4;:11;;;:15;;:41;;;;:::i;:::-;46378:4;:11;;:55;;;;46130:356;46524:47;46566:4;46524:37;46540:4;:20;;;46524:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;46506:4;:15;;:65;;;;46607:4;46595:10;46587:51;;;46613:24;46625:11;46613:7;:11;;:24;;;;:::i;:::-;46587:51;;;;;;;;;;;;;;;;;;45525:1121;;;;;:::o;38275:244::-;37552:12;:10;:12::i;:::-;37542:22;;:6;;;;;;;;;;:22;;;37534:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38384:1:::1;38364:22;;:8;:22;;;;38356:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38474:8;38445:38;;38466:6;::::0;::::1;;;;;;;;38445:38;;;;;;;;;;;;38503:8;38494:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;38275:244:::0;:::o;12136:471::-;12194:7;12444:1;12439;:6;12435:47;;;12469:1;12462:8;;;;12435:47;12494:9;12510:1;12506;:5;12494:17;;12539:1;12534;12530;:5;;;;;;:10;12522:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12598:1;12591:8;;;12136:471;;;;;:::o;13083:132::-;13141:7;13168:39;13172:1;13175;13168:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;13161:46;;13083:132;;;;:::o;10782:181::-;10840:7;10860:9;10876:1;10872;:5;10860:17;;10901:1;10896;:6;;10888:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10954:1;10947:8;;;10782:181;;;;:::o;11246:136::-;11304:7;11331:43;11335:1;11338;11331:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11324:50;;11246:136;;;;:::o;47584:278::-;47660:15;47678:4;;;;;;;;;;;:14;;;47701:4;47678:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47660:47;;47732:7;47722;:17;47718:137;;;47756:4;;;;;;;;;;;:13;;;47770:3;47775:7;47756:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47718:137;;;47816:4;;;;;;;;;;;:13;;;47830:3;47835:7;47816:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47718:137;47584:278;;;:::o;22747:177::-;22830:86;22850:5;22880:23;;;22905:2;22909:5;22857:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22830:19;:86::i;:::-;22747:177;;;:::o;35954:106::-;36007:15;36042:10;36035:17;;35954:106;:::o;22932:205::-;23033:96;23053:5;23083:27;;;23112:4;23118:2;23122:5;23060:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23033:19;:96::i;:::-;22932:205;;;;:::o;13711:278::-;13797:7;13829:1;13825;:5;13832:12;13817:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13856:9;13872:1;13868;:5;;;;;;13856:17;;13980:1;13973:8;;;13711:278;;;;;:::o;11685:192::-;11771:7;11804:1;11799;:6;;11807:12;11791:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11831:9;11847:1;11843;:5;11831:17;;11868:1;11861:8;;;11685:192;;;;;:::o;25052:761::-;25476:23;25502:69;25530:4;25502:69;;;;;;;;;;;;;;;;;25510:5;25502:27;;;;:69;;;;;:::i;:::-;25476:95;;25606:1;25586:10;:17;:21;25582:224;;;25728:10;25717:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25709:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25582:224;25052:761;;;:::o;18846:195::-;18949:12;18981:52;19003:6;19011:4;19017:1;19020:12;18981:21;:52::i;:::-;18974:59;;18846:195;;;;;:::o;19898:530::-;20025:12;20083:5;20058:21;:30;;20050:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20150:18;20161:6;20150:10;:18::i;:::-;20142:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20276:12;20290:23;20317:6;:11;;20337:5;20345:4;20317:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20275:75;;;;20368:52;20386:7;20395:10;20407:12;20368:17;:52::i;:::-;20361:59;;;;19898:530;;;;;;:::o;15928:422::-;15988:4;16196:12;16307:7;16295:20;16287:28;;16341:1;16334:4;:8;16327:15;;;15928:422;;;:::o;21434:742::-;21549:12;21578:7;21574:595;;;21609:10;21602:17;;;;21574:595;21743:1;21723:10;:17;:21;21719:439;;;21986:10;21980:17;22047:15;22034:10;22030:2;22026:19;22019:44;21934:148;22129:12;22122:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21434:742;;;;;;:::o
Swarm Source
ipfs://ccd2cbea3d8084552ddd65ccaab545742445a0710bf1711c8f7ed0bc4294c819
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 60.91% | $1,597.03 | 18.9974 | $30,339.3 | |
ETH | 14.02% | $5.25 | 1,329.7742 | $6,981.31 | |
ETH | 7.66% | $12.73 | 299.8138 | $3,816.63 | |
ETH | 7.37% | $84,852 | 0.0433 | $3,672.52 | |
ETH | 4.54% | $0.999954 | 2,263.1335 | $2,263.03 | |
ETH | 3.86% | $139.69 | 13.7576 | $1,921.8 | |
ETH | 1.34% | $4,573.81 | 0.1464 | $669.57 | |
ETH | 0.17% | $0.007286 | 11,419.2971 | $83.2 | |
ETH | 0.12% | $0.629345 | 97.1565 | $61.14 | |
BASE | <0.01% | $0.000008 | 15,000 | $0.1269 |
Loading...
Loading
Loading...
Loading
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.