Feature Tip: Add private address tag to any address under My Name Tag !
Latest 25 from a total of 446 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 21370445 | 39 days ago | IN | 0 ETH | 0.00078711 | ||||
Transfer | 21370416 | 39 days ago | IN | 0 ETH | 0.00067826 | ||||
Transfer | 17459336 | 587 days ago | IN | 0 ETH | 0.00302118 | ||||
Transfer | 17346997 | 602 days ago | IN | 0 ETH | 0.00072526 | ||||
Transfer | 17341175 | 603 days ago | IN | 0 ETH | 0.00088311 | ||||
Transfer | 17116023 | 635 days ago | IN | 0 ETH | 0.00286733 | ||||
Transfer | 17065441 | 642 days ago | IN | 0 ETH | 0.00297696 | ||||
Transfer | 17065408 | 642 days ago | IN | 0 ETH | 0.00197813 | ||||
Approve | 17063824 | 642 days ago | IN | 0 ETH | 0.00138149 | ||||
Transfer | 16787666 | 681 days ago | IN | 0 ETH | 0.00164269 | ||||
Transfer | 16781306 | 682 days ago | IN | 0 ETH | 0.00136749 | ||||
Transfer | 15414232 | 876 days ago | IN | 0 ETH | 0.00053204 | ||||
Transfer | 15409274 | 877 days ago | IN | 0 ETH | 0.00064929 | ||||
Transfer | 14953581 | 950 days ago | IN | 0 ETH | 0.00289424 | ||||
Transfer | 14945759 | 952 days ago | IN | 0 ETH | 0.00137278 | ||||
Transfer | 14834185 | 970 days ago | IN | 0 ETH | 0.00079749 | ||||
Transfer | 14831884 | 971 days ago | IN | 0 ETH | 0.00092395 | ||||
Transfer | 14783832 | 978 days ago | IN | 0 ETH | 0.00112978 | ||||
Transfer | 14770118 | 981 days ago | IN | 0 ETH | 0.00205056 | ||||
Transfer | 14656058 | 999 days ago | IN | 0 ETH | 0.00230918 | ||||
Transfer | 14655723 | 999 days ago | IN | 0 ETH | 0.004244 | ||||
Transfer | 14608503 | 1006 days ago | IN | 0 ETH | 0.00077208 | ||||
Transfer | 14608330 | 1006 days ago | IN | 0 ETH | 0.00209444 | ||||
Transfer | 14608289 | 1006 days ago | IN | 0 ETH | 0.00174933 | ||||
Transfer | 14601308 | 1007 days ago | IN | 0 ETH | 0.00136983 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WaCoToken
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-10 */ /** *Submitted for verification at Etherscan.io on 2021-02-09 */ pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev 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 guidelines: functions revert instead * of 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 { 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 defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All three 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 returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 * overloaded; * * 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 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); require( _allowances[sender][_msgSender()] >= amount, "ERC20: transfer amount exceeds allowance" ); _approve( sender, _msgSender(), _allowances[sender][_msgSender()] - 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) { require( _allowances[_msgSender()][spender] >= subtractedValue, "ERC20: decreased allowance below zero" ); _approve( _msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue ); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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); require( _balances[sender] >= amount, "ERC20: transfer amount exceeds balance" ); _balances[sender] -= amount; _balances[recipient] += amount; emit Transfer(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: * * - `to` 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); } /** * @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); require( _balances[account] >= amount, "ERC20: burn amount exceeds balance" ); _balances[account] -= amount; _totalSupply -= amount; emit Transfer(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 to 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 Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require( set._values.length > index, "EnumerableSet: index out of bounds" ); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } contract WaCoToken is ERC20, Ownable { using EnumerableSet for EnumerableSet.AddressSet; using Address for address; struct RoleData { EnumerableSet.AddressSet members; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant BLACKLISTED_ADDRESSES = keccak256("BLACKLISTED_ADDRESSES"); event RoleGranted( bytes32 indexed role, address indexed account, address indexed sender ); event RoleRevoked( bytes32 indexed role, address indexed account, address indexed sender ); constructor(address owner) public ERC20("Waste Coin", "WaCo") { _mint(owner, 20000000 * 10 ** 18); transferOwnership(owner); } function blacklist(address account) onlyOwner public returns (bool) { _setupRole(BLACKLISTED_ADDRESSES, account); return true; } function unblacklist(address account) onlyOwner public returns (bool) { _revokeRole(BLACKLISTED_ADDRESSES, account); return true; } function isBlacklisted(address account) public view returns (bool) { return _roles[BLACKLISTED_ADDRESSES].members.contains(account); } function getBlacklistedCount() public view returns (uint256) { return _roles[BLACKLISTED_ADDRESSES].members.length(); } function hasRole(bytes32 role, address account) public view returns (bool) { return _roles[role].members.contains(account); } function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } function _grantRole(bytes32 role, address account) private { if (_roles[role].members.add(account)) { emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (_roles[role].members.remove(account)) { emit RoleRevoked(role, account, _msgSender()); } } function transfer(address recipient, uint256 amount) public override returns (bool) { require( !hasRole(BLACKLISTED_ADDRESSES, msg.sender), "Caller is blacklisted!" ); super.transfer(recipient, amount); return true; } function mint(address recipient, uint256 amount) onlyOwner public returns (bool) { _mint(recipient, amount); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"owner","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":"BLACKLISTED_ADDRESSES","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","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":"account","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"getBlacklistedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002e5d38038062002e5d8339818101604052810190620000379190620005e2565b6040518060400160405280600a81526020017f576173746520436f696e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5761436f000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb9291906200051b565b508060049080519060200190620000d49291906200051b565b5050506000620000e9620001bd60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001a5816a108b2a2c28029094000000620001c560201b60201c565b620001b6816200032a60201b60201c565b5062000912565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000238576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022f90620006d8565b60405180910390fd5b6200024c60008383620004ec60201b60201c565b806002600082825462000260919062000728565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002b7919062000728565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200031e9190620006fa565b60405180910390a35050565b6200033a620001bd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000360620004f160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b090620006b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200042c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004239062000694565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200052990620007c3565b90600052602060002090601f0160209004810192826200054d576000855562000599565b82601f106200056857805160ff191683800117855562000599565b8280016001018555821562000599579182015b82811115620005985782518255916020019190600101906200057b565b5b509050620005a89190620005ac565b5090565b5b80821115620005c7576000816000905550600101620005ad565b5090565b600081519050620005dc81620008f8565b92915050565b600060208284031215620005f557600080fd5b60006200060584828501620005cb565b91505092915050565b60006200061d60268362000717565b91506200062a8262000857565b604082019050919050565b60006200064460208362000717565b91506200065182620008a6565b602082019050919050565b60006200066b601f8362000717565b91506200067882620008cf565b602082019050919050565b6200068e81620007b9565b82525050565b60006020820190508181036000830152620006af816200060e565b9050919050565b60006020820190508181036000830152620006d18162000635565b9050919050565b60006020820190508181036000830152620006f3816200065c565b9050919050565b600060208201905062000711600083018462000683565b92915050565b600082825260208201905092915050565b60006200073582620007b9565b91506200074283620007b9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200077a5762000779620007f9565b5b828201905092915050565b6000620007928262000799565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620007dc57607f821691505b60208210811415620007f357620007f262000828565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b620009038162000785565b81146200090f57600080fd5b50565b61253b80620009226000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d714610368578063a9059cbb14610398578063dd62ed3e146103c8578063f2fde38b146103f8578063f9f92be414610414578063fe575a871461044457610137565b8063715018a6146102c257806375e3661e146102cc5780638da5cb5b146102fc57806391d148541461031a57806395d89b411461034a57610137565b806339509351116100ff57806339509351146101f657806340c10f19146102265780634af3ff0f146102565780635a1d02771461027457806370a082311461029257610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b610144610474565b6040516101519190611e3c565b60405180910390f35b610174600480360381019061016f9190611b6e565b610506565b6040516101819190611e06565b60405180910390f35b610192610524565b60405161019f9190611fbe565b60405180910390f35b6101c260048036038101906101bd9190611b1f565b61052e565b6040516101cf9190611e06565b60405180910390f35b6101e06106ac565b6040516101ed9190611fd9565b60405180910390f35b610210600480360381019061020b9190611b6e565b6106b5565b60405161021d9190611e06565b60405180910390f35b610240600480360381019061023b9190611b6e565b610761565b60405161024d9190611e06565b60405180910390f35b61025e6107f3565b60405161026b9190611e21565b60405180910390f35b61027c610817565b6040516102899190611fbe565b60405180910390f35b6102ac60048036038101906102a79190611aba565b61085c565b6040516102b99190611fbe565b60405180910390f35b6102ca6108a4565b005b6102e660048036038101906102e19190611aba565b6109e1565b6040516102f39190611e06565b60405180910390f35b610304610a92565b6040516103119190611deb565b60405180910390f35b610334600480360381019061032f9190611baa565b610abc565b6040516103419190611e06565b60405180910390f35b610352610aee565b60405161035f9190611e3c565b60405180910390f35b610382600480360381019061037d9190611b6e565b610b80565b60405161038f9190611e06565b60405180910390f35b6103b260048036038101906103ad9190611b6e565b610cf2565b6040516103bf9190611e06565b60405180910390f35b6103e260048036038101906103dd9190611ae3565b610d73565b6040516103ef9190611fbe565b60405180910390f35b610412600480360381019061040d9190611aba565b610dfa565b005b61042e60048036038101906104299190611aba565b610fa6565b60405161043b9190611e06565b60405180910390f35b61045e60048036038101906104599190611aba565b611057565b60405161046b9190611e06565b60405180910390f35b6060600380546104839061212c565b80601f01602080910402602001604051908101604052809291908181526020018280546104af9061212c565b80156104fc5780601f106104d1576101008083540402835291602001916104fc565b820191906000526020600020905b8154815290600101906020018083116104df57829003601f168201915b5050505050905090565b600061051a6105136110a8565b84846110b0565b6001905092915050565b6000600254905090565b600061053b84848461127b565b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105856110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f890611efe565b60405180910390fd5b6106a18461060d6110a8565b84600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106576110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461069c9190612066565b6110b0565b600190509392505050565b60006012905090565b60006107576106c26110a8565b8484600160006106d06110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107529190612010565b6110b0565b6001905092915050565b600061076b6110a8565b73ffffffffffffffffffffffffffffffffffffffff16610789610a92565b73ffffffffffffffffffffffffffffffffffffffff16146107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d690611f1e565b60405180910390fd5b6107e983836114fb565b6001905092915050565b7f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d581565b6000610857600660007f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d5815260200190815260200160002060000161164f565b905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108ac6110a8565b73ffffffffffffffffffffffffffffffffffffffff166108ca610a92565b73ffffffffffffffffffffffffffffffffffffffff1614610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790611f1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006109eb6110a8565b73ffffffffffffffffffffffffffffffffffffffff16610a09610a92565b73ffffffffffffffffffffffffffffffffffffffff1614610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5690611f1e565b60405180910390fd5b610a897f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d583611664565b60019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610ae682600660008681526020019081526020016000206000016116f890919063ffffffff16565b905092915050565b606060048054610afd9061212c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b299061212c565b8015610b765780601f10610b4b57610100808354040283529160200191610b76565b820191906000526020600020905b815481529060010190602001808311610b5957829003601f168201915b5050505050905090565b60008160016000610b8f6110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f90611f7e565b60405180910390fd5b610ce8610c536110a8565b848460016000610c616110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ce39190612066565b6110b0565b6001905092915050565b6000610d1e7f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d533610abc565b15610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590611ede565b60405180910390fd5b610d688383611728565b506001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e026110a8565b73ffffffffffffffffffffffffffffffffffffffff16610e20610a92565b73ffffffffffffffffffffffffffffffffffffffff1614610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90611f1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd90611e7e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fb06110a8565b73ffffffffffffffffffffffffffffffffffffffff16610fce610a92565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90611f1e565b60405180910390fd5b61104e7f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d583611746565b60019050919050565b60006110a182600660007f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d581526020019081526020016000206000016116f890919063ffffffff16565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790611f5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790611e9e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126e9190611fbe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290611f3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135290611e5e565b60405180910390fd5b611366838383611754565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90611ebe565b60405180910390fd5b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114359190612066565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461148a9190612010565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114ee9190611fbe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290611f9e565b60405180910390fd5b61157760008383611754565b80600260008282546115899190612010565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115de9190612010565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116439190611fbe565b60405180910390a35050565b600061165d82600001611759565b9050919050565b61168c816006600085815260200190815260200160002060000161176a90919063ffffffff16565b156116f4576116996110a8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611720836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61179a565b905092915050565b600061173c6117356110a8565b848461127b565b6001905092915050565b61175082826117bd565b5050565b505050565b600081600001805490509050919050565b6000611792836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611851565b905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b6117e581600660008581526020019081526020016000206000016119db90919063ffffffff16565b1561184d576117f26110a8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080836001016000848152602001908152602001600020549050600081146119cf5760006001826118839190612066565b905060006001866000018054905061189b9190612066565b905060008660000182815481106118db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611925577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055506001836119409190612010565b8760010160008381526020019081526020016000208190555086600001805480611993577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506119d5565b60009150505b92915050565b6000611a03836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611a0b565b905092915050565b6000611a17838361179a565b611a70578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611a75565b600090505b92915050565b600081359050611a8a816124c0565b92915050565b600081359050611a9f816124d7565b92915050565b600081359050611ab4816124ee565b92915050565b600060208284031215611acc57600080fd5b6000611ada84828501611a7b565b91505092915050565b60008060408385031215611af657600080fd5b6000611b0485828601611a7b565b9250506020611b1585828601611a7b565b9150509250929050565b600080600060608486031215611b3457600080fd5b6000611b4286828701611a7b565b9350506020611b5386828701611a7b565b9250506040611b6486828701611aa5565b9150509250925092565b60008060408385031215611b8157600080fd5b6000611b8f85828601611a7b565b9250506020611ba085828601611aa5565b9150509250929050565b60008060408385031215611bbd57600080fd5b6000611bcb85828601611a90565b9250506020611bdc85828601611a7b565b9150509250929050565b611bef8161209a565b82525050565b611bfe816120ac565b82525050565b611c0d816120b8565b82525050565b6000611c1e82611ff4565b611c288185611fff565b9350611c388185602086016120f9565b611c41816121bc565b840191505092915050565b6000611c59602383611fff565b9150611c64826121cd565b604082019050919050565b6000611c7c602683611fff565b9150611c878261221c565b604082019050919050565b6000611c9f602283611fff565b9150611caa8261226b565b604082019050919050565b6000611cc2602683611fff565b9150611ccd826122ba565b604082019050919050565b6000611ce5601683611fff565b9150611cf082612309565b602082019050919050565b6000611d08602883611fff565b9150611d1382612332565b604082019050919050565b6000611d2b602083611fff565b9150611d3682612381565b602082019050919050565b6000611d4e602583611fff565b9150611d59826123aa565b604082019050919050565b6000611d71602483611fff565b9150611d7c826123f9565b604082019050919050565b6000611d94602583611fff565b9150611d9f82612448565b604082019050919050565b6000611db7601f83611fff565b9150611dc282612497565b602082019050919050565b611dd6816120e2565b82525050565b611de5816120ec565b82525050565b6000602082019050611e006000830184611be6565b92915050565b6000602082019050611e1b6000830184611bf5565b92915050565b6000602082019050611e366000830184611c04565b92915050565b60006020820190508181036000830152611e568184611c13565b905092915050565b60006020820190508181036000830152611e7781611c4c565b9050919050565b60006020820190508181036000830152611e9781611c6f565b9050919050565b60006020820190508181036000830152611eb781611c92565b9050919050565b60006020820190508181036000830152611ed781611cb5565b9050919050565b60006020820190508181036000830152611ef781611cd8565b9050919050565b60006020820190508181036000830152611f1781611cfb565b9050919050565b60006020820190508181036000830152611f3781611d1e565b9050919050565b60006020820190508181036000830152611f5781611d41565b9050919050565b60006020820190508181036000830152611f7781611d64565b9050919050565b60006020820190508181036000830152611f9781611d87565b9050919050565b60006020820190508181036000830152611fb781611daa565b9050919050565b6000602082019050611fd36000830184611dcd565b92915050565b6000602082019050611fee6000830184611ddc565b92915050565b600081519050919050565b600082825260208201905092915050565b600061201b826120e2565b9150612026836120e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561205b5761205a61215e565b5b828201905092915050565b6000612071826120e2565b915061207c836120e2565b92508282101561208f5761208e61215e565b5b828203905092915050565b60006120a5826120c2565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156121175780820151818401526020810190506120fc565b83811115612126576000848401525b50505050565b6000600282049050600182168061214457607f821691505b602082108114156121585761215761218d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c657220697320626c61636b6c69737465642100000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6124c98161209a565b81146124d457600080fd5b50565b6124e0816120b8565b81146124eb57600080fd5b50565b6124f7816120e2565b811461250257600080fd5b5056fea2646970667358221220e77036bcff2f53935c9c1f44776a7a713f407550fb3b2ef0c480c2afbd3d88e264736f6c63430008010033000000000000000000000000d4b7a74a657f3930b42716247be47b6ab9762d9d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d714610368578063a9059cbb14610398578063dd62ed3e146103c8578063f2fde38b146103f8578063f9f92be414610414578063fe575a871461044457610137565b8063715018a6146102c257806375e3661e146102cc5780638da5cb5b146102fc57806391d148541461031a57806395d89b411461034a57610137565b806339509351116100ff57806339509351146101f657806340c10f19146102265780634af3ff0f146102565780635a1d02771461027457806370a082311461029257610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b610144610474565b6040516101519190611e3c565b60405180910390f35b610174600480360381019061016f9190611b6e565b610506565b6040516101819190611e06565b60405180910390f35b610192610524565b60405161019f9190611fbe565b60405180910390f35b6101c260048036038101906101bd9190611b1f565b61052e565b6040516101cf9190611e06565b60405180910390f35b6101e06106ac565b6040516101ed9190611fd9565b60405180910390f35b610210600480360381019061020b9190611b6e565b6106b5565b60405161021d9190611e06565b60405180910390f35b610240600480360381019061023b9190611b6e565b610761565b60405161024d9190611e06565b60405180910390f35b61025e6107f3565b60405161026b9190611e21565b60405180910390f35b61027c610817565b6040516102899190611fbe565b60405180910390f35b6102ac60048036038101906102a79190611aba565b61085c565b6040516102b99190611fbe565b60405180910390f35b6102ca6108a4565b005b6102e660048036038101906102e19190611aba565b6109e1565b6040516102f39190611e06565b60405180910390f35b610304610a92565b6040516103119190611deb565b60405180910390f35b610334600480360381019061032f9190611baa565b610abc565b6040516103419190611e06565b60405180910390f35b610352610aee565b60405161035f9190611e3c565b60405180910390f35b610382600480360381019061037d9190611b6e565b610b80565b60405161038f9190611e06565b60405180910390f35b6103b260048036038101906103ad9190611b6e565b610cf2565b6040516103bf9190611e06565b60405180910390f35b6103e260048036038101906103dd9190611ae3565b610d73565b6040516103ef9190611fbe565b60405180910390f35b610412600480360381019061040d9190611aba565b610dfa565b005b61042e60048036038101906104299190611aba565b610fa6565b60405161043b9190611e06565b60405180910390f35b61045e60048036038101906104599190611aba565b611057565b60405161046b9190611e06565b60405180910390f35b6060600380546104839061212c565b80601f01602080910402602001604051908101604052809291908181526020018280546104af9061212c565b80156104fc5780601f106104d1576101008083540402835291602001916104fc565b820191906000526020600020905b8154815290600101906020018083116104df57829003601f168201915b5050505050905090565b600061051a6105136110a8565b84846110b0565b6001905092915050565b6000600254905090565b600061053b84848461127b565b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105856110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f890611efe565b60405180910390fd5b6106a18461060d6110a8565b84600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106576110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461069c9190612066565b6110b0565b600190509392505050565b60006012905090565b60006107576106c26110a8565b8484600160006106d06110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107529190612010565b6110b0565b6001905092915050565b600061076b6110a8565b73ffffffffffffffffffffffffffffffffffffffff16610789610a92565b73ffffffffffffffffffffffffffffffffffffffff16146107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d690611f1e565b60405180910390fd5b6107e983836114fb565b6001905092915050565b7f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d581565b6000610857600660007f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d5815260200190815260200160002060000161164f565b905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108ac6110a8565b73ffffffffffffffffffffffffffffffffffffffff166108ca610a92565b73ffffffffffffffffffffffffffffffffffffffff1614610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790611f1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006109eb6110a8565b73ffffffffffffffffffffffffffffffffffffffff16610a09610a92565b73ffffffffffffffffffffffffffffffffffffffff1614610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5690611f1e565b60405180910390fd5b610a897f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d583611664565b60019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610ae682600660008681526020019081526020016000206000016116f890919063ffffffff16565b905092915050565b606060048054610afd9061212c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b299061212c565b8015610b765780601f10610b4b57610100808354040283529160200191610b76565b820191906000526020600020905b815481529060010190602001808311610b5957829003601f168201915b5050505050905090565b60008160016000610b8f6110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f90611f7e565b60405180910390fd5b610ce8610c536110a8565b848460016000610c616110a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ce39190612066565b6110b0565b6001905092915050565b6000610d1e7f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d533610abc565b15610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590611ede565b60405180910390fd5b610d688383611728565b506001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e026110a8565b73ffffffffffffffffffffffffffffffffffffffff16610e20610a92565b73ffffffffffffffffffffffffffffffffffffffff1614610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90611f1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd90611e7e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fb06110a8565b73ffffffffffffffffffffffffffffffffffffffff16610fce610a92565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90611f1e565b60405180910390fd5b61104e7f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d583611746565b60019050919050565b60006110a182600660007f38d20d7121ab3fcdb6c82fe22d0e9bd2d2cd73b74c7cf0a3ce2781fc8198d8d581526020019081526020016000206000016116f890919063ffffffff16565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790611f5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790611e9e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126e9190611fbe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290611f3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135290611e5e565b60405180910390fd5b611366838383611754565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90611ebe565b60405180910390fd5b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114359190612066565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461148a9190612010565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114ee9190611fbe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290611f9e565b60405180910390fd5b61157760008383611754565b80600260008282546115899190612010565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115de9190612010565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116439190611fbe565b60405180910390a35050565b600061165d82600001611759565b9050919050565b61168c816006600085815260200190815260200160002060000161176a90919063ffffffff16565b156116f4576116996110a8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611720836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61179a565b905092915050565b600061173c6117356110a8565b848461127b565b6001905092915050565b61175082826117bd565b5050565b505050565b600081600001805490509050919050565b6000611792836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611851565b905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b6117e581600660008581526020019081526020016000206000016119db90919063ffffffff16565b1561184d576117f26110a8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080836001016000848152602001908152602001600020549050600081146119cf5760006001826118839190612066565b905060006001866000018054905061189b9190612066565b905060008660000182815481106118db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611925577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055506001836119409190612010565b8760010160008381526020019081526020016000208190555086600001805480611993577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506119d5565b60009150505b92915050565b6000611a03836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611a0b565b905092915050565b6000611a17838361179a565b611a70578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611a75565b600090505b92915050565b600081359050611a8a816124c0565b92915050565b600081359050611a9f816124d7565b92915050565b600081359050611ab4816124ee565b92915050565b600060208284031215611acc57600080fd5b6000611ada84828501611a7b565b91505092915050565b60008060408385031215611af657600080fd5b6000611b0485828601611a7b565b9250506020611b1585828601611a7b565b9150509250929050565b600080600060608486031215611b3457600080fd5b6000611b4286828701611a7b565b9350506020611b5386828701611a7b565b9250506040611b6486828701611aa5565b9150509250925092565b60008060408385031215611b8157600080fd5b6000611b8f85828601611a7b565b9250506020611ba085828601611aa5565b9150509250929050565b60008060408385031215611bbd57600080fd5b6000611bcb85828601611a90565b9250506020611bdc85828601611a7b565b9150509250929050565b611bef8161209a565b82525050565b611bfe816120ac565b82525050565b611c0d816120b8565b82525050565b6000611c1e82611ff4565b611c288185611fff565b9350611c388185602086016120f9565b611c41816121bc565b840191505092915050565b6000611c59602383611fff565b9150611c64826121cd565b604082019050919050565b6000611c7c602683611fff565b9150611c878261221c565b604082019050919050565b6000611c9f602283611fff565b9150611caa8261226b565b604082019050919050565b6000611cc2602683611fff565b9150611ccd826122ba565b604082019050919050565b6000611ce5601683611fff565b9150611cf082612309565b602082019050919050565b6000611d08602883611fff565b9150611d1382612332565b604082019050919050565b6000611d2b602083611fff565b9150611d3682612381565b602082019050919050565b6000611d4e602583611fff565b9150611d59826123aa565b604082019050919050565b6000611d71602483611fff565b9150611d7c826123f9565b604082019050919050565b6000611d94602583611fff565b9150611d9f82612448565b604082019050919050565b6000611db7601f83611fff565b9150611dc282612497565b602082019050919050565b611dd6816120e2565b82525050565b611de5816120ec565b82525050565b6000602082019050611e006000830184611be6565b92915050565b6000602082019050611e1b6000830184611bf5565b92915050565b6000602082019050611e366000830184611c04565b92915050565b60006020820190508181036000830152611e568184611c13565b905092915050565b60006020820190508181036000830152611e7781611c4c565b9050919050565b60006020820190508181036000830152611e9781611c6f565b9050919050565b60006020820190508181036000830152611eb781611c92565b9050919050565b60006020820190508181036000830152611ed781611cb5565b9050919050565b60006020820190508181036000830152611ef781611cd8565b9050919050565b60006020820190508181036000830152611f1781611cfb565b9050919050565b60006020820190508181036000830152611f3781611d1e565b9050919050565b60006020820190508181036000830152611f5781611d41565b9050919050565b60006020820190508181036000830152611f7781611d64565b9050919050565b60006020820190508181036000830152611f9781611d87565b9050919050565b60006020820190508181036000830152611fb781611daa565b9050919050565b6000602082019050611fd36000830184611dcd565b92915050565b6000602082019050611fee6000830184611ddc565b92915050565b600081519050919050565b600082825260208201905092915050565b600061201b826120e2565b9150612026836120e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561205b5761205a61215e565b5b828201905092915050565b6000612071826120e2565b915061207c836120e2565b92508282101561208f5761208e61215e565b5b828203905092915050565b60006120a5826120c2565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156121175780820151818401526020810190506120fc565b83811115612126576000848401525b50505050565b6000600282049050600182168061214457607f821691505b602082108114156121585761215761218d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c657220697320626c61636b6c69737465642100000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6124c98161209a565b81146124d457600080fd5b50565b6124e0816120b8565b81146124eb57600080fd5b50565b6124f7816120e2565b811461250257600080fd5b5056fea2646970667358221220e77036bcff2f53935c9c1f44776a7a713f407550fb3b2ef0c480c2afbd3d88e264736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d4b7a74a657f3930b42716247be47b6ab9762d9d
-----Decoded View---------------
Arg [0] : owner (address): 0xd4B7A74a657F3930b42716247be47b6aB9762D9d
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d4b7a74a657f3930b42716247be47b6ab9762d9d
Deployed Bytecode Sourcemap
35344:2503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5767:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8048:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6860:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8740:506;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6711:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9655:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37698:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35602:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36598:133;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7031:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16671:148;;;:::i;:::-;;36280:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16020:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36743:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5977:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10455:460;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37406:284;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7700:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16974:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36121:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36442:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5767:91;5812:13;5845:5;5838:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5767:91;:::o;8048:210::-;8167:4;8189:39;8198:12;:10;:12::i;:::-;8212:7;8221:6;8189:8;:39::i;:::-;8246:4;8239:11;;8048:210;;;;:::o;6860:108::-;6921:7;6948:12;;6941:19;;6860:108;:::o;8740:506::-;8880:4;8897:36;8907:6;8915:9;8926:6;8897:9;:36::i;:::-;9005:6;8968:11;:19;8980:6;8968:19;;;;;;;;;;;;;;;:33;8988:12;:10;:12::i;:::-;8968:33;;;;;;;;;;;;;;;;:43;;8946:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;9090:124;9113:6;9134:12;:10;:12::i;:::-;9197:6;9161:11;:19;9173:6;9161:19;;;;;;;;;;;;;;;:33;9181:12;:10;:12::i;:::-;9161:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;9090:8;:124::i;:::-;9234:4;9227:11;;8740:506;;;;;:::o;6711:84::-;6760:5;6785:2;6778:9;;6711:84;:::o;9655:297::-;9770:4;9792:130;9815:12;:10;:12::i;:::-;9842:7;9901:10;9864:11;:25;9876:12;:10;:12::i;:::-;9864:25;;;;;;;;;;;;;;;:34;9890:7;9864:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9792:8;:130::i;:::-;9940:4;9933:11;;9655:297;;;;:::o;37698:146::-;37773:4;16251:12;:10;:12::i;:::-;16240:23;;:7;:5;:7::i;:::-;:23;;;16232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37790:24:::1;37796:9;37807:6;37790:5;:24::i;:::-;37832:4;37825:11;;37698:146:::0;;;;:::o;35602:91::-;35659:34;35602:91;:::o;36598:133::-;36650:7;36677:46;:6;:29;35659:34;36677:29;;;;;;;;;;;:37;;:44;:46::i;:::-;36670:53;;36598:133;:::o;7031:177::-;7150:7;7182:9;:18;7192:7;7182:18;;;;;;;;;;;;;;;;7175:25;;7031:177;;;:::o;16671:148::-;16251:12;:10;:12::i;:::-;16240:23;;:7;:5;:7::i;:::-;:23;;;16232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16778:1:::1;16741:40;;16762:6;;;;;;;;;;;16741:40;;;;;;;;;;;;16809:1;16792:6;;:19;;;;;;;;;;;;;;;;;;16671:148::o:0;36280:154::-;36344:4;16251:12;:10;:12::i;:::-;16240:23;;:7;:5;:7::i;:::-;:23;;;16232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36361:43:::1;35659:34;36396:7;36361:11;:43::i;:::-;36422:4;36415:11;;36280:154:::0;;;:::o;16020:87::-;16066:7;16093:6;;;;;;;;;;;16086:13;;16020:87;:::o;36743:139::-;36812:4;36836:38;36866:7;36836:6;:12;36843:4;36836:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;36829:45;;36743:139;;;;:::o;5977:95::-;6024:13;6057:7;6050:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5977:95;:::o;10455:460::-;10575:4;10657:15;10619:11;:25;10631:12;:10;:12::i;:::-;10619:25;;;;;;;;;;;;;;;:34;10645:7;10619:34;;;;;;;;;;;;;;;;:53;;10597:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;10748:135;10771:12;:10;:12::i;:::-;10798:7;10857:15;10820:11;:25;10832:12;:10;:12::i;:::-;10820:25;;;;;;;;;;;;;;;:34;10846:7;10820:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;10748:8;:135::i;:::-;10903:4;10896:11;;10455:460;;;;:::o;37406:284::-;37484:4;37524:42;35659:34;37555:10;37524:7;:42::i;:::-;37523:43;37501:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;37627:33;37642:9;37653:6;37627:14;:33::i;:::-;;37678:4;37671:11;;37406:284;;;;:::o;7700:201::-;7834:7;7866:11;:18;7878:5;7866:18;;;;;;;;;;;;;;;:27;7885:7;7866:27;;;;;;;;;;;;;;;;7859:34;;7700:201;;;;:::o;16974:281::-;16251:12;:10;:12::i;:::-;16240:23;;:7;:5;:7::i;:::-;:23;;;16232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17097:1:::1;17077:22;;:8;:22;;;;17055:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;17210:8;17181:38;;17202:6;;;;;;;;;;;17181:38;;;;;;;;;;;;17239:8;17230:6;;:17;;;;;;;;;;;;;;;;;;16974:281:::0;:::o;36121:151::-;36183:4;16251:12;:10;:12::i;:::-;16240:23;;:7;:5;:7::i;:::-;:23;;;16232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36200:42:::1;35659:34;36234:7;36200:10;:42::i;:::-;36260:4;36253:11;;36121:151:::0;;;:::o;36442:148::-;36503:4;36527:55;36574:7;36527:6;:29;35659:34;36527:29;;;;;;;;;;;:37;;:46;;:55;;;;:::i;:::-;36520:62;;36442:148;;;:::o;641:98::-;694:7;721:10;714:17;;641:98;:::o;13873:380::-;14026:1;14009:19;;:5;:19;;;;14001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14107:1;14088:21;;:7;:21;;;;14080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14191:6;14161:11;:18;14173:5;14161:18;;;;;;;;;;;;;;;:27;14180:7;14161:27;;;;;;;;;;;;;;;:36;;;;14229:7;14213:32;;14222:5;14213:32;;;14238:6;14213:32;;;;;;:::i;:::-;;;;;;;;13873:380;;;:::o;11405:612::-;11563:1;11545:20;;:6;:20;;;;11537:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11647:1;11626:23;;:9;:23;;;;11618:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11702:47;11723:6;11731:9;11742:6;11702:20;:47::i;:::-;11805:6;11784:9;:17;11794:6;11784:17;;;;;;;;;;;;;;;;:27;;11762:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;11909:6;11888:9;:17;11898:6;11888:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;11950:6;11926:9;:20;11936:9;11926:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11991:9;11974:35;;11983:6;11974:35;;;12002:6;11974:35;;;;;;:::i;:::-;;;;;;;;11405:612;;;:::o;12299:338::-;12402:1;12383:21;;:7;:21;;;;12375:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12453:49;12482:1;12486:7;12495:6;12453:20;:49::i;:::-;12531:6;12515:12;;:22;;;;;;;:::i;:::-;;;;;;;;12570:6;12548:9;:18;12558:7;12548:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12613:7;12592:37;;12609:1;12592:37;;;12622:6;12592:37;;;;;;:::i;:::-;;;;;;;;12299:338;;:::o;32974:117::-;33037:7;33064:19;33072:3;:10;;33064:7;:19::i;:::-;33057:26;;32974:117;;;:::o;37206:192::-;37281:36;37309:7;37281:6;:12;37288:4;37281:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;37277:114;;;37366:12;:10;:12::i;:::-;37339:40;;37357:7;37339:40;;37351:4;37339:40;;;;;;;;;;37277:114;37206:192;;:::o;32689:199::-;32796:4;32825:55;32835:3;:10;;32871:5;32855:23;;32847:32;;32825:9;:55::i;:::-;32818:62;;32689:199;;;;:::o;7421:216::-;7543:4;7565:42;7575:12;:10;:12::i;:::-;7589:9;7600:6;7565:9;:42::i;:::-;7625:4;7618:11;;7421:216;;;;:::o;36890:112::-;36969:25;36980:4;36986:7;36969:10;:25::i;:::-;36890:112;;:::o;14856:125::-;;;;:::o;29371:109::-;29427:7;29454:3;:11;;:18;;;;29447:25;;29371:109;;;:::o;32422:181::-;32513:4;32542:53;32550:3;:10;;32586:5;32570:23;;32562:32;;32542:7;:53::i;:::-;32535:60;;32422:181;;;;:::o;29124:161::-;29224:4;29276:1;29253:3;:12;;:19;29266:5;29253:19;;;;;;;;;;;;:24;;29246:31;;29124:161;;;;:::o;37010:188::-;37084:33;37109:7;37084:6;:12;37091:4;37084:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;37080:111;;;37166:12;:10;:12::i;:::-;37139:40;;37157:7;37139:40;;37151:4;37139:40;;;;;;;;;;37080:111;37010:188;;:::o;27481:1557::-;27547:4;27665:18;27686:3;:12;;:19;27699:5;27686:19;;;;;;;;;;;;27665:40;;27736:1;27722:10;:15;27718:1313;;28097:21;28134:1;28121:10;:14;;;;:::i;:::-;28097:38;;28150:17;28191:1;28170:3;:11;;:18;;;;:22;;;;:::i;:::-;28150:42;;28437:17;28457:3;:11;;28469:9;28457:22;;;;;;;;;;;;;;;;;;;;;;;;28437:42;;28603:9;28574:3;:11;;28586:13;28574:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;28722:1;28706:13;:17;;;;:::i;:::-;28680:3;:12;;:23;28693:9;28680:23;;;;;;;;;;;:43;;;;28832:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28927:3;:12;;:19;28940:5;28927:19;;;;;;;;;;;28920:26;;;28970:4;28963:11;;;;;;;;27718:1313;29014:5;29007:12;;;27481:1557;;;;;:::o;32071:175::-;32159:4;32188:50;32193:3;:10;;32229:5;32213:23;;32205:32;;32188:4;:50::i;:::-;32181:57;;32071:175;;;;:::o;26891:414::-;26954:4;26976:21;26986:3;26991:5;26976:9;:21::i;:::-;26971:327;;27014:3;:11;;27031:5;27014:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27197:3;:11;;:18;;;;27175:3;:12;;:19;27188:5;27175:19;;;;;;;;;;;:40;;;;27237:4;27230:11;;;;26971:327;27281:5;27274:12;;26891:414;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:139::-;;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;349:87;;;;:::o;442:262::-;;550:2;538:9;529:7;525:23;521:32;518:2;;;566:1;563;556:12;518:2;609:1;634:53;679:7;670:6;659:9;655:22;634:53;:::i;:::-;624:63;;580:117;508:196;;;;:::o;710:407::-;;;835:2;823:9;814:7;810:23;806:32;803:2;;;851:1;848;841:12;803:2;894:1;919:53;964:7;955:6;944:9;940:22;919:53;:::i;:::-;909:63;;865:117;1021:2;1047:53;1092:7;1083:6;1072:9;1068:22;1047:53;:::i;:::-;1037:63;;992:118;793:324;;;;;:::o;1123:552::-;;;;1265:2;1253:9;1244:7;1240:23;1236:32;1233:2;;;1281:1;1278;1271:12;1233:2;1324:1;1349:53;1394:7;1385:6;1374:9;1370:22;1349:53;:::i;:::-;1339:63;;1295:117;1451:2;1477:53;1522:7;1513:6;1502:9;1498:22;1477:53;:::i;:::-;1467:63;;1422:118;1579:2;1605:53;1650:7;1641:6;1630:9;1626:22;1605:53;:::i;:::-;1595:63;;1550:118;1223:452;;;;;:::o;1681:407::-;;;1806:2;1794:9;1785:7;1781:23;1777:32;1774:2;;;1822:1;1819;1812:12;1774:2;1865:1;1890:53;1935:7;1926:6;1915:9;1911:22;1890:53;:::i;:::-;1880:63;;1836:117;1992:2;2018:53;2063:7;2054:6;2043:9;2039:22;2018:53;:::i;:::-;2008:63;;1963:118;1764:324;;;;;:::o;2094:407::-;;;2219:2;2207:9;2198:7;2194:23;2190:32;2187:2;;;2235:1;2232;2225:12;2187:2;2278:1;2303:53;2348:7;2339:6;2328:9;2324:22;2303:53;:::i;:::-;2293:63;;2249:117;2405:2;2431:53;2476:7;2467:6;2456:9;2452:22;2431:53;:::i;:::-;2421:63;;2376:118;2177:324;;;;;:::o;2507:118::-;2594:24;2612:5;2594:24;:::i;:::-;2589:3;2582:37;2572:53;;:::o;2631:109::-;2712:21;2727:5;2712:21;:::i;:::-;2707:3;2700:34;2690:50;;:::o;2746:118::-;2833:24;2851:5;2833:24;:::i;:::-;2828:3;2821:37;2811:53;;:::o;2870:364::-;;2986:39;3019:5;2986:39;:::i;:::-;3041:71;3105:6;3100:3;3041:71;:::i;:::-;3034:78;;3121:52;3166:6;3161:3;3154:4;3147:5;3143:16;3121:52;:::i;:::-;3198:29;3220:6;3198:29;:::i;:::-;3193:3;3189:39;3182:46;;2962:272;;;;;:::o;3240:366::-;;3403:67;3467:2;3462:3;3403:67;:::i;:::-;3396:74;;3479:93;3568:3;3479:93;:::i;:::-;3597:2;3592:3;3588:12;3581:19;;3386:220;;;:::o;3612:366::-;;3775:67;3839:2;3834:3;3775:67;:::i;:::-;3768:74;;3851:93;3940:3;3851:93;:::i;:::-;3969:2;3964:3;3960:12;3953:19;;3758:220;;;:::o;3984:366::-;;4147:67;4211:2;4206:3;4147:67;:::i;:::-;4140:74;;4223:93;4312:3;4223:93;:::i;:::-;4341:2;4336:3;4332:12;4325:19;;4130:220;;;:::o;4356:366::-;;4519:67;4583:2;4578:3;4519:67;:::i;:::-;4512:74;;4595:93;4684:3;4595:93;:::i;:::-;4713:2;4708:3;4704:12;4697:19;;4502:220;;;:::o;4728:366::-;;4891:67;4955:2;4950:3;4891:67;:::i;:::-;4884:74;;4967:93;5056:3;4967:93;:::i;:::-;5085:2;5080:3;5076:12;5069:19;;4874:220;;;:::o;5100:366::-;;5263:67;5327:2;5322:3;5263:67;:::i;:::-;5256:74;;5339:93;5428:3;5339:93;:::i;:::-;5457:2;5452:3;5448:12;5441:19;;5246:220;;;:::o;5472:366::-;;5635:67;5699:2;5694:3;5635:67;:::i;:::-;5628:74;;5711:93;5800:3;5711:93;:::i;:::-;5829:2;5824:3;5820:12;5813:19;;5618:220;;;:::o;5844:366::-;;6007:67;6071:2;6066:3;6007:67;:::i;:::-;6000:74;;6083:93;6172:3;6083:93;:::i;:::-;6201:2;6196:3;6192:12;6185:19;;5990:220;;;:::o;6216:366::-;;6379:67;6443:2;6438:3;6379:67;:::i;:::-;6372:74;;6455:93;6544:3;6455:93;:::i;:::-;6573:2;6568:3;6564:12;6557:19;;6362:220;;;:::o;6588:366::-;;6751:67;6815:2;6810:3;6751:67;:::i;:::-;6744:74;;6827:93;6916:3;6827:93;:::i;:::-;6945:2;6940:3;6936:12;6929:19;;6734:220;;;:::o;6960:366::-;;7123:67;7187:2;7182:3;7123:67;:::i;:::-;7116:74;;7199:93;7288:3;7199:93;:::i;:::-;7317:2;7312:3;7308:12;7301:19;;7106:220;;;:::o;7332:118::-;7419:24;7437:5;7419:24;:::i;:::-;7414:3;7407:37;7397:53;;:::o;7456:112::-;7539:22;7555:5;7539:22;:::i;:::-;7534:3;7527:35;7517:51;;:::o;7574:222::-;;7705:2;7694:9;7690:18;7682:26;;7718:71;7786:1;7775:9;7771:17;7762:6;7718:71;:::i;:::-;7672:124;;;;:::o;7802:210::-;;7927:2;7916:9;7912:18;7904:26;;7940:65;8002:1;7991:9;7987:17;7978:6;7940:65;:::i;:::-;7894:118;;;;:::o;8018:222::-;;8149:2;8138:9;8134:18;8126:26;;8162:71;8230:1;8219:9;8215:17;8206:6;8162:71;:::i;:::-;8116:124;;;;:::o;8246:313::-;;8397:2;8386:9;8382:18;8374:26;;8446:9;8440:4;8436:20;8432:1;8421:9;8417:17;8410:47;8474:78;8547:4;8538:6;8474:78;:::i;:::-;8466:86;;8364:195;;;;:::o;8565:419::-;;8769:2;8758:9;8754:18;8746:26;;8818:9;8812:4;8808:20;8804:1;8793:9;8789:17;8782:47;8846:131;8972:4;8846:131;:::i;:::-;8838:139;;8736:248;;;:::o;8990:419::-;;9194:2;9183:9;9179:18;9171:26;;9243:9;9237:4;9233:20;9229:1;9218:9;9214:17;9207:47;9271:131;9397:4;9271:131;:::i;:::-;9263:139;;9161:248;;;:::o;9415:419::-;;9619:2;9608:9;9604:18;9596:26;;9668:9;9662:4;9658:20;9654:1;9643:9;9639:17;9632:47;9696:131;9822:4;9696:131;:::i;:::-;9688:139;;9586:248;;;:::o;9840:419::-;;10044:2;10033:9;10029:18;10021:26;;10093:9;10087:4;10083:20;10079:1;10068:9;10064:17;10057:47;10121:131;10247:4;10121:131;:::i;:::-;10113:139;;10011:248;;;:::o;10265:419::-;;10469:2;10458:9;10454:18;10446:26;;10518:9;10512:4;10508:20;10504:1;10493:9;10489:17;10482:47;10546:131;10672:4;10546:131;:::i;:::-;10538:139;;10436:248;;;:::o;10690:419::-;;10894:2;10883:9;10879:18;10871:26;;10943:9;10937:4;10933:20;10929:1;10918:9;10914:17;10907:47;10971:131;11097:4;10971:131;:::i;:::-;10963:139;;10861:248;;;:::o;11115:419::-;;11319:2;11308:9;11304:18;11296:26;;11368:9;11362:4;11358:20;11354:1;11343:9;11339:17;11332:47;11396:131;11522:4;11396:131;:::i;:::-;11388:139;;11286:248;;;:::o;11540:419::-;;11744:2;11733:9;11729:18;11721:26;;11793:9;11787:4;11783:20;11779:1;11768:9;11764:17;11757:47;11821:131;11947:4;11821:131;:::i;:::-;11813:139;;11711:248;;;:::o;11965:419::-;;12169:2;12158:9;12154:18;12146:26;;12218:9;12212:4;12208:20;12204:1;12193:9;12189:17;12182:47;12246:131;12372:4;12246:131;:::i;:::-;12238:139;;12136:248;;;:::o;12390:419::-;;12594:2;12583:9;12579:18;12571:26;;12643:9;12637:4;12633:20;12629:1;12618:9;12614:17;12607:47;12671:131;12797:4;12671:131;:::i;:::-;12663:139;;12561:248;;;:::o;12815:419::-;;13019:2;13008:9;13004:18;12996:26;;13068:9;13062:4;13058:20;13054:1;13043:9;13039:17;13032:47;13096:131;13222:4;13096:131;:::i;:::-;13088:139;;12986:248;;;:::o;13240:222::-;;13371:2;13360:9;13356:18;13348:26;;13384:71;13452:1;13441:9;13437:17;13428:6;13384:71;:::i;:::-;13338:124;;;;:::o;13468:214::-;;13595:2;13584:9;13580:18;13572:26;;13608:67;13672:1;13661:9;13657:17;13648:6;13608:67;:::i;:::-;13562:120;;;;:::o;13688:99::-;;13774:5;13768:12;13758:22;;13747:40;;;:::o;13793:169::-;;13911:6;13906:3;13899:19;13951:4;13946:3;13942:14;13927:29;;13889:73;;;;:::o;13968:305::-;;14027:20;14045:1;14027:20;:::i;:::-;14022:25;;14061:20;14079:1;14061:20;:::i;:::-;14056:25;;14215:1;14147:66;14143:74;14140:1;14137:81;14134:2;;;14221:18;;:::i;:::-;14134:2;14265:1;14262;14258:9;14251:16;;14012:261;;;;:::o;14279:191::-;;14339:20;14357:1;14339:20;:::i;:::-;14334:25;;14373:20;14391:1;14373:20;:::i;:::-;14368:25;;14412:1;14409;14406:8;14403:2;;;14417:18;;:::i;:::-;14403:2;14462:1;14459;14455:9;14447:17;;14324:146;;;;:::o;14476:96::-;;14542:24;14560:5;14542:24;:::i;:::-;14531:35;;14521:51;;;:::o;14578:90::-;;14655:5;14648:13;14641:21;14630:32;;14620:48;;;:::o;14674:77::-;;14740:5;14729:16;;14719:32;;;:::o;14757:126::-;;14834:42;14827:5;14823:54;14812:65;;14802:81;;;:::o;14889:77::-;;14955:5;14944:16;;14934:32;;;:::o;14972:86::-;;15047:4;15040:5;15036:16;15025:27;;15015:43;;;:::o;15064:307::-;15132:1;15142:113;15156:6;15153:1;15150:13;15142:113;;;15241:1;15236:3;15232:11;15226:18;15222:1;15217:3;15213:11;15206:39;15178:2;15175:1;15171:10;15166:15;;15142:113;;;15273:6;15270:1;15267:13;15264:2;;;15353:1;15344:6;15339:3;15335:16;15328:27;15264:2;15113:258;;;;:::o;15377:320::-;;15458:1;15452:4;15448:12;15438:22;;15505:1;15499:4;15495:12;15526:18;15516:2;;15582:4;15574:6;15570:17;15560:27;;15516:2;15644;15636:6;15633:14;15613:18;15610:38;15607:2;;;15663:18;;:::i;:::-;15607:2;15428:269;;;;:::o;15703:180::-;15751:77;15748:1;15741:88;15848:4;15845:1;15838:15;15872:4;15869:1;15862:15;15889:180;15937:77;15934:1;15927:88;16034:4;16031:1;16024:15;16058:4;16055:1;16048:15;16075:102;;16167:2;16163:7;16158:2;16151:5;16147:14;16143:28;16133:38;;16123:54;;;:::o;16183:222::-;16323:34;16319:1;16311:6;16307:14;16300:58;16392:5;16387:2;16379:6;16375:15;16368:30;16289:116;:::o;16411:225::-;16551:34;16547:1;16539:6;16535:14;16528:58;16620:8;16615:2;16607:6;16603:15;16596:33;16517:119;:::o;16642:221::-;16782:34;16778:1;16770:6;16766:14;16759:58;16851:4;16846:2;16838:6;16834:15;16827:29;16748:115;:::o;16869:225::-;17009:34;17005:1;16997:6;16993:14;16986:58;17078:8;17073:2;17065:6;17061:15;17054:33;16975:119;:::o;17100:172::-;17240:24;17236:1;17228:6;17224:14;17217:48;17206:66;:::o;17278:227::-;17418:34;17414:1;17406:6;17402:14;17395:58;17487:10;17482:2;17474:6;17470:15;17463:35;17384:121;:::o;17511:182::-;17651:34;17647:1;17639:6;17635:14;17628:58;17617:76;:::o;17699:224::-;17839:34;17835:1;17827:6;17823:14;17816:58;17908:7;17903:2;17895:6;17891:15;17884:32;17805:118;:::o;17929:223::-;18069:34;18065:1;18057:6;18053:14;18046:58;18138:6;18133:2;18125:6;18121:15;18114:31;18035:117;:::o;18158:224::-;18298:34;18294:1;18286:6;18282:14;18275:58;18367:7;18362:2;18354:6;18350:15;18343:32;18264:118;:::o;18388:181::-;18528:33;18524:1;18516:6;18512:14;18505:57;18494:75;:::o;18575:122::-;18648:24;18666:5;18648:24;:::i;:::-;18641:5;18638:35;18628:2;;18687:1;18684;18677:12;18628:2;18618:79;:::o;18703:122::-;18776:24;18794:5;18776:24;:::i;:::-;18769:5;18766:35;18756:2;;18815:1;18812;18805:12;18756:2;18746:79;:::o;18831:122::-;18904:24;18922:5;18904:24;:::i;:::-;18897:5;18894:35;18884:2;;18943:1;18940;18933:12;18884:2;18874:79;:::o
Swarm Source
ipfs://e77036bcff2f53935c9c1f44776a7a713f407550fb3b2ef0c480c2afbd3d88e2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.000211 | 881 | $0.1856 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.