More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 326,804 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 10093302 | 2 mins ago | IN | 0 ETH | 0.00000017 | ||||
Transfer | 10093240 | 4 mins ago | IN | 0 ETH | 0.00000018 | ||||
Transfer | 10093133 | 7 mins ago | IN | 0 ETH | 0.00000018 | ||||
Transfer | 10093098 | 8 mins ago | IN | 0 ETH | 0.00000018 | ||||
Transfer | 10093039 | 10 mins ago | IN | 0 ETH | 0.00000018 | ||||
Transfer | 10092861 | 16 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10092770 | 19 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10092678 | 22 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10092605 | 25 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10092476 | 29 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10092376 | 33 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10092311 | 35 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10092257 | 36 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10092189 | 39 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10092004 | 45 mins ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10091823 | 51 mins ago | IN | 0 ETH | 0.00000018 | ||||
Transfer | 10091758 | 53 mins ago | IN | 0 ETH | 0.00000018 | ||||
Approve | 10091688 | 55 mins ago | IN | 0 ETH | 0.00000024 | ||||
Transfer | 10091683 | 56 mins ago | IN | 0 ETH | 0.00000018 | ||||
Transfer | 10091606 | 58 mins ago | IN | 0 ETH | 0.00000017 | ||||
Transfer | 10091459 | 1 hr ago | IN | 0 ETH | 0.00000018 | ||||
Transfer | 10091359 | 1 hr ago | IN | 0 ETH | 0.00000019 | ||||
Transfer | 10091219 | 1 hr ago | IN | 0 ETH | 0.00000018 | ||||
Transfer | 10091161 | 1 hr ago | IN | 0 ETH | 0.00000017 | ||||
Transfer | 10091099 | 1 hr ago | IN | 0 ETH | 0.00000017 |
Loading...
Loading
Contract Name:
Yield
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at blastscan.io on 2024-03-11 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /** * @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); } // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // OpenZeppelin Contracts v4.4.0 (token/ERC20/utils/SafeERC20.sol) // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) /** * @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; 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"); (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"); (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"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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 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 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' 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) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _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 require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // OpenZeppelin Contracts v4.4.0 (access/AccessControl.sol) // OpenZeppelin Contracts v4.4.0 (access/IAccessControl.sol) /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IYield is IERC20 { function burn(address from, uint256 amount) external; function mint(address to, uint256 amount) external; } enum YieldMode { AUTOMATIC, VOID, CLAIMABLE } enum GasMode { VOID, CLAIMABLE } interface IBlast { function configureGovernor(address _governor) external; function configureClaimableGas() external; function readGasParams( address contractAddress ) external view returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode); } abstract contract BlastHelper is AccessControl { address public immutable BLAST = address(0x4300000000000000000000000000000000000002); bytes32 public constant GAS_MANAGER_ROLE = keccak256("GAS_MANAGER_ROLE"); constructor() { _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(GAS_MANAGER_ROLE, msg.sender); } function configureBlast() external onlyRole(GAS_MANAGER_ROLE) { IBlast(BLAST).configureClaimableGas(); IBlast(BLAST).configureGovernor(msg.sender); } function readGasParams() external view returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode) { return IBlast(BLAST).readGasParams(address(this)); } } // __ __ ___ _______ ___ ______ // | | | || | | || | | | // | |_| || | | ___|| | | _ | // | || | | |___ | | | | | | // |_ _|| | | ___|| |___ | |_| | // | | | | | |___ | || | // |___| |___| |_______||_______||______| // contract Yield is AccessControl, IYield, ERC20, BlastHelper { using SafeMath for uint256; using SafeERC20 for ERC20; mapping(address => bool) public isController; constructor( uint256 _initialSupply, address _treasuryAddress ) ERC20("Yield Token", "YIELD") BlastHelper() { _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(DEFAULT_ADMIN_ROLE, _treasuryAddress); isController[msg.sender] = true; isController[_treasuryAddress] = true; _mint(_treasuryAddress, _initialSupply); } function mint(address to_, uint256 amount_) external override onlyController { _mint(to_, amount_); } function burn(address from_, uint256 amount_) external override onlyController { _burn(from_, amount_); } event ControllerAdded(address newController); function addController(address toAdd_) external onlyRole(DEFAULT_ADMIN_ROLE) { isController[toAdd_] = true; emit ControllerAdded(toAdd_); } event ControllerRemoved(address controllerRemoved); function removeController(address toRemove_) external onlyRole(DEFAULT_ADMIN_ROLE) { isController[toRemove_] = false; emit ControllerRemoved(toRemove_); } modifier onlyController() { require(isController[_msgSender()], "CallerNotController"); _; } function _transferToken(address from, address to, uint256 amount) internal { ERC20._transfer(from, to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"address","name":"_treasuryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newController","type":"address"}],"name":"ControllerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"controllerRemoved","type":"address"}],"name":"ControllerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAS_MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toAdd_","type":"address"}],"name":"addController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"configureBlast","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isController","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readGasParams","outputs":[{"internalType":"uint256","name":"etherSeconds","type":"uint256"},{"internalType":"uint256","name":"etherBalance","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"},{"internalType":"enum GasMode","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove_","type":"address"}],"name":"removeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405273430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000057575f80fd5b50604051620036cb380380620036cb83398181016040528101906200007d9190620005ae565b6040518060400160405280600b81526020017f5969656c6420546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5949454c440000000000000000000000000000000000000000000000000000008152508160049081620000fa91906200084e565b5080600590816200010c91906200084e565b505050620001235f801b336200024160201b60201c565b620001557f7d9b2fa622503631789179fcce46c450834f843fc10ad6b34135e9b867c799a8336200024160201b60201c565b620001695f801b336200024160201b60201c565b6200017d5f801b826200024160201b60201c565b600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200023981836200032c60201b60201c565b505062000a43565b6200025382826200049d60201b60201c565b620003285760015f808481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620002cd6200050060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200039d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003949062000990565b60405180910390fd5b620003b05f83836200050760201b60201c565b8060035f828254620003c39190620009dd565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254620004189190620009dd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200047e919062000a28565b60405180910390a3620004995f83836200050c60201b60201c565b5050565b5f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b505050565b505050565b5f80fd5b5f819050919050565b620005298162000515565b811462000534575f80fd5b50565b5f8151905062000547816200051e565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000578826200054d565b9050919050565b6200058a816200056c565b811462000595575f80fd5b50565b5f81519050620005a8816200057f565b92915050565b5f8060408385031215620005c757620005c662000511565b5b5f620005d68582860162000537565b9250506020620005e98582860162000598565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200066f57607f821691505b6020821081036200068557620006846200062a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006ac565b620006f58683620006ac565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000736620007306200072a8462000515565b6200070d565b62000515565b9050919050565b5f819050919050565b620007518362000716565b6200076962000760826200073d565b848454620006b8565b825550505050565b5f90565b6200077f62000771565b6200078c81848462000746565b505050565b5b81811015620007b357620007a75f8262000775565b60018101905062000792565b5050565b601f8211156200080257620007cc816200068b565b620007d7846200069d565b81016020851015620007e7578190505b620007ff620007f6856200069d565b83018262000791565b50505b505050565b5f82821c905092915050565b5f620008245f198460080262000807565b1980831691505092915050565b5f6200083e838362000813565b9150826002028217905092915050565b6200085982620005f3565b67ffffffffffffffff811115620008755762000874620005fd565b5b62000881825462000657565b6200088e828285620007b7565b5f60209050601f831160018114620008c4575f8415620008af578287015190505b620008bb858262000831565b8655506200092a565b601f198416620008d4866200068b565b5f5b82811015620008fd57848901518255600182019150602085019450602081019050620008d6565b868310156200091d578489015162000919601f89168262000813565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000978601f8362000932565b9150620009858262000942565b602082019050919050565b5f6020820190508181035f830152620009a9816200096a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620009e98262000515565b9150620009f68362000515565b925082820190508082111562000a115762000a10620009b0565b5b92915050565b62000a228162000515565b82525050565b5f60208201905062000a3d5f83018462000a17565b92915050565b608051612c5a62000a715f395f81816109dc01528181610bbb01528181610d9b0152610e160152612c5a5ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c806370a08231116100f7578063a51df9da11610095578063b429afeb1161006f578063b429afeb146104e4578063d547741f14610514578063dd62ed3e14610530578063f6a74ed714610560576101a7565b8063a51df9da1461048e578063a7fc7a0714610498578063a9059cbb146104b4576101a7565b806397d75776116100d157806397d75776146104065780639dc29fac14610424578063a217fddf14610440578063a457c2d71461045e576101a7565b806370a082311461038857806391d14854146103b857806395d89b41146103e8576101a7565b80632f2ff15d11610164578063395093511161013e57806339509351146102fd57806340c10f191461032d57806342436beb14610349578063491ae34814610367576101a7565b80632f2ff15d146102a7578063313ce567146102c357806336568abe146102e1576101a7565b806301ffc9a7146101ab57806306fdde03146101db578063095ea7b3146101f957806318160ddd1461022957806323b872dd14610247578063248a9ca314610277575b5f80fd5b6101c560048036038101906101c09190611d82565b61057c565b6040516101d29190611dc7565b60405180910390f35b6101e36105f5565b6040516101f09190611e6a565b60405180910390f35b610213600480360381019061020e9190611f17565b610685565b6040516102209190611dc7565b60405180910390f35b6102316106a2565b60405161023e9190611f64565b60405180910390f35b610261600480360381019061025c9190611f7d565b6106ab565b60405161026e9190611dc7565b60405180910390f35b610291600480360381019061028c9190612000565b61079d565b60405161029e919061203a565b60405180910390f35b6102c160048036038101906102bc9190612053565b6107b9565b005b6102cb6107e2565b6040516102d891906120ac565b60405180910390f35b6102fb60048036038101906102f69190612053565b6107ea565b005b61031760048036038101906103129190611f17565b61086d565b6040516103249190611dc7565b60405180910390f35b61034760048036038101906103429190611f17565b610914565b005b6103516109b2565b60405161035e919061203a565b60405180910390f35b61036f6109d6565b60405161037f9493929190612138565b60405180910390f35b6103a2600480360381019061039d919061217b565b610a80565b6040516103af9190611f64565b60405180910390f35b6103d260048036038101906103cd9190612053565b610ac6565b6040516103df9190611dc7565b60405180910390f35b6103f0610b29565b6040516103fd9190611e6a565b60405180910390f35b61040e610bb9565b60405161041b91906121b5565b60405180910390f35b61043e60048036038101906104399190611f17565b610bdd565b005b610448610c7b565b604051610455919061203a565b60405180910390f35b61047860048036038101906104739190611f17565b610c81565b6040516104859190611dc7565b60405180910390f35b610496610d67565b005b6104b260048036038101906104ad919061217b565b610e9d565b005b6104ce60048036038101906104c99190611f17565b610f41565b6040516104db9190611dc7565b60405180910390f35b6104fe60048036038101906104f9919061217b565b610f5e565b60405161050b9190611dc7565b60405180910390f35b61052e60048036038101906105299190612053565b610f7b565b005b61054a600480360381019061054591906121ce565b610fa4565b6040516105579190611f64565b60405180910390f35b61057a6004803603810190610575919061217b565b611026565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ee57506105ed826110c9565b5b9050919050565b60606004805461060490612239565b80601f016020809104026020016040519081016040528092919081815260200182805461063090612239565b801561067b5780601f106106525761010080835404028352916020019161067b565b820191905f5260205f20905b81548152906001019060200180831161065e57829003601f168201915b5050505050905090565b5f610698610691611132565b8484611139565b6001905092915050565b5f600354905090565b5f6106b78484846112fc565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6106fe611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561077d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906122d9565b60405180910390fd5b61079185610789611132565b858403611139565b60019150509392505050565b5f805f8381526020019081526020015f20600101549050919050565b6107c28261079d565b6107d3816107ce611132565b611574565b6107dd8383611610565b505050565b5f6012905090565b6107f2611132565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085690612367565b60405180910390fd5b61086982826116ea565b5050565b5f61090a610879611132565b848460025f610886611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461090591906123b2565b611139565b6001905092915050565b60065f61091f611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b9061242f565b60405180910390fd5b6109ae82826117c4565b5050565b7f7d9b2fa622503631789179fcce46c450834f843fc10ad6b34135e9b867c799a881565b5f805f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dde798a4306040518263ffffffff1660e01b8152600401610a3391906121b5565b608060405180830381865afa158015610a4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a729190612484565b935093509350935090919293565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060058054610b3890612239565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6490612239565b8015610baf5780601f10610b8657610100808354040283529160200191610baf565b820191905f5260205f20905b815481529060010190602001808311610b9257829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065f610be8611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c649061242f565b60405180910390fd5b610c77828261191c565b5050565b5f801b81565b5f8060025f610c8e611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90612558565b60405180910390fd5b610d5c610d53611132565b85858403611139565b600191505092915050565b7f7d9b2fa622503631789179fcce46c450834f843fc10ad6b34135e9b867c799a8610d9981610d94611132565b611574565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610dfe575f80fd5b505af1158015610e10573d5f803e3d5ffd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663eb864698336040518263ffffffff1660e01b8152600401610e6d91906121b5565b5f604051808303815f87803b158015610e84575f80fd5b505af1158015610e96573d5f803e3d5ffd5b5050505050565b5f801b610eb181610eac611132565b611574565b600160065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d747482604051610f3591906121b5565b60405180910390a15050565b5f610f54610f4d611132565b84846112fc565b6001905092915050565b6006602052805f5260405f205f915054906101000a900460ff1681565b610f848261079d565b610f9581610f90611132565b611574565b610f9f83836116ea565b505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f801b61103a81611035611132565b611574565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e81113826040516110bd91906121b5565b60405180910390a15050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906125e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90612674565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112ef9190611f64565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190612702565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90612790565b60405180910390fd5b6113e3838383611aea565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e9061281e565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546114f791906123b2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161155b9190611f64565b60405180910390a361156e848484611aef565b50505050565b61157e8282610ac6565b61160c576115a38173ffffffffffffffffffffffffffffffffffffffff166014611af4565b6115b0835f1c6020611af4565b6040516020016115c192919061290a565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116039190611e6a565b60405180910390fd5b5050565b61161a8282610ac6565b6116e65760015f808481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061168b611132565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6116f48282610ac6565b156117c0575f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611765611132565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118299061298d565b60405180910390fd5b61183d5f8383611aea565b8060035f82825461184e91906123b2565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546118a191906123b2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119059190611f64565b60405180910390a36119185f8383611aef565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190612a1b565b60405180910390fd5b611995825f83611aea565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090612aa9565b60405180910390fd5b81810360015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f828254611a6e9190612ac7565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ad29190611f64565b60405180910390a3611ae5835f84611aef565b505050565b505050565b505050565b60605f6002836002611b069190612afa565b611b1091906123b2565b67ffffffffffffffff811115611b2957611b28612b3b565b5b6040519080825280601f01601f191660200182016040528015611b5b5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110611b9257611b91612b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611bf557611bf4612b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001846002611c339190612afa565b611c3d91906123b2565b90505b6001811115611cdc577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611c7f57611c7e612b68565b5b1a60f81b828281518110611c9657611c95612b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600485901c945080611cd590612b95565b9050611c40565b505f8414611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690612c06565b60405180910390fd5b8091505092915050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d6181611d2d565b8114611d6b575f80fd5b50565b5f81359050611d7c81611d58565b92915050565b5f60208284031215611d9757611d96611d29565b5b5f611da484828501611d6e565b91505092915050565b5f8115159050919050565b611dc181611dad565b82525050565b5f602082019050611dda5f830184611db8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611e17578082015181840152602081019050611dfc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611e3c82611de0565b611e468185611dea565b9350611e56818560208601611dfa565b611e5f81611e22565b840191505092915050565b5f6020820190508181035f830152611e828184611e32565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611eb382611e8a565b9050919050565b611ec381611ea9565b8114611ecd575f80fd5b50565b5f81359050611ede81611eba565b92915050565b5f819050919050565b611ef681611ee4565b8114611f00575f80fd5b50565b5f81359050611f1181611eed565b92915050565b5f8060408385031215611f2d57611f2c611d29565b5b5f611f3a85828601611ed0565b9250506020611f4b85828601611f03565b9150509250929050565b611f5e81611ee4565b82525050565b5f602082019050611f775f830184611f55565b92915050565b5f805f60608486031215611f9457611f93611d29565b5b5f611fa186828701611ed0565b9350506020611fb286828701611ed0565b9250506040611fc386828701611f03565b9150509250925092565b5f819050919050565b611fdf81611fcd565b8114611fe9575f80fd5b50565b5f81359050611ffa81611fd6565b92915050565b5f6020828403121561201557612014611d29565b5b5f61202284828501611fec565b91505092915050565b61203481611fcd565b82525050565b5f60208201905061204d5f83018461202b565b92915050565b5f806040838503121561206957612068611d29565b5b5f61207685828601611fec565b925050602061208785828601611ed0565b9150509250929050565b5f60ff82169050919050565b6120a681612091565b82525050565b5f6020820190506120bf5f83018461209d565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110612103576121026120c5565b5b50565b5f819050612113826120f2565b919050565b5f61212282612106565b9050919050565b61213281612118565b82525050565b5f60808201905061214b5f830187611f55565b6121586020830186611f55565b6121656040830185611f55565b6121726060830184612129565b95945050505050565b5f602082840312156121905761218f611d29565b5b5f61219d84828501611ed0565b91505092915050565b6121af81611ea9565b82525050565b5f6020820190506121c85f8301846121a6565b92915050565b5f80604083850312156121e4576121e3611d29565b5b5f6121f185828601611ed0565b925050602061220285828601611ed0565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061225057607f821691505b6020821081036122635761226261220c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6122c3602883611dea565b91506122ce82612269565b604082019050919050565b5f6020820190508181035f8301526122f0816122b7565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e63655f8201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b5f612351602f83611dea565b915061235c826122f7565b604082019050919050565b5f6020820190508181035f83015261237e81612345565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6123bc82611ee4565b91506123c783611ee4565b92508282019050808211156123df576123de612385565b5b92915050565b7f43616c6c65724e6f74436f6e74726f6c6c6572000000000000000000000000005f82015250565b5f612419601383611dea565b9150612424826123e5565b602082019050919050565b5f6020820190508181035f8301526124468161240d565b9050919050565b5f8151905061245b81611eed565b92915050565b6002811061246d575f80fd5b50565b5f8151905061247e81612461565b92915050565b5f805f806080858703121561249c5761249b611d29565b5b5f6124a98782880161244d565b94505060206124ba8782880161244d565b93505060406124cb8782880161244d565b92505060606124dc87828801612470565b91505092959194509250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612542602583611dea565b915061254d826124e8565b604082019050919050565b5f6020820190508181035f83015261256f81612536565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6125d0602483611dea565b91506125db82612576565b604082019050919050565b5f6020820190508181035f8301526125fd816125c4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61265e602283611dea565b915061266982612604565b604082019050919050565b5f6020820190508181035f83015261268b81612652565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6126ec602583611dea565b91506126f782612692565b604082019050919050565b5f6020820190508181035f830152612719816126e0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61277a602383611dea565b915061278582612720565b604082019050919050565b5f6020820190508181035f8301526127a78161276e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612808602683611dea565b9150612813826127ae565b604082019050919050565b5f6020820190508181035f830152612835816127fc565b9050919050565b5f81905092915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000005f82015250565b5f61287a60178361283c565b915061288582612846565b601782019050919050565b5f61289a82611de0565b6128a4818561283c565b93506128b4818560208601611dfa565b80840191505092915050565b7f206973206d697373696e6720726f6c65200000000000000000000000000000005f82015250565b5f6128f460118361283c565b91506128ff826128c0565b601182019050919050565b5f6129148261286e565b91506129208285612890565b915061292b826128e8565b91506129378284612890565b91508190509392505050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f612977601f83611dea565b915061298282612943565b602082019050919050565b5f6020820190508181035f8301526129a48161296b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f612a05602183611dea565b9150612a10826129ab565b604082019050919050565b5f6020820190508181035f830152612a32816129f9565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f612a93602283611dea565b9150612a9e82612a39565b604082019050919050565b5f6020820190508181035f830152612ac081612a87565b9050919050565b5f612ad182611ee4565b9150612adc83611ee4565b9250828203905081811115612af457612af3612385565b5b92915050565b5f612b0482611ee4565b9150612b0f83611ee4565b9250828202612b1d81611ee4565b91508282048414831517612b3457612b33612385565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612b9f82611ee4565b91505f8203612bb157612bb0612385565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e745f82015250565b5f612bf0602083611dea565b9150612bfb82612bbc565b602082019050919050565b5f6020820190508181035f830152612c1d81612be4565b905091905056fea2646970667358221220c8563a7176e82ab619ad7701c7d5c3c571cdb722b4c0258542cd9c24f202b32e64736f6c634300081400330000000000000000000000000000000000000000000211654585005212800000000000000000000000000000e1425d8c6ec5be7bef42e002a095667282d0db8d
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106101a7575f3560e01c806370a08231116100f7578063a51df9da11610095578063b429afeb1161006f578063b429afeb146104e4578063d547741f14610514578063dd62ed3e14610530578063f6a74ed714610560576101a7565b8063a51df9da1461048e578063a7fc7a0714610498578063a9059cbb146104b4576101a7565b806397d75776116100d157806397d75776146104065780639dc29fac14610424578063a217fddf14610440578063a457c2d71461045e576101a7565b806370a082311461038857806391d14854146103b857806395d89b41146103e8576101a7565b80632f2ff15d11610164578063395093511161013e57806339509351146102fd57806340c10f191461032d57806342436beb14610349578063491ae34814610367576101a7565b80632f2ff15d146102a7578063313ce567146102c357806336568abe146102e1576101a7565b806301ffc9a7146101ab57806306fdde03146101db578063095ea7b3146101f957806318160ddd1461022957806323b872dd14610247578063248a9ca314610277575b5f80fd5b6101c560048036038101906101c09190611d82565b61057c565b6040516101d29190611dc7565b60405180910390f35b6101e36105f5565b6040516101f09190611e6a565b60405180910390f35b610213600480360381019061020e9190611f17565b610685565b6040516102209190611dc7565b60405180910390f35b6102316106a2565b60405161023e9190611f64565b60405180910390f35b610261600480360381019061025c9190611f7d565b6106ab565b60405161026e9190611dc7565b60405180910390f35b610291600480360381019061028c9190612000565b61079d565b60405161029e919061203a565b60405180910390f35b6102c160048036038101906102bc9190612053565b6107b9565b005b6102cb6107e2565b6040516102d891906120ac565b60405180910390f35b6102fb60048036038101906102f69190612053565b6107ea565b005b61031760048036038101906103129190611f17565b61086d565b6040516103249190611dc7565b60405180910390f35b61034760048036038101906103429190611f17565b610914565b005b6103516109b2565b60405161035e919061203a565b60405180910390f35b61036f6109d6565b60405161037f9493929190612138565b60405180910390f35b6103a2600480360381019061039d919061217b565b610a80565b6040516103af9190611f64565b60405180910390f35b6103d260048036038101906103cd9190612053565b610ac6565b6040516103df9190611dc7565b60405180910390f35b6103f0610b29565b6040516103fd9190611e6a565b60405180910390f35b61040e610bb9565b60405161041b91906121b5565b60405180910390f35b61043e60048036038101906104399190611f17565b610bdd565b005b610448610c7b565b604051610455919061203a565b60405180910390f35b61047860048036038101906104739190611f17565b610c81565b6040516104859190611dc7565b60405180910390f35b610496610d67565b005b6104b260048036038101906104ad919061217b565b610e9d565b005b6104ce60048036038101906104c99190611f17565b610f41565b6040516104db9190611dc7565b60405180910390f35b6104fe60048036038101906104f9919061217b565b610f5e565b60405161050b9190611dc7565b60405180910390f35b61052e60048036038101906105299190612053565b610f7b565b005b61054a600480360381019061054591906121ce565b610fa4565b6040516105579190611f64565b60405180910390f35b61057a6004803603810190610575919061217b565b611026565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ee57506105ed826110c9565b5b9050919050565b60606004805461060490612239565b80601f016020809104026020016040519081016040528092919081815260200182805461063090612239565b801561067b5780601f106106525761010080835404028352916020019161067b565b820191905f5260205f20905b81548152906001019060200180831161065e57829003601f168201915b5050505050905090565b5f610698610691611132565b8484611139565b6001905092915050565b5f600354905090565b5f6106b78484846112fc565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6106fe611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561077d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906122d9565b60405180910390fd5b61079185610789611132565b858403611139565b60019150509392505050565b5f805f8381526020019081526020015f20600101549050919050565b6107c28261079d565b6107d3816107ce611132565b611574565b6107dd8383611610565b505050565b5f6012905090565b6107f2611132565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085690612367565b60405180910390fd5b61086982826116ea565b5050565b5f61090a610879611132565b848460025f610886611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461090591906123b2565b611139565b6001905092915050565b60065f61091f611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b9061242f565b60405180910390fd5b6109ae82826117c4565b5050565b7f7d9b2fa622503631789179fcce46c450834f843fc10ad6b34135e9b867c799a881565b5f805f807f000000000000000000000000430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663dde798a4306040518263ffffffff1660e01b8152600401610a3391906121b5565b608060405180830381865afa158015610a4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a729190612484565b935093509350935090919293565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060058054610b3890612239565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6490612239565b8015610baf5780601f10610b8657610100808354040283529160200191610baf565b820191905f5260205f20905b815481529060010190602001808311610b9257829003601f168201915b5050505050905090565b7f000000000000000000000000430000000000000000000000000000000000000281565b60065f610be8611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c649061242f565b60405180910390fd5b610c77828261191c565b5050565b5f801b81565b5f8060025f610c8e611132565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90612558565b60405180910390fd5b610d5c610d53611132565b85858403611139565b600191505092915050565b7f7d9b2fa622503631789179fcce46c450834f843fc10ad6b34135e9b867c799a8610d9981610d94611132565b611574565b7f000000000000000000000000430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610dfe575f80fd5b505af1158015610e10573d5f803e3d5ffd5b505050507f000000000000000000000000430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663eb864698336040518263ffffffff1660e01b8152600401610e6d91906121b5565b5f604051808303815f87803b158015610e84575f80fd5b505af1158015610e96573d5f803e3d5ffd5b5050505050565b5f801b610eb181610eac611132565b611574565b600160065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d747482604051610f3591906121b5565b60405180910390a15050565b5f610f54610f4d611132565b84846112fc565b6001905092915050565b6006602052805f5260405f205f915054906101000a900460ff1681565b610f848261079d565b610f9581610f90611132565b611574565b610f9f83836116ea565b505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f801b61103a81611035611132565b611574565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e81113826040516110bd91906121b5565b60405180910390a15050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906125e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90612674565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112ef9190611f64565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190612702565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90612790565b60405180910390fd5b6113e3838383611aea565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e9061281e565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546114f791906123b2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161155b9190611f64565b60405180910390a361156e848484611aef565b50505050565b61157e8282610ac6565b61160c576115a38173ffffffffffffffffffffffffffffffffffffffff166014611af4565b6115b0835f1c6020611af4565b6040516020016115c192919061290a565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116039190611e6a565b60405180910390fd5b5050565b61161a8282610ac6565b6116e65760015f808481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061168b611132565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6116f48282610ac6565b156117c0575f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611765611132565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118299061298d565b60405180910390fd5b61183d5f8383611aea565b8060035f82825461184e91906123b2565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546118a191906123b2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119059190611f64565b60405180910390a36119185f8383611aef565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190612a1b565b60405180910390fd5b611995825f83611aea565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090612aa9565b60405180910390fd5b81810360015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f828254611a6e9190612ac7565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ad29190611f64565b60405180910390a3611ae5835f84611aef565b505050565b505050565b505050565b60605f6002836002611b069190612afa565b611b1091906123b2565b67ffffffffffffffff811115611b2957611b28612b3b565b5b6040519080825280601f01601f191660200182016040528015611b5b5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110611b9257611b91612b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611bf557611bf4612b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001846002611c339190612afa565b611c3d91906123b2565b90505b6001811115611cdc577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611c7f57611c7e612b68565b5b1a60f81b828281518110611c9657611c95612b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600485901c945080611cd590612b95565b9050611c40565b505f8414611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690612c06565b60405180910390fd5b8091505092915050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d6181611d2d565b8114611d6b575f80fd5b50565b5f81359050611d7c81611d58565b92915050565b5f60208284031215611d9757611d96611d29565b5b5f611da484828501611d6e565b91505092915050565b5f8115159050919050565b611dc181611dad565b82525050565b5f602082019050611dda5f830184611db8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611e17578082015181840152602081019050611dfc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611e3c82611de0565b611e468185611dea565b9350611e56818560208601611dfa565b611e5f81611e22565b840191505092915050565b5f6020820190508181035f830152611e828184611e32565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611eb382611e8a565b9050919050565b611ec381611ea9565b8114611ecd575f80fd5b50565b5f81359050611ede81611eba565b92915050565b5f819050919050565b611ef681611ee4565b8114611f00575f80fd5b50565b5f81359050611f1181611eed565b92915050565b5f8060408385031215611f2d57611f2c611d29565b5b5f611f3a85828601611ed0565b9250506020611f4b85828601611f03565b9150509250929050565b611f5e81611ee4565b82525050565b5f602082019050611f775f830184611f55565b92915050565b5f805f60608486031215611f9457611f93611d29565b5b5f611fa186828701611ed0565b9350506020611fb286828701611ed0565b9250506040611fc386828701611f03565b9150509250925092565b5f819050919050565b611fdf81611fcd565b8114611fe9575f80fd5b50565b5f81359050611ffa81611fd6565b92915050565b5f6020828403121561201557612014611d29565b5b5f61202284828501611fec565b91505092915050565b61203481611fcd565b82525050565b5f60208201905061204d5f83018461202b565b92915050565b5f806040838503121561206957612068611d29565b5b5f61207685828601611fec565b925050602061208785828601611ed0565b9150509250929050565b5f60ff82169050919050565b6120a681612091565b82525050565b5f6020820190506120bf5f83018461209d565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110612103576121026120c5565b5b50565b5f819050612113826120f2565b919050565b5f61212282612106565b9050919050565b61213281612118565b82525050565b5f60808201905061214b5f830187611f55565b6121586020830186611f55565b6121656040830185611f55565b6121726060830184612129565b95945050505050565b5f602082840312156121905761218f611d29565b5b5f61219d84828501611ed0565b91505092915050565b6121af81611ea9565b82525050565b5f6020820190506121c85f8301846121a6565b92915050565b5f80604083850312156121e4576121e3611d29565b5b5f6121f185828601611ed0565b925050602061220285828601611ed0565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061225057607f821691505b6020821081036122635761226261220c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6122c3602883611dea565b91506122ce82612269565b604082019050919050565b5f6020820190508181035f8301526122f0816122b7565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e63655f8201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b5f612351602f83611dea565b915061235c826122f7565b604082019050919050565b5f6020820190508181035f83015261237e81612345565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6123bc82611ee4565b91506123c783611ee4565b92508282019050808211156123df576123de612385565b5b92915050565b7f43616c6c65724e6f74436f6e74726f6c6c6572000000000000000000000000005f82015250565b5f612419601383611dea565b9150612424826123e5565b602082019050919050565b5f6020820190508181035f8301526124468161240d565b9050919050565b5f8151905061245b81611eed565b92915050565b6002811061246d575f80fd5b50565b5f8151905061247e81612461565b92915050565b5f805f806080858703121561249c5761249b611d29565b5b5f6124a98782880161244d565b94505060206124ba8782880161244d565b93505060406124cb8782880161244d565b92505060606124dc87828801612470565b91505092959194509250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612542602583611dea565b915061254d826124e8565b604082019050919050565b5f6020820190508181035f83015261256f81612536565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6125d0602483611dea565b91506125db82612576565b604082019050919050565b5f6020820190508181035f8301526125fd816125c4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61265e602283611dea565b915061266982612604565b604082019050919050565b5f6020820190508181035f83015261268b81612652565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6126ec602583611dea565b91506126f782612692565b604082019050919050565b5f6020820190508181035f830152612719816126e0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61277a602383611dea565b915061278582612720565b604082019050919050565b5f6020820190508181035f8301526127a78161276e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612808602683611dea565b9150612813826127ae565b604082019050919050565b5f6020820190508181035f830152612835816127fc565b9050919050565b5f81905092915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000005f82015250565b5f61287a60178361283c565b915061288582612846565b601782019050919050565b5f61289a82611de0565b6128a4818561283c565b93506128b4818560208601611dfa565b80840191505092915050565b7f206973206d697373696e6720726f6c65200000000000000000000000000000005f82015250565b5f6128f460118361283c565b91506128ff826128c0565b601182019050919050565b5f6129148261286e565b91506129208285612890565b915061292b826128e8565b91506129378284612890565b91508190509392505050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f612977601f83611dea565b915061298282612943565b602082019050919050565b5f6020820190508181035f8301526129a48161296b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f612a05602183611dea565b9150612a10826129ab565b604082019050919050565b5f6020820190508181035f830152612a32816129f9565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f612a93602283611dea565b9150612a9e82612a39565b604082019050919050565b5f6020820190508181035f830152612ac081612a87565b9050919050565b5f612ad182611ee4565b9150612adc83611ee4565b9250828203905081811115612af457612af3612385565b5b92915050565b5f612b0482611ee4565b9150612b0f83611ee4565b9250828202612b1d81611ee4565b91508282048414831517612b3457612b33612385565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612b9f82611ee4565b91505f8203612bb157612bb0612385565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e745f82015250565b5f612bf0602083611dea565b9150612bfb82612bbc565b602082019050919050565b5f6020820190508181035f830152612c1d81612be4565b905091905056fea2646970667358221220c8563a7176e82ab619ad7701c7d5c3c571cdb722b4c0258542cd9c24f202b32e64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000211654585005212800000000000000000000000000000e1425d8c6ec5be7bef42e002a095667282d0db8d
-----Decoded View---------------
Arg [0] : _initialSupply (uint256): 2500000000000000000000000
Arg [1] : _treasuryAddress (address): 0xE1425D8C6ec5BE7bef42E002a095667282d0db8D
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000211654585005212800000
Arg [1] : 000000000000000000000000e1425d8c6ec5be7bef42e002a095667282d0db8d
Deployed Bytecode Sourcemap
51126:1558:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37489:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6344:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8511:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7464:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9162:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38900:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39285:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7306:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40333:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10063:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51714:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50162:72;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50557:222;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;7635:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37785:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6563:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50071:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51837:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36876:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10781:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50377:172;;;:::i;:::-;;52017:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7975:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51260:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39677:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8213:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52246:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37489:204;37574:4;37613:32;37598:47;;;:11;:47;;;;:87;;;;37649:36;37673:11;37649:23;:36::i;:::-;37598:87;37591:94;;37489:204;;;:::o;6344:100::-;6398:13;6431:5;6424:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6344:100;:::o;8511:169::-;8594:4;8611:39;8620:12;:10;:12::i;:::-;8634:7;8643:6;8611:8;:39::i;:::-;8668:4;8661:11;;8511:169;;;;:::o;7464:108::-;7525:7;7552:12;;7545:19;;7464:108;:::o;9162:492::-;9302:4;9319:36;9329:6;9337:9;9348:6;9319:9;:36::i;:::-;9368:24;9395:11;:19;9407:6;9395:19;;;;;;;;;;;;;;;:33;9415:12;:10;:12::i;:::-;9395:33;;;;;;;;;;;;;;;;9368:60;;9467:6;9447:16;:26;;9439:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9554:57;9563:6;9571:12;:10;:12::i;:::-;9604:6;9585:16;:25;9554:8;:57::i;:::-;9642:4;9635:11;;;9162:492;;;;;:::o;38900:123::-;38966:7;38993:6;:12;39000:4;38993:12;;;;;;;;;;;:22;;;38986:29;;38900:123;;;:::o;39285:147::-;39368:18;39381:4;39368:12;:18::i;:::-;37367:30;37378:4;37384:12;:10;:12::i;:::-;37367:10;:30::i;:::-;39399:25:::1;39410:4;39416:7;39399:10;:25::i;:::-;39285:147:::0;;;:::o;7306:93::-;7364:5;7389:2;7382:9;;7306:93;:::o;40333:218::-;40440:12;:10;:12::i;:::-;40429:23;;:7;:23;;;40421:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;40517:26;40529:4;40535:7;40517:11;:26::i;:::-;40333:218;;:::o;10063:215::-;10151:4;10168:80;10177:12;:10;:12::i;:::-;10191:7;10237:10;10200:11;:25;10212:12;:10;:12::i;:::-;10200:25;;;;;;;;;;;;;;;:34;10226:7;10200:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10168:8;:80::i;:::-;10266:4;10259:11;;10063:215;;;;:::o;51714:115::-;52476:12;:26;52489:12;:10;:12::i;:::-;52476:26;;;;;;;;;;;;;;;;;;;;;;;;;52468:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51802:19:::1;51808:3;51813:7;51802:5;:19::i;:::-;51714:115:::0;;:::o;50162:72::-;50205:29;50162:72;:::o;50557:222::-;50632:20;50654;50676:19;50697:7;50736:5;50729:27;;;50765:4;50729:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50722:49;;;;;;;;50557:222;;;;:::o;7635:127::-;7709:7;7736:9;:18;7746:7;7736:18;;;;;;;;;;;;;;;;7729:25;;7635:127;;;:::o;37785:139::-;37863:4;37887:6;:12;37894:4;37887:12;;;;;;;;;;;:20;;:29;37908:7;37887:29;;;;;;;;;;;;;;;;;;;;;;;;;37880:36;;37785:139;;;;:::o;6563:104::-;6619:13;6652:7;6645:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6563:104;:::o;50071:84::-;;;:::o;51837:119::-;52476:12;:26;52489:12;:10;:12::i;:::-;52476:26;;;;;;;;;;;;;;;;;;;;;;;;;52468:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51927:21:::1;51933:5;51940:7;51927:5;:21::i;:::-;51837:119:::0;;:::o;36876:49::-;36921:4;36876:49;;;:::o;10781:413::-;10874:4;10891:24;10918:11;:25;10930:12;:10;:12::i;:::-;10918:25;;;;;;;;;;;;;;;:34;10944:7;10918:34;;;;;;;;;;;;;;;;10891:61;;10991:15;10971:16;:35;;10963:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11084:67;11093:12;:10;:12::i;:::-;11107:7;11135:15;11116:16;:34;11084:8;:67::i;:::-;11182:4;11175:11;;;10781:413;;;;:::o;50377:172::-;50205:29;37367:30;37378:4;37384:12;:10;:12::i;:::-;37367:10;:30::i;:::-;50457:5:::1;50450:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50505:5;50498:31;;;50530:10;50498:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50377:172:::0;:::o;52017:162::-;36921:4;52074:18;;37367:30;37378:4;37384:12;:10;:12::i;:::-;37367:10;:30::i;:::-;52128:4:::1;52105:12;:20;52118:6;52105:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;52148:23;52164:6;52148:23;;;;;;:::i;:::-;;;;;;;;52017:162:::0;;:::o;7975:175::-;8061:4;8078:42;8088:12;:10;:12::i;:::-;8102:9;8113:6;8078:9;:42::i;:::-;8138:4;8131:11;;7975:175;;;;:::o;51260:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;39677:149::-;39761:18;39774:4;39761:12;:18::i;:::-;37367:30;37378:4;37384:12;:10;:12::i;:::-;37367:10;:30::i;:::-;39792:26:::1;39804:4;39810:7;39792:11;:26::i;:::-;39677:149:::0;;;:::o;8213:151::-;8302:7;8329:11;:18;8341:5;8329:18;;;;;;;;;;;;;;;:27;8348:7;8329:27;;;;;;;;;;;;;;;;8322:34;;8213:151;;;;:::o;52246:177::-;36921:4;52309:18;;37367:30;37378:4;37384:12;:10;:12::i;:::-;37367:10;:30::i;:::-;52366:5:::1;52340:12;:23;52353:9;52340:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;52387:28;52405:9;52387:28;;;;;;:::i;:::-;;;;;;;;52246:177:::0;;:::o;34910:157::-;34995:4;35034:25;35019:40;;;:11;:40;;;;35012:47;;34910:157;;;:::o;4152:98::-;4205:7;4232:10;4225:17;;4152:98;:::o;14465:380::-;14618:1;14601:19;;:5;:19;;;14593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14699:1;14680:21;;:7;:21;;;14672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14783:6;14753:11;:18;14765:5;14753:18;;;;;;;;;;;;;;;:27;14772:7;14753:27;;;;;;;;;;;;;;;:36;;;;14821:7;14805:32;;14814:5;14805:32;;;14830:6;14805:32;;;;;;:::i;:::-;;;;;;;;14465:380;;;:::o;11684:733::-;11842:1;11824:20;;:6;:20;;;11816:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11926:1;11905:23;;:9;:23;;;11897:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11981:47;12002:6;12010:9;12021:6;11981:20;:47::i;:::-;12041:21;12065:9;:17;12075:6;12065:17;;;;;;;;;;;;;;;;12041:41;;12118:6;12101:13;:23;;12093:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12239:6;12223:13;:22;12203:9;:17;12213:6;12203:17;;;;;;;;;;;;;;;:42;;;;12291:6;12267:9;:20;12277:9;12267:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12332:9;12315:35;;12324:6;12315:35;;;12343:6;12315:35;;;;;;:::i;:::-;;;;;;;;12363:46;12383:6;12391:9;12402:6;12363:19;:46::i;:::-;11805:612;11684:733;;;:::o;38214:497::-;38295:22;38303:4;38309:7;38295;:22::i;:::-;38290:414;;38483:41;38511:7;38483:41;;38521:2;38483:19;:41::i;:::-;38597:38;38625:4;38617:13;;38632:2;38597:19;:38::i;:::-;38388:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38334:358;;;;;;;;;;;:::i;:::-;;;;;;;;38290:414;38214:497;;:::o;41834:238::-;41918:22;41926:4;41932:7;41918;:22::i;:::-;41913:152;;41989:4;41957:6;:12;41964:4;41957:12;;;;;;;;;;;:20;;:29;41978:7;41957:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;42040:12;:10;:12::i;:::-;42013:40;;42031:7;42013:40;;42025:4;42013:40;;;;;;;;;;41913:152;41834:238;;:::o;42204:239::-;42288:22;42296:4;42302:7;42288;:22::i;:::-;42284:152;;;42359:5;42327:6;:12;42334:4;42327:12;;;;;;;;;;;:20;;:29;42348:7;42327:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;42411:12;:10;:12::i;:::-;42384:40;;42402:7;42384:40;;42396:4;42384:40;;;;;;;;;;42284:152;42204:239;;:::o;12704:399::-;12807:1;12788:21;;:7;:21;;;12780:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12858:49;12887:1;12891:7;12900:6;12858:20;:49::i;:::-;12936:6;12920:12;;:22;;;;;;;:::i;:::-;;;;;;;;12975:6;12953:9;:18;12963:7;12953:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13018:7;12997:37;;13014:1;12997:37;;;13027:6;12997:37;;;;;;:::i;:::-;;;;;;;;13047:48;13075:1;13079:7;13088:6;13047:19;:48::i;:::-;12704:399;;:::o;13436:591::-;13539:1;13520:21;;:7;:21;;;13512:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13592:49;13613:7;13630:1;13634:6;13592:20;:49::i;:::-;13654:22;13679:9;:18;13689:7;13679:18;;;;;;;;;;;;;;;;13654:43;;13734:6;13716:14;:24;;13708:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13853:6;13836:14;:23;13815:9;:18;13825:7;13815:18;;;;;;;;;;;;;;;:44;;;;13897:6;13881:12;;:22;;;;;;;:::i;:::-;;;;;;;;13947:1;13921:37;;13930:7;13921:37;;;13951:6;13921:37;;;;;;:::i;:::-;;;;;;;;13971:48;13991:7;14008:1;14012:6;13971:19;:48::i;:::-;13501:526;13436:591;;:::o;15445:125::-;;;;:::o;16174:124::-;;;;:::o;32865:451::-;32940:13;32966:19;33011:1;33002:6;32998:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;32988:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32966:47;;33024:15;:6;33031:1;33024:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;33050;:6;33057:1;33050:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;33081:9;33106:1;33097:6;33093:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;33081:26;;33076:135;33113:1;33109;:5;33076:135;;;33148:12;33169:3;33161:5;:11;33148:25;;;;;;;:::i;:::-;;;;;33136:6;33143:1;33136:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;33198:1;33188:11;;;;;33116:3;;;;:::i;:::-;;;33076:135;;;;33238:1;33229:5;:10;33221:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33301:6;33287:21;;;32865:451;;;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:126::-;2897:7;2937:42;2930:5;2926:54;2915:65;;2860:126;;;:::o;2992:96::-;3029:7;3058:24;3076:5;3058:24;:::i;:::-;3047:35;;2992:96;;;:::o;3094:122::-;3167:24;3185:5;3167:24;:::i;:::-;3160:5;3157:35;3147:63;;3206:1;3203;3196:12;3147:63;3094:122;:::o;3222:139::-;3268:5;3306:6;3293:20;3284:29;;3322:33;3349:5;3322:33;:::i;:::-;3222:139;;;;:::o;3367:77::-;3404:7;3433:5;3422:16;;3367:77;;;:::o;3450:122::-;3523:24;3541:5;3523:24;:::i;:::-;3516:5;3513:35;3503:63;;3562:1;3559;3552:12;3503:63;3450:122;:::o;3578:139::-;3624:5;3662:6;3649:20;3640:29;;3678:33;3705:5;3678:33;:::i;:::-;3578:139;;;;:::o;3723:474::-;3791:6;3799;3848:2;3836:9;3827:7;3823:23;3819:32;3816:119;;;3854:79;;:::i;:::-;3816:119;3974:1;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3945:117;4101:2;4127:53;4172:7;4163:6;4152:9;4148:22;4127:53;:::i;:::-;4117:63;;4072:118;3723:474;;;;;:::o;4203:118::-;4290:24;4308:5;4290:24;:::i;:::-;4285:3;4278:37;4203:118;;:::o;4327:222::-;4420:4;4458:2;4447:9;4443:18;4435:26;;4471:71;4539:1;4528:9;4524:17;4515:6;4471:71;:::i;:::-;4327:222;;;;:::o;4555:619::-;4632:6;4640;4648;4697:2;4685:9;4676:7;4672:23;4668:32;4665:119;;;4703:79;;:::i;:::-;4665:119;4823:1;4848:53;4893:7;4884:6;4873:9;4869:22;4848:53;:::i;:::-;4838:63;;4794:117;4950:2;4976:53;5021:7;5012:6;5001:9;4997:22;4976:53;:::i;:::-;4966:63;;4921:118;5078:2;5104:53;5149:7;5140:6;5129:9;5125:22;5104:53;:::i;:::-;5094:63;;5049:118;4555:619;;;;;:::o;5180:77::-;5217:7;5246:5;5235:16;;5180:77;;;:::o;5263:122::-;5336:24;5354:5;5336:24;:::i;:::-;5329:5;5326:35;5316:63;;5375:1;5372;5365:12;5316:63;5263:122;:::o;5391:139::-;5437:5;5475:6;5462:20;5453:29;;5491:33;5518:5;5491:33;:::i;:::-;5391:139;;;;:::o;5536:329::-;5595:6;5644:2;5632:9;5623:7;5619:23;5615:32;5612:119;;;5650:79;;:::i;:::-;5612:119;5770:1;5795:53;5840:7;5831:6;5820:9;5816:22;5795:53;:::i;:::-;5785:63;;5741:117;5536:329;;;;:::o;5871:118::-;5958:24;5976:5;5958:24;:::i;:::-;5953:3;5946:37;5871:118;;:::o;5995:222::-;6088:4;6126:2;6115:9;6111:18;6103:26;;6139:71;6207:1;6196:9;6192:17;6183:6;6139:71;:::i;:::-;5995:222;;;;:::o;6223:474::-;6291:6;6299;6348:2;6336:9;6327:7;6323:23;6319:32;6316:119;;;6354:79;;:::i;:::-;6316:119;6474:1;6499:53;6544:7;6535:6;6524:9;6520:22;6499:53;:::i;:::-;6489:63;;6445:117;6601:2;6627:53;6672:7;6663:6;6652:9;6648:22;6627:53;:::i;:::-;6617:63;;6572:118;6223:474;;;;;:::o;6703:86::-;6738:7;6778:4;6771:5;6767:16;6756:27;;6703:86;;;:::o;6795:112::-;6878:22;6894:5;6878:22;:::i;:::-;6873:3;6866:35;6795:112;;:::o;6913:214::-;7002:4;7040:2;7029:9;7025:18;7017:26;;7053:67;7117:1;7106:9;7102:17;7093:6;7053:67;:::i;:::-;6913:214;;;;:::o;7133:180::-;7181:77;7178:1;7171:88;7278:4;7275:1;7268:15;7302:4;7299:1;7292:15;7319:117;7404:1;7397:5;7394:12;7384:46;;7410:18;;:::i;:::-;7384:46;7319:117;:::o;7442:135::-;7491:7;7520:5;7509:16;;7526:45;7565:5;7526:45;:::i;:::-;7442:135;;;:::o;7583:::-;7643:9;7676:36;7706:5;7676:36;:::i;:::-;7663:49;;7583:135;;;:::o;7724:151::-;7821:47;7862:5;7821:47;:::i;:::-;7816:3;7809:60;7724:151;;:::o;7881:573::-;8068:4;8106:3;8095:9;8091:19;8083:27;;8120:71;8188:1;8177:9;8173:17;8164:6;8120:71;:::i;:::-;8201:72;8269:2;8258:9;8254:18;8245:6;8201:72;:::i;:::-;8283;8351:2;8340:9;8336:18;8327:6;8283:72;:::i;:::-;8365:82;8443:2;8432:9;8428:18;8419:6;8365:82;:::i;:::-;7881:573;;;;;;;:::o;8460:329::-;8519:6;8568:2;8556:9;8547:7;8543:23;8539:32;8536:119;;;8574:79;;:::i;:::-;8536:119;8694:1;8719:53;8764:7;8755:6;8744:9;8740:22;8719:53;:::i;:::-;8709:63;;8665:117;8460:329;;;;:::o;8795:118::-;8882:24;8900:5;8882:24;:::i;:::-;8877:3;8870:37;8795:118;;:::o;8919:222::-;9012:4;9050:2;9039:9;9035:18;9027:26;;9063:71;9131:1;9120:9;9116:17;9107:6;9063:71;:::i;:::-;8919:222;;;;:::o;9147:474::-;9215:6;9223;9272:2;9260:9;9251:7;9247:23;9243:32;9240:119;;;9278:79;;:::i;:::-;9240:119;9398:1;9423:53;9468:7;9459:6;9448:9;9444:22;9423:53;:::i;:::-;9413:63;;9369:117;9525:2;9551:53;9596:7;9587:6;9576:9;9572:22;9551:53;:::i;:::-;9541:63;;9496:118;9147:474;;;;;:::o;9627:180::-;9675:77;9672:1;9665:88;9772:4;9769:1;9762:15;9796:4;9793:1;9786:15;9813:320;9857:6;9894:1;9888:4;9884:12;9874:22;;9941:1;9935:4;9931:12;9962:18;9952:81;;10018:4;10010:6;10006:17;9996:27;;9952:81;10080:2;10072:6;10069:14;10049:18;10046:38;10043:84;;10099:18;;:::i;:::-;10043:84;9864:269;9813:320;;;:::o;10139:227::-;10279:34;10275:1;10267:6;10263:14;10256:58;10348:10;10343:2;10335:6;10331:15;10324:35;10139:227;:::o;10372:366::-;10514:3;10535:67;10599:2;10594:3;10535:67;:::i;:::-;10528:74;;10611:93;10700:3;10611:93;:::i;:::-;10729:2;10724:3;10720:12;10713:19;;10372:366;;;:::o;10744:419::-;10910:4;10948:2;10937:9;10933:18;10925:26;;10997:9;10991:4;10987:20;10983:1;10972:9;10968:17;10961:47;11025:131;11151:4;11025:131;:::i;:::-;11017:139;;10744:419;;;:::o;11169:234::-;11309:34;11305:1;11297:6;11293:14;11286:58;11378:17;11373:2;11365:6;11361:15;11354:42;11169:234;:::o;11409:366::-;11551:3;11572:67;11636:2;11631:3;11572:67;:::i;:::-;11565:74;;11648:93;11737:3;11648:93;:::i;:::-;11766:2;11761:3;11757:12;11750:19;;11409:366;;;:::o;11781:419::-;11947:4;11985:2;11974:9;11970:18;11962:26;;12034:9;12028:4;12024:20;12020:1;12009:9;12005:17;11998:47;12062:131;12188:4;12062:131;:::i;:::-;12054:139;;11781:419;;;:::o;12206:180::-;12254:77;12251:1;12244:88;12351:4;12348:1;12341:15;12375:4;12372:1;12365:15;12392:191;12432:3;12451:20;12469:1;12451:20;:::i;:::-;12446:25;;12485:20;12503:1;12485:20;:::i;:::-;12480:25;;12528:1;12525;12521:9;12514:16;;12549:3;12546:1;12543:10;12540:36;;;12556:18;;:::i;:::-;12540:36;12392:191;;;;:::o;12589:169::-;12729:21;12725:1;12717:6;12713:14;12706:45;12589:169;:::o;12764:366::-;12906:3;12927:67;12991:2;12986:3;12927:67;:::i;:::-;12920:74;;13003:93;13092:3;13003:93;:::i;:::-;13121:2;13116:3;13112:12;13105:19;;12764:366;;;:::o;13136:419::-;13302:4;13340:2;13329:9;13325:18;13317:26;;13389:9;13383:4;13379:20;13375:1;13364:9;13360:17;13353:47;13417:131;13543:4;13417:131;:::i;:::-;13409:139;;13136:419;;;:::o;13561:143::-;13618:5;13649:6;13643:13;13634:22;;13665:33;13692:5;13665:33;:::i;:::-;13561:143;;;;:::o;13710:111::-;13795:1;13788:5;13785:12;13775:40;;13811:1;13808;13801:12;13775:40;13710:111;:::o;13827:167::-;13896:5;13927:6;13921:13;13912:22;;13943:45;13982:5;13943:45;:::i;:::-;13827:167;;;;:::o;14000:844::-;14109:6;14117;14125;14133;14182:3;14170:9;14161:7;14157:23;14153:33;14150:120;;;14189:79;;:::i;:::-;14150:120;14309:1;14334:64;14390:7;14381:6;14370:9;14366:22;14334:64;:::i;:::-;14324:74;;14280:128;14447:2;14473:64;14529:7;14520:6;14509:9;14505:22;14473:64;:::i;:::-;14463:74;;14418:129;14586:2;14612:64;14668:7;14659:6;14648:9;14644:22;14612:64;:::i;:::-;14602:74;;14557:129;14725:2;14751:76;14819:7;14810:6;14799:9;14795:22;14751:76;:::i;:::-;14741:86;;14696:141;14000:844;;;;;;;:::o;14850:224::-;14990:34;14986:1;14978:6;14974:14;14967:58;15059:7;15054:2;15046:6;15042:15;15035:32;14850:224;:::o;15080:366::-;15222:3;15243:67;15307:2;15302:3;15243:67;:::i;:::-;15236:74;;15319:93;15408:3;15319:93;:::i;:::-;15437:2;15432:3;15428:12;15421:19;;15080:366;;;:::o;15452:419::-;15618:4;15656:2;15645:9;15641:18;15633:26;;15705:9;15699:4;15695:20;15691:1;15680:9;15676:17;15669:47;15733:131;15859:4;15733:131;:::i;:::-;15725:139;;15452:419;;;:::o;15877:223::-;16017:34;16013:1;16005:6;16001:14;15994:58;16086:6;16081:2;16073:6;16069:15;16062:31;15877:223;:::o;16106:366::-;16248:3;16269:67;16333:2;16328:3;16269:67;:::i;:::-;16262:74;;16345:93;16434:3;16345:93;:::i;:::-;16463:2;16458:3;16454:12;16447:19;;16106:366;;;:::o;16478:419::-;16644:4;16682:2;16671:9;16667:18;16659:26;;16731:9;16725:4;16721:20;16717:1;16706:9;16702:17;16695:47;16759:131;16885:4;16759:131;:::i;:::-;16751:139;;16478:419;;;:::o;16903:221::-;17043:34;17039:1;17031:6;17027:14;17020:58;17112:4;17107:2;17099:6;17095:15;17088:29;16903:221;:::o;17130:366::-;17272:3;17293:67;17357:2;17352:3;17293:67;:::i;:::-;17286:74;;17369:93;17458:3;17369:93;:::i;:::-;17487:2;17482:3;17478:12;17471:19;;17130:366;;;:::o;17502:419::-;17668:4;17706:2;17695:9;17691:18;17683:26;;17755:9;17749:4;17745:20;17741:1;17730:9;17726:17;17719:47;17783:131;17909:4;17783:131;:::i;:::-;17775:139;;17502:419;;;:::o;17927:224::-;18067:34;18063:1;18055:6;18051:14;18044:58;18136:7;18131:2;18123:6;18119:15;18112:32;17927:224;:::o;18157:366::-;18299:3;18320:67;18384:2;18379:3;18320:67;:::i;:::-;18313:74;;18396:93;18485:3;18396:93;:::i;:::-;18514:2;18509:3;18505:12;18498:19;;18157:366;;;:::o;18529:419::-;18695:4;18733:2;18722:9;18718:18;18710:26;;18782:9;18776:4;18772:20;18768:1;18757:9;18753:17;18746:47;18810:131;18936:4;18810:131;:::i;:::-;18802:139;;18529:419;;;:::o;18954:222::-;19094:34;19090:1;19082:6;19078:14;19071:58;19163:5;19158:2;19150:6;19146:15;19139:30;18954:222;:::o;19182:366::-;19324:3;19345:67;19409:2;19404:3;19345:67;:::i;:::-;19338:74;;19421:93;19510:3;19421:93;:::i;:::-;19539:2;19534:3;19530:12;19523:19;;19182:366;;;:::o;19554:419::-;19720:4;19758:2;19747:9;19743:18;19735:26;;19807:9;19801:4;19797:20;19793:1;19782:9;19778:17;19771:47;19835:131;19961:4;19835:131;:::i;:::-;19827:139;;19554:419;;;:::o;19979:225::-;20119:34;20115:1;20107:6;20103:14;20096:58;20188:8;20183:2;20175:6;20171:15;20164:33;19979:225;:::o;20210:366::-;20352:3;20373:67;20437:2;20432:3;20373:67;:::i;:::-;20366:74;;20449:93;20538:3;20449:93;:::i;:::-;20567:2;20562:3;20558:12;20551:19;;20210:366;;;:::o;20582:419::-;20748:4;20786:2;20775:9;20771:18;20763:26;;20835:9;20829:4;20825:20;20821:1;20810:9;20806:17;20799:47;20863:131;20989:4;20863:131;:::i;:::-;20855:139;;20582:419;;;:::o;21007:148::-;21109:11;21146:3;21131:18;;21007:148;;;;:::o;21161:173::-;21301:25;21297:1;21289:6;21285:14;21278:49;21161:173;:::o;21340:402::-;21500:3;21521:85;21603:2;21598:3;21521:85;:::i;:::-;21514:92;;21615:93;21704:3;21615:93;:::i;:::-;21733:2;21728:3;21724:12;21717:19;;21340:402;;;:::o;21748:390::-;21854:3;21882:39;21915:5;21882:39;:::i;:::-;21937:89;22019:6;22014:3;21937:89;:::i;:::-;21930:96;;22035:65;22093:6;22088:3;22081:4;22074:5;22070:16;22035:65;:::i;:::-;22125:6;22120:3;22116:16;22109:23;;21858:280;21748:390;;;;:::o;22144:167::-;22284:19;22280:1;22272:6;22268:14;22261:43;22144:167;:::o;22317:402::-;22477:3;22498:85;22580:2;22575:3;22498:85;:::i;:::-;22491:92;;22592:93;22681:3;22592:93;:::i;:::-;22710:2;22705:3;22701:12;22694:19;;22317:402;;;:::o;22725:967::-;23107:3;23129:148;23273:3;23129:148;:::i;:::-;23122:155;;23294:95;23385:3;23376:6;23294:95;:::i;:::-;23287:102;;23406:148;23550:3;23406:148;:::i;:::-;23399:155;;23571:95;23662:3;23653:6;23571:95;:::i;:::-;23564:102;;23683:3;23676:10;;22725:967;;;;;:::o;23698:181::-;23838:33;23834:1;23826:6;23822:14;23815:57;23698:181;:::o;23885:366::-;24027:3;24048:67;24112:2;24107:3;24048:67;:::i;:::-;24041:74;;24124:93;24213:3;24124:93;:::i;:::-;24242:2;24237:3;24233:12;24226:19;;23885:366;;;:::o;24257:419::-;24423:4;24461:2;24450:9;24446:18;24438:26;;24510:9;24504:4;24500:20;24496:1;24485:9;24481:17;24474:47;24538:131;24664:4;24538:131;:::i;:::-;24530:139;;24257:419;;;:::o;24682:220::-;24822:34;24818:1;24810:6;24806:14;24799:58;24891:3;24886:2;24878:6;24874:15;24867:28;24682:220;:::o;24908:366::-;25050:3;25071:67;25135:2;25130:3;25071:67;:::i;:::-;25064:74;;25147:93;25236:3;25147:93;:::i;:::-;25265:2;25260:3;25256:12;25249:19;;24908:366;;;:::o;25280:419::-;25446:4;25484:2;25473:9;25469:18;25461:26;;25533:9;25527:4;25523:20;25519:1;25508:9;25504:17;25497:47;25561:131;25687:4;25561:131;:::i;:::-;25553:139;;25280:419;;;:::o;25705:221::-;25845:34;25841:1;25833:6;25829:14;25822:58;25914:4;25909:2;25901:6;25897:15;25890:29;25705:221;:::o;25932:366::-;26074:3;26095:67;26159:2;26154:3;26095:67;:::i;:::-;26088:74;;26171:93;26260:3;26171:93;:::i;:::-;26289:2;26284:3;26280:12;26273:19;;25932:366;;;:::o;26304:419::-;26470:4;26508:2;26497:9;26493:18;26485:26;;26557:9;26551:4;26547:20;26543:1;26532:9;26528:17;26521:47;26585:131;26711:4;26585:131;:::i;:::-;26577:139;;26304:419;;;:::o;26729:194::-;26769:4;26789:20;26807:1;26789:20;:::i;:::-;26784:25;;26823:20;26841:1;26823:20;:::i;:::-;26818:25;;26867:1;26864;26860:9;26852:17;;26891:1;26885:4;26882:11;26879:37;;;26896:18;;:::i;:::-;26879:37;26729:194;;;;:::o;26929:410::-;26969:7;26992:20;27010:1;26992:20;:::i;:::-;26987:25;;27026:20;27044:1;27026:20;:::i;:::-;27021:25;;27081:1;27078;27074:9;27103:30;27121:11;27103:30;:::i;:::-;27092:41;;27282:1;27273:7;27269:15;27266:1;27263:22;27243:1;27236:9;27216:83;27193:139;;27312:18;;:::i;:::-;27193:139;26977:362;26929:410;;;;:::o;27345:180::-;27393:77;27390:1;27383:88;27490:4;27487:1;27480:15;27514:4;27511:1;27504:15;27531:180;27579:77;27576:1;27569:88;27676:4;27673:1;27666:15;27700:4;27697:1;27690:15;27717:171;27756:3;27779:24;27797:5;27779:24;:::i;:::-;27770:33;;27825:4;27818:5;27815:15;27812:41;;27833:18;;:::i;:::-;27812:41;27880:1;27873:5;27869:13;27862:20;;27717:171;;;:::o;27894:182::-;28034:34;28030:1;28022:6;28018:14;28011:58;27894:182;:::o;28082:366::-;28224:3;28245:67;28309:2;28304:3;28245:67;:::i;:::-;28238:74;;28321:93;28410:3;28321:93;:::i;:::-;28439:2;28434:3;28430:12;28423:19;;28082:366;;;:::o;28454:419::-;28620:4;28658:2;28647:9;28643:18;28635:26;;28707:9;28701:4;28697:20;28693:1;28682:9;28678:17;28671:47;28735:131;28861:4;28735:131;:::i;:::-;28727:139;;28454:419;;;:::o
Swarm Source
ipfs://c8563a7176e82ab619ad7701c7d5c3c571cdb722b4c0258542cd9c24f202b32e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $0.762945 | 1,040.0115 | $793.47 |
[ 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.